/
flutter_01.sksl.json
1 lines (1 loc) · 93.7 KB
/
flutter_01.sksl.json
1
{"platform":"android","name":"sdk gphone64 x86 64","engineRevision":"5e9e0e0aa8be4ff69facadd706b713f0bb54d5b3","data":{"AYQA5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAAAAOQAAAAAAAQAAAABAMQAAAAA":"CQAAAExTS1PMAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQ0IHVsb2NhbE1hdHJpeF9TMDsKaW4gZmxvYXQyIGluUG9zaXRpb247CmluIGhhbGY0IGluQ29sb3I7CmluIGZsb2F0NCBpbkNpcmNsZUVkZ2U7Cm91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKb3V0IGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBDaXJjbGVHZW9tZXRyeVByb2Nlc3NvcgoJdmluQ2lyY2xlRWRnZV9TMCA9IGluQ2lyY2xlRWRnZTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzBfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247CglmbG9hdDIgX3RtcF8xX2luUG9zaXRpb24gPSB1bG9jYWxNYXRyaXhfUzAueHogKiBpblBvc2l0aW9uICsgdWxvY2FsTWF0cml4X1MwLnl3OwoJc2tfUG9zaXRpb24gPSBfdG1wXzBfaW5Qb3NpdGlvbi54eTAxOwp9CgAAAAACAgAAaW4gZmxvYXQ0IHZpbkNpcmNsZUVkZ2VfUzA7CmluIGhhbGY0IHZpbkNvbG9yX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgQ2lyY2xlR2VvbWV0cnlQcm9jZXNzb3IKCWZsb2F0NCBjaXJjbGVFZGdlOwoJY2lyY2xlRWRnZSA9IHZpbkNpcmNsZUVkZ2VfUzA7CgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmluQ29sb3JfUzA7CglmbG9hdCBkID0gbGVuZ3RoKGNpcmNsZUVkZ2UueHkpOwoJaGFsZiBkaXN0YW5jZVRvT3V0ZXJFZGdlID0gaGFsZihjaXJjbGVFZGdlLnogKiAoMS4wIC0gZCkpOwoJaGFsZiBlZGdlQWxwaGEgPSBzYXR1cmF0ZShkaXN0YW5jZVRvT3V0ZXJFZGdlKTsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoZWRnZUFscGhhKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADAAAAGluQ2lyY2xlRWRnZQEAAAAAAAAA","AYQQ5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAAAAOQAAAAAAAQAAAABAMQAAAAA":"CQAAAExTS1PMAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQ0IHVsb2NhbE1hdHJpeF9TMDsKaW4gZmxvYXQyIGluUG9zaXRpb247CmluIGhhbGY0IGluQ29sb3I7CmluIGZsb2F0NCBpbkNpcmNsZUVkZ2U7Cm91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKb3V0IGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBDaXJjbGVHZW9tZXRyeVByb2Nlc3NvcgoJdmluQ2lyY2xlRWRnZV9TMCA9IGluQ2lyY2xlRWRnZTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzBfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247CglmbG9hdDIgX3RtcF8xX2luUG9zaXRpb24gPSB1bG9jYWxNYXRyaXhfUzAueHogKiBpblBvc2l0aW9uICsgdWxvY2FsTWF0cml4X1MwLnl3OwoJc2tfUG9zaXRpb24gPSBfdG1wXzBfaW5Qb3NpdGlvbi54eTAxOwp9CgAAAACTAgAAaW4gZmxvYXQ0IHZpbkNpcmNsZUVkZ2VfUzA7CmluIGhhbGY0IHZpbkNvbG9yX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgQ2lyY2xlR2VvbWV0cnlQcm9jZXNzb3IKCWZsb2F0NCBjaXJjbGVFZGdlOwoJY2lyY2xlRWRnZSA9IHZpbkNpcmNsZUVkZ2VfUzA7CgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmluQ29sb3JfUzA7CglmbG9hdCBkID0gbGVuZ3RoKGNpcmNsZUVkZ2UueHkpOwoJaGFsZiBkaXN0YW5jZVRvT3V0ZXJFZGdlID0gaGFsZihjaXJjbGVFZGdlLnogKiAoMS4wIC0gZCkpOwoJaGFsZiBlZGdlQWxwaGEgPSBzYXR1cmF0ZShkaXN0YW5jZVRvT3V0ZXJFZGdlKTsKCWhhbGYgZGlzdGFuY2VUb0lubmVyRWRnZSA9IGhhbGYoY2lyY2xlRWRnZS56ICogKGQgLSBjaXJjbGVFZGdlLncpKTsKCWhhbGYgaW5uZXJBbHBoYSA9IHNhdHVyYXRlKGRpc3RhbmNlVG9Jbm5lckVkZ2UpOwoJZWRnZUFscGhhICo9IGlubmVyQWxwaGE7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGVkZ2VBbHBoYSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADAAAAGluQ2lyY2xlRWRnZQEAAAAAAAAA","FAAQMYAAMAAAEADAAABAEYAAAICIAB5AABQAAAQAMAAAEATAAABAIIGAAEDCBYQCA4AAAAAAAA5AAAAAAABAAAAACAZAAAAA":"CQAAAExTS1PUCwAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0NCByYWRpaV9zZWxlY3RvcjsKaW4gZmxvYXQ0IGNvcm5lcl9hbmRfcmFkaXVzX291dHNldHM7CmluIGZsb2F0NCBhYV9ibG9hdF9hbmRfY292ZXJhZ2U7CmluIGZsb2F0NCByYWRpaV94OwppbiBmbG9hdDQgcmFkaWlfeTsKaW4gZmxvYXQ0IHNrZXc7CmluIGZsb2F0MiB0cmFuc2xhdGVfYW5kX2xvY2Fscm90YXRlOwppbiBoYWxmNCBjb2xvcjsKZmxhdCBvdXQgaGFsZjQgdmNvbG9yX1MwOwpvdXQgZmxvYXQyIHZhcmNjb29yZF9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgRmlsbFJSZWN0T3A6OlByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7CglmbG9hdCBhYV9ibG9hdF9tdWx0aXBsaWVyID0gMTsKCWZsb2F0MiBjb3JuZXIgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnh5OwoJZmxvYXQyIHJhZGl1c19vdXRzZXQgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnp3OwoJZmxvYXQyIGFhX2Jsb2F0X2RpcmVjdGlvbiA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS54eTsKCWZsb2F0IGlzX2xpbmVhcl9jb3ZlcmFnZSA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS53OwoJZmxvYXQyIHBpeGVsbGVuZ3RoID0gaW52ZXJzZXNxcnQoZmxvYXQyKGRvdChza2V3Lnh6LCBza2V3Lnh6KSwgZG90KHNrZXcueXcsIHNrZXcueXcpKSk7CglmbG9hdDQgbm9ybWFsaXplZF9heGlzX2RpcnMgPSBza2V3ICogcGl4ZWxsZW5ndGgueHl4eTsKCWZsb2F0MiBheGlzd2lkdGhzID0gKGFicyhub3JtYWxpemVkX2F4aXNfZGlycy54eSkgKyBhYnMobm9ybWFsaXplZF9heGlzX2RpcnMuencpKTsKCWZsb2F0MiBhYV9ibG9hdHJhZGl1cyA9IGF4aXN3aWR0aHMgKiBwaXhlbGxlbmd0aCAqIC41OwoJZmxvYXQ0IHJhZGlpX2FuZF9uZWlnaGJvcnMgPSByYWRpaV9zZWxlY3RvciogZmxvYXQ0eDQocmFkaWlfeCwgcmFkaWlfeSwgcmFkaWlfeC55eHd6LCByYWRpaV95Lnd6eXgpOwoJZmxvYXQyIHJhZGlpID0gcmFkaWlfYW5kX25laWdoYm9ycy54eTsKCWZsb2F0MiBuZWlnaGJvcl9yYWRpaSA9IHJhZGlpX2FuZF9uZWlnaGJvcnMuenc7CglmbG9hdCBjb3ZlcmFnZV9tdWx0aXBsaWVyID0gMTsKCWlmIChhbnkoZ3JlYXRlclRoYW4oYWFfYmxvYXRyYWRpdXMsIGZsb2F0MigxKSkpKSAKCXsKCQljb3JuZXIgPSBtYXgoYWJzKGNvcm5lciksIGFhX2Jsb2F0cmFkaXVzKSAqIHNpZ24oY29ybmVyKTsKCQljb3ZlcmFnZV9tdWx0aXBsaWVyID0gMSAvIChtYXgoYWFfYmxvYXRyYWRpdXMueCwgMSkgKiBtYXgoYWFfYmxvYXRyYWRpdXMueSwgMSkpOwoJCXJhZGlpID0gZmxvYXQyKDApOwoJfQoJZmxvYXQgY292ZXJhZ2UgPSBhYV9ibG9hdF9hbmRfY292ZXJhZ2UuejsKCWlmIChhbnkobGVzc1RoYW4ocmFkaWksIGFhX2Jsb2F0cmFkaXVzICogMS41KSkpIAoJewoJCXJhZGlpID0gZmxvYXQyKDApOwoJCWFhX2Jsb2F0X2RpcmVjdGlvbiA9IHNpZ24oY29ybmVyKTsKCQlpZiAoY292ZXJhZ2UgPiAuNSkgCgkJewoJCQlhYV9ibG9hdF9kaXJlY3Rpb24gPSAtYWFfYmxvYXRfZGlyZWN0aW9uOwoJCX0KCQlpc19saW5lYXJfY292ZXJhZ2UgPSAxOwoJfQoJZWxzZSAKCXsKCQlyYWRpaSA9IGNsYW1wKHJhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQluZWlnaGJvcl9yYWRpaSA9IGNsYW1wKG5laWdoYm9yX3JhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQlmbG9hdDIgc3BhY2luZyA9IDIgLSByYWRpaSAtIG5laWdoYm9yX3JhZGlpOwoJCWZsb2F0MiBleHRyYV9wYWQgPSBtYXgocGl4ZWxsZW5ndGggKiAuMDYyNSAtIHNwYWNpbmcsIGZsb2F0MigwKSk7CgkJcmFkaWkgLT0gZXh0cmFfcGFkICogLjU7Cgl9CglmbG9hdDIgYWFfb3V0c2V0ID0gYWFfYmxvYXRfZGlyZWN0aW9uICogYWFfYmxvYXRyYWRpdXMgKiBhYV9ibG9hdF9tdWx0aXBsaWVyOwoJZmxvYXQyIHZlcnRleHBvcyA9IGNvcm5lciArIHJhZGl1c19vdXRzZXQgKiByYWRpaSArIGFhX291dHNldDsKCWlmIChjb3ZlcmFnZSA+IC41KSAKCXsKCQlpZiAoYWFfYmxvYXRfZGlyZWN0aW9uLnggIT0gMCAmJiB2ZXJ0ZXhwb3MueCAqIGNvcm5lci54IDwgMCkgCgkJewoJCQlmbG9hdCBiYWNrc2V0ID0gYWJzKHZlcnRleHBvcy54KTsKCQkJdmVydGV4cG9zLnggPSAwOwoJCQl2ZXJ0ZXhwb3MueSArPSBiYWNrc2V0ICogc2lnbihjb3JuZXIueSkgKiBwaXhlbGxlbmd0aC55L3BpeGVsbGVuZ3RoLng7CgkJCWNvdmVyYWdlID0gKGNvdmVyYWdlIC0gLjUpICogYWJzKGNvcm5lci54KSAvIChhYnMoY29ybmVyLngpICsgYmFja3NldCkgKyAuNTsKCQl9CgkJaWYgKGFhX2Jsb2F0X2RpcmVjdGlvbi55ICE9IDAgJiYgdmVydGV4cG9zLnkgKiBjb3JuZXIueSA8IDApIAoJCXsKCQkJZmxvYXQgYmFja3NldCA9IGFicyh2ZXJ0ZXhwb3MueSk7CgkJCXZlcnRleHBvcy55ID0gMDsKCQkJdmVydGV4cG9zLnggKz0gYmFja3NldCAqIHNpZ24oY29ybmVyLngpICogcGl4ZWxsZW5ndGgueC9waXhlbGxlbmd0aC55OwoJCQljb3ZlcmFnZSA9IChjb3ZlcmFnZSAtIC41KSAqIGFicyhjb3JuZXIueSkgLyAoYWJzKGNvcm5lci55KSArIGJhY2tzZXQpICsgLjU7CgkJfQoJfQoJZmxvYXQyeDIgc2tld21hdHJpeCA9IGZsb2F0MngyKHNrZXcueHksIHNrZXcuencpOwoJZmxvYXQyIGRldmNvb3JkID0gdmVydGV4cG9zICogc2tld21hdHJpeCArIHRyYW5zbGF0ZV9hbmRfbG9jYWxyb3RhdGUueHk7CglpZiAoMCAhPSBpc19saW5lYXJfY292ZXJhZ2UpIAoJewoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MigwLCBjb3ZlcmFnZSAqIGNvdmVyYWdlX211bHRpcGxpZXIpOwoJfQoJZWxzZSAKCXsKCQlmbG9hdDIgYXJjY29vcmQgPSAxIC0gYWJzKHJhZGl1c19vdXRzZXQpICsgYWFfb3V0c2V0L3JhZGlpICogY29ybmVyOwoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MihhcmNjb29yZC54KzEsIGFyY2Nvb3JkLnkpOwoJfQoJc2tfUG9zaXRpb24gPSBkZXZjb29yZC54eTAxOwp9CgAAAABdAgAAZmxhdCBpbiBoYWxmNCB2Y29sb3JfUzA7CmluIGZsb2F0MiB2YXJjY29vcmRfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBGaWxsUlJlY3RPcDo6UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgeF9wbHVzXzE9dmFyY2Nvb3JkX1MwLngsIHk9dmFyY2Nvb3JkX1MwLnk7CgloYWxmIGNvdmVyYWdlOwoJaWYgKDAgPT0geF9wbHVzXzEpIAoJewoJCWNvdmVyYWdlID0gaGFsZih5KTsKCX0KCWVsc2UgCgl7CgkJZmxvYXQgZm4gPSB4X3BsdXNfMSAqICh4X3BsdXNfMSAtIDIpOwoJCWZuID0gZm1hKHkseSwgZm4pOwoJCWZsb2F0IGZud2lkdGggPSBmd2lkdGgoZm4pOwoJCWNvdmVyYWdlID0gLjUgLSBoYWxmKGZuL2Zud2lkdGgpOwoJCWNvdmVyYWdlID0gY2xhbXAoY292ZXJhZ2UsIDAsIDEpOwoJfQoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChjb3ZlcmFnZSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA4AAAByYWRpaV9zZWxlY3RvcgAAGQAAAGNvcm5lcl9hbmRfcmFkaXVzX291dHNldHMAAAAVAAAAYWFfYmxvYXRfYW5kX2NvdmVyYWdlAAAABwAAAHJhZGlpX3gABwAAAHJhZGlpX3kABAAAAHNrZXcZAAAAdHJhbnNsYXRlX2FuZF9sb2NhbHJvdGF0ZQAAAAUAAABjb2xvcgAAAAEAAAAAAAAA","DAQAAAAAAABGAABAYAAQAIHCAIAYAQUBAEAAAAAAEAAAAAAAAAAAAAB2AAAAAAACAAAAAEBSAAAAA":"CQAAAExTS1MWAgAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQyIHVBdGxhc1NpemVJbnZfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiB1c2hvcnQyIGluVGV4dHVyZUNvb3JkczsKb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKZmxhdCBvdXQgZmxvYXQgdlRleEluZGV4X1MwOwpvdXQgaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIEJpdG1hcFRleHQKCWludCB0ZXhJZHggPSAwOwoJZmxvYXQyIHVub3JtVGV4Q29vcmRzID0gZmxvYXQyKGluVGV4dHVyZUNvb3Jkcy54LCBpblRleHR1cmVDb29yZHMueSk7Cgl2VGV4dHVyZUNvb3Jkc19TMCA9IHVub3JtVGV4Q29vcmRzICogdUF0bGFzU2l6ZUludl9TMDsKCXZUZXhJbmRleF9TMCA9IGZsb2F0KHRleElkeCk7Cgl2aW5Db2xvcl9TMCA9IGluQ29sb3I7CglmbG9hdDIgX3RtcF8xX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJc2tfUG9zaXRpb24gPSBpblBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAyQEAAHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwppbiBmbG9hdDIgdlRleHR1cmVDb29yZHNfUzA7CmZsYXQgaW4gZmxvYXQgdlRleEluZGV4X1MwOwppbiBoYWxmNCB2aW5Db2xvcl9TMDsKb3V0IGhhbGY0IHNrX0ZyYWdDb2xvcjsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIEJpdG1hcFRleHQKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWhhbGY0IHRleENvbG9yOwoJewoJCXRleENvbG9yID0gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB2VGV4dHVyZUNvb3Jkc19TMCkucnJycjsKCX0KCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gdGV4Q29sb3I7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAPAAAAaW5UZXh0dXJlQ29vcmRzAAEAAAAAAAAA","HUQACAAAAAMAADAAAIOAAAH677776IZOCAAP577777777777777777YBAAAAAAAAAAAKAAYAAAACAAAAAAACCAYAAA":"CQAAAExTS1PPAAAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7Cm91dCBoYWxmNCB2Y29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAkAQAAaW4gaGFsZjQgdmNvbG9yX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAAAQAAAAAAAAA=","B2AAQAAABQAAIAABBYAAB7777777777774ABICAAAAAAAAAAAAAABUABAAAAAEAAAAAIBEABAAAAA":"CQAAAExTS1MOAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmIGluQ292ZXJhZ2U7Cm91dCBoYWxmIHZpbkNvdmVyYWdlX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBEZWZhdWx0R2VvbWV0cnlQcm9jZXNzb3IKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cgl2aW5Db3ZlcmFnZV9TMCA9IGluQ292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IF90bXBfMV9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAZQEAAHVuaWZvcm0gaGFsZjQgdUNvbG9yX1MwOwppbiBoYWxmIHZpbkNvdmVyYWdlX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgRGVmYXVsdEdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdUNvbG9yX1MwOwoJaGFsZiBhbHBoYSA9IDEuMDsKCWFscGhhID0gdmluQ292ZXJhZ2VfUzA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGFscGhhKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAAAGluUG9zaXRpb24AAAoAAABpbkNvdmVyYWdlAAABAAAAAAAAAA==","DASAAAAAQAAWAABAYAAQBYH7777Z6QQBAEAAAAAAEAAAAAAAEBSAAAB2AAAAAAACAAAAAEBSAAAAA":"CQAAAExTS1PVAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQyIHVBdGxhc1NpemVJbnZfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiB1c2hvcnQyIGluVGV4dHVyZUNvb3JkczsKb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKZmxhdCBvdXQgZmxvYXQgdlRleEluZGV4X1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBCaXRtYXBUZXh0CglpbnQgdGV4SWR4ID0gMDsKCWZsb2F0MiB1bm9ybVRleENvb3JkcyA9IGZsb2F0MihpblRleHR1cmVDb29yZHMueCwgaW5UZXh0dXJlQ29vcmRzLnkpOwoJdlRleHR1cmVDb29yZHNfUzAgPSB1bm9ybVRleENvb3JkcyAqIHVBdGxhc1NpemVJbnZfUzA7Cgl2VGV4SW5kZXhfUzAgPSBmbG9hdCh0ZXhJZHgpOwoJZmxvYXQyIF90bXBfMV9pblBvc2l0aW9uID0gaW5Qb3NpdGlvbjsKCXNrX1Bvc2l0aW9uID0gaW5Qb3NpdGlvbi54eTAxOwp9CgAAAAAAAAD4AQAAdW5pZm9ybSBoYWxmNCB1Q29sb3JfUzA7CnVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwppbiBmbG9hdDIgdlRleHR1cmVDb29yZHNfUzA7CmZsYXQgaW4gZmxvYXQgdlRleEluZGV4X1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgQml0bWFwVGV4dAoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHVDb2xvcl9TMDsKCWhhbGY0IHRleENvbG9yOwoJewoJCXRleENvbG9yID0gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB2VGV4dHVyZUNvb3Jkc19TMCk7Cgl9CglvdXRwdXRDb2xvcl9TMCA9IG91dHB1dENvbG9yX1MwICogdGV4Q29sb3I7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAaW5Qb3NpdGlvbgAADwAAAGluVGV4dHVyZUNvb3JkcwABAAAAAAAAAA==","AYQA5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAACABZQA6AAAEAAAAAAAIADQAAAAIAAAAAAAIIDA":"CQAAAExTS1PMAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQ0IHVsb2NhbE1hdHJpeF9TMDsKaW4gZmxvYXQyIGluUG9zaXRpb247CmluIGhhbGY0IGluQ29sb3I7CmluIGZsb2F0NCBpbkNpcmNsZUVkZ2U7Cm91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKb3V0IGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBDaXJjbGVHZW9tZXRyeVByb2Nlc3NvcgoJdmluQ2lyY2xlRWRnZV9TMCA9IGluQ2lyY2xlRWRnZTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzBfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247CglmbG9hdDIgX3RtcF8xX2luUG9zaXRpb24gPSB1bG9jYWxNYXRyaXhfUzAueHogKiBpblBvc2l0aW9uICsgdWxvY2FsTWF0cml4X1MwLnl3OwoJc2tfUG9zaXRpb24gPSBfdG1wXzBfaW5Qb3NpdGlvbi54eTAxOwp9CgEAAACnAwAAdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMTsKdW5pZm9ybSBoYWxmMiB1cmFkaXVzUGx1c0hhbGZfUzE7CmluIGZsb2F0NCB2aW5DaXJjbGVFZGdlX1MwOwppbiBoYWxmNCB2aW5Db2xvcl9TMDsKb3V0IGhhbGY0IHNrX0ZyYWdDb2xvcjsKaGFsZjQgQ2lyY3VsYXJSUmVjdF9TMShoYWxmNCBfaW5wdXQpIAp7CglmbG9hdDIgZHh5MCA9IHVpbm5lclJlY3RfUzEuTFQgLSBza19GcmFnQ29vcmQueHk7CglmbG9hdDIgZHh5MSA9IHNrX0ZyYWdDb29yZC54eSAtIHVpbm5lclJlY3RfUzEuUkI7CglmbG9hdDIgZHh5ID0gbWF4KG1heChkeHkwLCBkeHkxKSwgMC4wKTsKCWhhbGYgYWxwaGEgPSBoYWxmKHNhdHVyYXRlKHVyYWRpdXNQbHVzSGFsZl9TMS54IC0gbGVuZ3RoKGR4eSkpKTsKCWFscGhhID0gMS4wIC0gYWxwaGE7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDQgY2lyY2xlRWRnZTsKCWNpcmNsZUVkZ2UgPSB2aW5DaXJjbGVFZGdlX1MwOwoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZpbkNvbG9yX1MwOwoJZmxvYXQgZCA9IGxlbmd0aChjaXJjbGVFZGdlLnh5KTsKCWhhbGYgZGlzdGFuY2VUb091dGVyRWRnZSA9IGhhbGYoY2lyY2xlRWRnZS56ICogKDEuMCAtIGQpKTsKCWhhbGYgZWRnZUFscGhhID0gc2F0dXJhdGUoZGlzdGFuY2VUb091dGVyRWRnZSk7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGVkZ2VBbHBoYSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBDaXJjdWxhclJSZWN0X1MxKG91dHB1dENvdmVyYWdlX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dF9TMTsKCX0KfQoAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADAAAAGluQ2lyY2xlRWRnZQEAAAAAAAAA","JS5ZKLDQAAAAAAAAAAAAADAAAIAACDQAAAIROCAAAAAAAAAAAAAAAHMAAYAAAACRJNQWUCAAAAAPUIXGHUAAAAAAAIAAAABSEJVCSTANAEAAAAAAAAAEARXUIXGHWAAAAAAAAAAAAB2AAAAAAACAAAAAEBSAAAAA":"CQAAAExTS1M2AgAAc3RydWN0IFZhcnlpbmdzX1MwIAp7CgloYWxmNCBjb2xvcjsKfQo7CnN0cnVjdCBBdHRyaWJ1dGVzX1MwIAp7CglmbG9hdDIgcG9zOwoJaGFsZjQgY29sb3I7Cn0KOwp1bmlmb3JtIGZsb2F0NCBza19SVEFkanVzdDsKaW4gZmxvYXQyIHBvczsKaW4gaGFsZjQgY29sb3I7Cm91dCBoYWxmNCB2Y29sb3JfUzA7CmZsb2F0MiBjdXN0b21fbWVzaF92c19TMChBdHRyaWJ1dGVzX1MwIGEsIG91dCBWYXJ5aW5nc19TMCB2KSAKewoJdi5jb2xvciA9IGEuY29sb3I7CglyZXR1cm4gYS5wb3M7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgTWVzaEdQCglBdHRyaWJ1dGVzX1MwIGF0dHJpYnV0ZXM7CglhdHRyaWJ1dGVzLnBvcyA9IHBvczsKCWF0dHJpYnV0ZXMuY29sb3IgPSBjb2xvcjsKCVZhcnlpbmdzX1MwIHZhcnlpbmdzOwoJZmxvYXQyIHBvcyA9IGN1c3RvbV9tZXNoX3ZzX1MwKGF0dHJpYnV0ZXMsIHZhcnlpbmdzKTsKCXZjb2xvcl9TMCA9IHZhcnlpbmdzLmNvbG9yOwoJZmxvYXQyIF90bXBfMV9wb3MgPSBwb3M7Cglza19Qb3NpdGlvbiA9IF90bXBfMV9wb3MueHkwMTsKfQoAAAAAAAAaBAAAc3RydWN0IFZhcnlpbmdzX1MwIAp7CgloYWxmNCBjb2xvcjsKfQo7CnVuaWZvcm0gaGFsZjQgdWNvbG9yX1MxX2MwOwppbiBoYWxmNCB2Y29sb3JfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CnZvaWQgY3VzdG9tX21lc2hfZnNfUzAoVmFyeWluZ3NfUzAgdiwgb3V0IGZsb2F0NCBjb2xvcikgCnsKCWNvbG9yID0gZmxvYXQ0KGZsb2F0Myh2LmNvbG9yLnp5eCAqIHYuY29sb3IudyksIGZsb2F0KHYuY29sb3IudykpOwp9CmhhbGY0IGNvbG9yX2ZwX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJcmV0dXJuIGhhbGY0KHVjb2xvcl9TMV9jMCk7Cn0KaGFsZjQgZ2F1c3NpYW5fZnBfUzFfYzEoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8xX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGZhY3RvciA9IDEuMCAtIF9pbnB1dC53OwoJZmFjdG9yID0gZXhwKCgtZmFjdG9yICogZmFjdG9yKSAqIDQuMCkgLSAwLjAxNzk5OTk5OTIyNTEzOTYxODsKCXJldHVybiBoYWxmNChoYWxmNChmYWN0b3IpKTsKfQpoYWxmNCBCbGVuZF9TMShoYWxmNCBfc3JjLCBoYWxmNCBfZHN0KSAKewoJcmV0dXJuIGJsZW5kX21vZHVsYXRlKGNvbG9yX2ZwX1MxX2MwKF9zcmMpLCBnYXVzc2lhbl9mcF9TMV9jMShfc3JjKSk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIE1lc2hHUAoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJVmFyeWluZ3NfUzAgdmFyeWluZ3M7Cgl2YXJ5aW5ncy5jb2xvciA9IHZjb2xvcl9TMDsKCWZsb2F0NCBjb2xvcjsKCWN1c3RvbV9tZXNoX2ZzX1MwKHZhcnlpbmdzLCBjb2xvcik7CglvdXRwdXRDb2xvcl9TMCA9IGhhbGY0KGNvbG9yKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IEJsZW5kX1MxKG91dHB1dENvbG9yX1MwLCBoYWxmNCgxKSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0X1MxICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAABwb3MABQAAAGNvbG9yAAAAAQAAAAAAAAA=","AYTRVAADQAAAOAEARAFQJAABBADAAAILBYAACCYUQD777777777767YAAAAAAAAAAAAOQAAAAAAAQAAAABAMQAAAAA":"CQAAAExTS1NyAgAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQ0IHVsb2NhbE1hdHJpeF9TMDsKaW4gZmxvYXQyIGluUG9zaXRpb247CmluIGhhbGY0IGluQ29sb3I7CmluIGZsb2F0NCBpbkNpcmNsZUVkZ2U7CmluIGhhbGYzIGluQ2xpcFBsYW5lOwppbiBoYWxmMyBpbklzZWN0UGxhbmU7Cm91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKb3V0IGhhbGYzIHZpbkNsaXBQbGFuZV9TMDsKb3V0IGhhbGYzIHZpbklzZWN0UGxhbmVfUzA7Cm91dCBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgQ2lyY2xlR2VvbWV0cnlQcm9jZXNzb3IKCXZpbkNpcmNsZUVkZ2VfUzAgPSBpbkNpcmNsZUVkZ2U7Cgl2aW5DbGlwUGxhbmVfUzAgPSBpbkNsaXBQbGFuZTsKCXZpbklzZWN0UGxhbmVfUzAgPSBpbklzZWN0UGxhbmU7Cgl2aW5Db2xvcl9TMCA9IGluQ29sb3I7CglmbG9hdDIgX3RtcF8wX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJZmxvYXQyIF90bXBfMV9pblBvc2l0aW9uID0gdWxvY2FsTWF0cml4X1MwLnh6ICogaW5Qb3NpdGlvbiArIHVsb2NhbE1hdHJpeF9TMC55dzsKCXNrX1Bvc2l0aW9uID0gX3RtcF8wX2luUG9zaXRpb24ueHkwMTsKfQoAAAAAAAD1AwAAaW4gZmxvYXQ0IHZpbkNpcmNsZUVkZ2VfUzA7CmluIGhhbGYzIHZpbkNsaXBQbGFuZV9TMDsKaW4gaGFsZjMgdmluSXNlY3RQbGFuZV9TMDsKaW4gaGFsZjQgdmluQ29sb3JfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBDaXJjbGVHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQ0IGNpcmNsZUVkZ2U7CgljaXJjbGVFZGdlID0gdmluQ2lyY2xlRWRnZV9TMDsKCWhhbGYzIGNsaXBQbGFuZTsKCWNsaXBQbGFuZSA9IHZpbkNsaXBQbGFuZV9TMDsKCWhhbGYzIGlzZWN0UGxhbmU7Cglpc2VjdFBsYW5lID0gdmluSXNlY3RQbGFuZV9TMDsKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWZsb2F0IGQgPSBsZW5ndGgoY2lyY2xlRWRnZS54eSk7CgloYWxmIGRpc3RhbmNlVG9PdXRlckVkZ2UgPSBoYWxmKGNpcmNsZUVkZ2UueiAqICgxLjAgLSBkKSk7CgloYWxmIGVkZ2VBbHBoYSA9IHNhdHVyYXRlKGRpc3RhbmNlVG9PdXRlckVkZ2UpOwoJaGFsZiBkaXN0YW5jZVRvSW5uZXJFZGdlID0gaGFsZihjaXJjbGVFZGdlLnogKiAoZCAtIGNpcmNsZUVkZ2UudykpOwoJaGFsZiBpbm5lckFscGhhID0gc2F0dXJhdGUoZGlzdGFuY2VUb0lubmVyRWRnZSk7CgllZGdlQWxwaGEgKj0gaW5uZXJBbHBoYTsKCWhhbGYgY2xpcCA9IGhhbGYoc2F0dXJhdGUoY2lyY2xlRWRnZS56ICogZG90KGNpcmNsZUVkZ2UueHksIGNsaXBQbGFuZS54eSkgKyBjbGlwUGxhbmUueikpOwoJY2xpcCAqPSBoYWxmKHNhdHVyYXRlKGNpcmNsZUVkZ2UueiAqIGRvdChjaXJjbGVFZGdlLnh5LCBpc2VjdFBsYW5lLnh5KSArIGlzZWN0UGxhbmUueikpOwoJZWRnZUFscGhhICo9IGNsaXA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGVkZ2VBbHBoYSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAMAAAAaW5DaXJjbGVFZGdlCwAAAGluQ2xpcFBsYW5lAAwAAABpbklzZWN0UGxhbmUBAAAAAAAAAA==","HUJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAAQQGAARAGQWMHGBRIAAAAABQAAAAAAAAAAHIAAAAAAAIAAAAAQGIAA":"CQAAAExTS1PlAAAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQyIGxvY2FsQ29vcmQ7Cm91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgAAAAEAAABhBAAAY29uc3QgaW50IGtGaWxsQUFfUzEgPSAxOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQldfUzEgPSAyOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQUFfUzEgPSAzOwp1bmlmb3JtIGZsb2F0NCB1Y2lyY2xlX1MxOwp1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMDsKaW4gZmxvYXQyIHZsb2NhbENvb3JkX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwpoYWxmNCBDaXJjbGVfUzEoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGQ7CglpZiAoaW50KDEpID09IGtJbnZlcnNlRmlsbEJXX1MxIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMSkgCgl7CgkJZCA9IGhhbGYoKGxlbmd0aCgodWNpcmNsZV9TMS54eSAtIHNrX0ZyYWdDb29yZC54eSkgKiB1Y2lyY2xlX1MxLncpIC0gMS4wKSAqIHVjaXJjbGVfUzEueik7Cgl9CgllbHNlIAoJewoJCWQgPSBoYWxmKCgxLjAgLSBsZW5ndGgoKHVjaXJjbGVfUzEueHkgLSBza19GcmFnQ29vcmQueHkpICogdWNpcmNsZV9TMS53KSkgKiB1Y2lyY2xlX1MxLnopOwoJfQoJaWYgKGludCgxKSA9PSBrRmlsbEFBX1MxIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMSkgCgl7CgkJcmV0dXJuIGhhbGY0KF9pbnB1dCAqIHNhdHVyYXRlKGQpKTsKCX0KCWVsc2UgCgl7CgkJcmV0dXJuIGhhbGY0KGQgPiAwLjUgPyBfaW5wdXQgOiBoYWxmNCgwLjApKTsKCX0KfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMCA9IGhhbGY0KDEpOwoJZmxvYXQyIHRleENvb3JkOwoJdGV4Q29vcmQgPSB2bG9jYWxDb29yZF9TMDsKCW91dHB1dENvbG9yX1MwID0gKChzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzAsIHRleENvb3JkKSAqIGhhbGY0KDEpKSk7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gQ2lyY2xlX1MxKG91dHB1dENvdmVyYWdlX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dF9TMTsKCX0KfQoAAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAABwb3NpdGlvbgoAAABsb2NhbENvb3JkAAABAAAAAAAAAA==","JS5ZKLDQAEAAAAAAAAAAADAAAIAACDQAAAIROCAAAAAAAAAAAAAAAHMAAYAAAACRJNQWUCAAAAAPUIXGHUAAAAAAAIAAAABSEJVCSTANAEAAAAAAAAAEARXUIXGHWAAAAAAAAAAAAB2AAAAAAACAAAAAEBSAAAAA":"CQAAAExTS1N9AgAAc3RydWN0IFZhcnlpbmdzX1MwIAp7CgloYWxmNCBjb2xvcjsKfQo7CnN0cnVjdCBBdHRyaWJ1dGVzX1MwIAp7CglmbG9hdDIgcG9zOwoJaGFsZjQgY29sb3I7Cn0KOwp1bmlmb3JtIGZsb2F0NCBza19SVEFkanVzdDsKdW5pZm9ybSBmbG9hdDQgdXZpZXdNYXRyaXhfUzA7CmluIGZsb2F0MiBwb3M7CmluIGhhbGY0IGNvbG9yOwpvdXQgaGFsZjQgdmNvbG9yX1MwOwpmbG9hdDIgY3VzdG9tX21lc2hfdnNfUzAoQXR0cmlidXRlc19TMCBhLCBvdXQgVmFyeWluZ3NfUzAgdikgCnsKCXYuY29sb3IgPSBhLmNvbG9yOwoJcmV0dXJuIGEucG9zOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIE1lc2hHUAoJQXR0cmlidXRlc19TMCBhdHRyaWJ1dGVzOwoJYXR0cmlidXRlcy5wb3MgPSBwb3M7CglhdHRyaWJ1dGVzLmNvbG9yID0gY29sb3I7CglWYXJ5aW5nc19TMCB2YXJ5aW5nczsKCWZsb2F0MiBwb3MgPSBjdXN0b21fbWVzaF92c19TMChhdHRyaWJ1dGVzLCB2YXJ5aW5ncyk7Cgl2Y29sb3JfUzAgPSB2YXJ5aW5ncy5jb2xvcjsKCWZsb2F0MiBfdG1wXzBfcG9zID0gdXZpZXdNYXRyaXhfUzAueHogKiBwb3MgKyB1dmlld01hdHJpeF9TMC55dzsKCXNrX1Bvc2l0aW9uID0gX3RtcF8wX3Bvcy54eTAxOwp9CgAAAAAAAAAaBAAAc3RydWN0IFZhcnlpbmdzX1MwIAp7CgloYWxmNCBjb2xvcjsKfQo7CnVuaWZvcm0gaGFsZjQgdWNvbG9yX1MxX2MwOwppbiBoYWxmNCB2Y29sb3JfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CnZvaWQgY3VzdG9tX21lc2hfZnNfUzAoVmFyeWluZ3NfUzAgdiwgb3V0IGZsb2F0NCBjb2xvcikgCnsKCWNvbG9yID0gZmxvYXQ0KGZsb2F0Myh2LmNvbG9yLnp5eCAqIHYuY29sb3IudyksIGZsb2F0KHYuY29sb3IudykpOwp9CmhhbGY0IGNvbG9yX2ZwX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJcmV0dXJuIGhhbGY0KHVjb2xvcl9TMV9jMCk7Cn0KaGFsZjQgZ2F1c3NpYW5fZnBfUzFfYzEoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8xX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGZhY3RvciA9IDEuMCAtIF9pbnB1dC53OwoJZmFjdG9yID0gZXhwKCgtZmFjdG9yICogZmFjdG9yKSAqIDQuMCkgLSAwLjAxNzk5OTk5OTIyNTEzOTYxODsKCXJldHVybiBoYWxmNChoYWxmNChmYWN0b3IpKTsKfQpoYWxmNCBCbGVuZF9TMShoYWxmNCBfc3JjLCBoYWxmNCBfZHN0KSAKewoJcmV0dXJuIGJsZW5kX21vZHVsYXRlKGNvbG9yX2ZwX1MxX2MwKF9zcmMpLCBnYXVzc2lhbl9mcF9TMV9jMShfc3JjKSk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIE1lc2hHUAoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJVmFyeWluZ3NfUzAgdmFyeWluZ3M7Cgl2YXJ5aW5ncy5jb2xvciA9IHZjb2xvcl9TMDsKCWZsb2F0NCBjb2xvcjsKCWN1c3RvbV9tZXNoX2ZzX1MwKHZhcnlpbmdzLCBjb2xvcik7CglvdXRwdXRDb2xvcl9TMCA9IGhhbGY0KGNvbG9yKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IEJsZW5kX1MxKG91dHB1dENvbG9yX1MwLCBoYWxmNCgxKSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0X1MxICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAABwb3MABQAAAGNvbG9yAAAAAQAAAAAAAAA=","HUJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAAQQGACQAGAAAAAQAAAAAAAQQGAAA":"CQAAAExTS1PlAAAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQyIGxvY2FsQ29vcmQ7Cm91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgAAAAAAAAC3AQAAdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7CmluIGZsb2F0MiB2bG9jYWxDb29yZF9TMDsKb3V0IGhhbGY0IHNrX0ZyYWdDb2xvcjsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzAgPSBoYWxmNCgxKTsKCWZsb2F0MiB0ZXhDb29yZDsKCXRleENvb3JkID0gdmxvY2FsQ29vcmRfUzA7CglvdXRwdXRDb2xvcl9TMCA9ICgoc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB0ZXhDb29yZCkgKiBoYWxmNCgxKSkpOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAABwb3NpdGlvbgoAAABsb2NhbENvb3JkAAABAAAAAAAAAA==","HVJAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAABAAAAAABBAMABAAOAAAABAAAAAAABBAMAAA":"CQAAAExTS1MjAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpmbGF0IG91dCBoYWxmNCB2Y29sb3JfUzA7Cm91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7Cgl2bG9jYWxDb29yZF9TMCA9IGxvY2FsQ29vcmQ7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAAAAADoAQAAdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7CmZsYXQgaW4gaGFsZjQgdmNvbG9yX1MwOwppbiBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7CglmbG9hdDIgdGV4Q29vcmQ7Cgl0ZXhDb29yZCA9IHZsb2NhbENvb3JkX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSAoKHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMCwgdGV4Q29vcmQpICogb3V0cHV0Q29sb3JfUzApKTsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAgAAABwb3NpdGlvbgUAAABjb2xvcgAAAAoAAABsb2NhbENvb3JkAAABAAAAAAAAAA==","HVIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAHQBOSN6AGCAABAAAAAAAEAAAABSCQ7IGTADBAAAAAAAAAAAAABAADZABQAAAIAAAAAAGQAEAAAAAQAAAABAEQAE":"CQAAAExTS1PZAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKaW4gZmxvYXQyIHBvc2l0aW9uOwppbiBmbG9hdCBjb3ZlcmFnZTsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpmbGF0IG91dCBoYWxmNCB2Y29sb3JfUzA7Cm91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm91dCBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwoJewoJCXZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwID0gZmxvYXQzeDIodW1hdHJpeF9TMSkgKiBsb2NhbENvb3JkLnh5MTsKCX0KfQoAAAABAAAAXxwAAGNvbnN0IGZsb2F0IGk2Ml9TMV9jMCA9IDAuMDsKY29uc3QgZmxvYXQgaTYzX1MxX2MwID0gMS4wOwpjb25zdCBmbG9hdDIgaTcwX1MxX2MwID0gZmxvYXQyKDUuMzk4NzAwMjM3Mjc0MTY5OSwgNS40NDIxMDAwNDgwNjUxODU1KTsKY29uc3QgZmxvYXQyIGk3OF9TMV9jMCA9IGZsb2F0MigyMS41MzUxMDA5MzY4ODk2NDgsIDE0LjMxMzY5OTcyMjI5MDAzOSk7CmNvbnN0IGZsb2F0IGk5NF9TMV9jMCA9IDk1LjQzMDcwMjIwOTQ3MjY1NjsKY29uc3QgZmxvYXQgaTk4X1MxX2MwID0gNzUuMDQ5NjA2MzIzMjQyMTg4Owpjb25zdCBmbG9hdCBpMTMxX1MxX2MwID0gMC41Owpjb25zdCBmbG9hdCBpMjAyX1MxX2MwID0gMC42NDk5OTk5NzYxNTgxNDIwOTsKY29uc3QgZmxvYXQgaTIwOF9TMV9jMCA9IDUwLjA7CmNvbnN0IGZsb2F0IGkyMjRfUzFfYzAgPSAwLjA1MDAwMDAwMDc0NTA1ODA2Owpjb25zdCBmbG9hdCBpMjMxX1MxX2MwID0gMy4xNDE1OTI3NDEwMTI1NzMyOwpjb25zdCBmbG9hdCBpMjMzX1MxX2MwID0gMC4zNDk5OTk5OTQwMzk1MzU1MjsKY29uc3QgZmxvYXQgaTIzOF9TMV9jMCA9IDAuMTAwMDAwMDAxNDkwMTE2MTI7CmNvbnN0IGZsb2F0IGkyMzlfUzFfYzAgPSAwLjE1MDAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMjQ4X1MxX2MwID0gMC42OTk5OTk5ODgwNzkwNzEwNDsKY29uc3QgZmxvYXQgaTI1M19TMV9jMCA9IDAuMjAwMDAwMDAyOTgwMjMyMjQ7CmNvbnN0IGZsb2F0IGkyNTRfUzFfYzAgPSAwLjI1Owpjb25zdCBmbG9hdCBpMjYzX1MxX2MwID0gMS4wNDk5OTk5NTIzMTYyODQyOwpjb25zdCBmbG9hdCBpMjY4X1MxX2MwID0gMC4zMDAwMDAwMTE5MjA5Mjg5NjsKY29uc3QgZmxvYXQgaTI3OF9TMV9jMCA9IDAuNTUwMDAwMDExOTIwOTI4OTY7CmNvbnN0IGZsb2F0IGkyODRfUzFfYzAgPSAwLjgwMDAwMDAxMTkyMDkyODk2Owpjb25zdCBmbG9hdDIgaTI4NV9TMV9jMCA9IGZsb2F0MigwLjgwMDAwMDAxMTkyMDkyODk2LCAwLjgwMDAwMDAxMTkyMDkyODk2KTsKY29uc3QgZmxvYXQgaTI5MV9TMV9jMCA9IDAuMTcwMDAwMDAxNzg4MTM5MzQ7CmNvbnN0IGZsb2F0IGkzMTZfUzFfYzAgPSAwLjI3NTAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMzM1X1MxX2MwID0gMC40NDk5OTk5ODgwNzkwNzEwNDsKdW5pZm9ybSBmbG9hdDQgdWk0MTVfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWk0MTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQ0IHVpNDMzX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzk4X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzc2X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTM3M19TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTM2NV9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTM2M19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzNTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzU3X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzg4X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTI4OV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMDJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzE0X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTI5MF9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMDNfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzE1X1MxX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CnVuaWZvcm0gZmxvYXQ0IHVpbm5lclJlY3RfUzI7CnVuaWZvcm0gaGFsZjIgdXJhZGl1c1BsdXNIYWxmX1MyOwpmbGF0IGluIGhhbGY0IHZjb2xvcl9TMDsKaW4gZmxvYXQgdmNvdmVyYWdlX1MwOwppbiBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CmZsb2F0MngyIGkyOF9TMV9jMChmbG9hdDIgaTI3KTsKZmxvYXQgaTM1X1MxX2MwKGZsb2F0MiBpMzEsIGZsb2F0MiBpMzIsIGZsb2F0IGkzMywgZmxvYXQgaTM0KTsKZmxvYXQgaTUxX1MxX2MwKGZsb2F0MiBpNDYsIGZsb2F0MiBpNDcsIGZsb2F0MiBpNDgsIGZsb2F0MiBpNDksIGZsb2F0IGk1MCk7CmZsb2F0IGkxMV9TMV9jMChmbG9hdCBpMTApOwpmbG9hdCBpNTlfUzFfYzAoZmxvYXQyIGk1OCk7CmZsb2F0IGk0M19TMV9jMChmbG9hdDIgaTM4LCBmbG9hdDIgaTM5LCBmbG9hdCBpNDAsIGZsb2F0IGk0MSwgZmxvYXQgaTQyKTsKZmxvYXQgaTE3X1MxX2MwKGZsb2F0MiBpMTYpOwpmbG9hdCBpMjNfUzFfYzAoZmxvYXQgaTIwLCBmbG9hdCBpMjEsIGZsb2F0IGkyMik7CmZsb2F0IGk1Nl9TMV9jMChmbG9hdDIgaTU0LCBmbG9hdCBpNTUpOwpmbG9hdDJ4MiBpMjhfUzFfYzAoZmxvYXQyIGkyNykgCnsKCXJldHVybiBmbG9hdDJ4MihpMjcueCwgLWkyNy55LCBpMjcueSwgaTI3LngpOwp9CmZsb2F0IGkzNV9TMV9jMChmbG9hdDIgaTMxLCBmbG9hdDIgaTMyLCBmbG9hdCBpMzMsIGZsb2F0IGkzNCkgCnsKCWZsb2F0IGkxMjkgPSBpMzQgKiBpMTMxX1MxX2MwOwoJZmxvYXQgaTEzMyA9IGRpc3RhbmNlKGkzMSwgaTMyKTsKCXJldHVybiBpNjNfUzFfYzAgLSBzbW9vdGhzdGVwKGk2M19TMV9jMCAtIGkxMjksIGk2M19TMV9jMCArIGkxMjksIGkxMzMgLyBpMzMpOwp9CmZsb2F0IGk1MV9TMV9jMChmbG9hdDIgaTQ2LCBmbG9hdDIgaTQ3LCBmbG9hdDIgaTQ4LCBmbG9hdDIgaTQ5LCBmbG9hdCBpNTApIAp7CglmbG9hdDIgaTE4MCA9IGk0OTsKCWk0NyA9IGkyOF9TMV9jMChpMTgwKSAqIChpNDggLSBpNDcpICsgaTQ4OwoJaTQ3ID0gbW9kKGk0NywgZmxvYXQyKGk1MCwgaTUwKSkgLyBpNDY7CglmbG9hdCBpMTk1ID0gKGk1MCAvIGk0Ni55KSAqIGkxMzFfUzFfYzA7CglmbG9hdCBpMjAxID0gaTIwMl9TMV9jMCAqIGkxOTU7CglmbG9hdDIgaTIxMCA9IGk0NzsKCWZsb2F0MiBpMjEyID0gZmxvYXQyKGkxOTUsIGkxOTUpOwoJZmxvYXQgaTIxMyA9IGkyMDE7CglmbG9hdCBpMjE1ID0gaTIwMSAqIGkyMDhfUzFfYzA7CglyZXR1cm4gaTM1X1MxX2MwKGkyMTAsIGkyMTIsIGkyMTMsIGkyMTUpOwp9CmZsb2F0IGkxMV9TMV9jMChmbG9hdCBpMTApIAp7CglyZXR1cm4gY2xhbXAoaTEwLCBpNjJfUzFfYzAsIGk2M19TMV9jMCk7Cn0KZmxvYXQgaTU5X1MxX2MwKGZsb2F0MiBpNTgpIAp7CglmbG9hdDIgaTI4MiA9IGk1OCAqIGkyODVfUzFfYzA7CglmbG9hdDIgaTI5MiA9IGkyODVfUzFfYzA7CglmbG9hdDIgaTI5MyA9IGkyODI7CglmbG9hdDIgaTI5NSA9IHVpMjg5X1MxX2MwOwoJZmxvYXQyIGkyOTcgPSB1aTI5MF9TMV9jMDsKCWZsb2F0IGkyOTkgPSBpMjkxX1MxX2MwOwoJZmxvYXQgaTI4NyA9IGk1MV9TMV9jMChpMjkyLCBpMjkzLCBpMjk1LCBpMjk3LCBpMjk5KTsKCWZsb2F0MiBpMzA0ID0gaTI4NV9TMV9jMDsKCWZsb2F0MiBpMzA1ID0gaTI4MjsKCWZsb2F0MiBpMzA3ID0gdWkzMDJfUzFfYzA7CglmbG9hdDIgaTMwOSA9IHVpMzAzX1MxX2MwOwoJZmxvYXQgaTMxMSA9IGkyNTNfUzFfYzA7CglmbG9hdCBpMzAxID0gaTUxX1MxX2MwKGkzMDQsIGkzMDUsIGkzMDcsIGkzMDksIGkzMTEpOwoJZmxvYXQyIGkzMTcgPSBpMjg1X1MxX2MwOwoJZmxvYXQyIGkzMTggPSBpMjgyOwoJZmxvYXQyIGkzMjAgPSB1aTMxNF9TMV9jMDsKCWZsb2F0MiBpMzIyID0gdWkzMTVfUzFfYzA7CglmbG9hdCBpMzI0ID0gaTMxNl9TMV9jMDsKCWZsb2F0IGkzMTMgPSBpNTFfUzFfYzAoaTMxNywgaTMxOCwgaTMyMCwgaTMyMiwgaTMyNCk7CglmbG9hdCBpMzI2ID0gKChpMjg3ICogaTI4NyArIGkzMDEpIC0gaTMxMykgKiBpMTMxX1MxX2MwOwoJZmxvYXQgaTMzOSA9IGkzMzVfUzFfYzAgKyBpMjg0X1MxX2MwICogaTMyNjsKCXJldHVybiBpMTFfUzFfYzAoaTMzOSk7Cn0KZmxvYXQgaTQzX1MxX2MwKGZsb2F0MiBpMzgsIGZsb2F0MiBpMzksIGZsb2F0IGk0MCwgZmxvYXQgaTQxLCBmbG9hdCBpNDIpIAp7CglmbG9hdDIgaTE1MiA9IGkzODsKCWZsb2F0MiBpMTU0ID0gaTM5OwoJZmxvYXQgaTE1NiA9IGk0MCArIGk0MTsKCWZsb2F0IGkxNTcgPSBpNDI7CglmbG9hdCBpMTQ4ID0gaTM1X1MxX2MwKGkxNTIsIGkxNTQsIGkxNTYsIGkxNTcpOwoJZmxvYXQyIGkxNjUgPSBpMzg7CglmbG9hdDIgaTE2NyA9IGkzOTsKCWZsb2F0IGkxNjkgPSBtYXgoaTQwIC0gaTQxLCBpNjJfUzFfYzApOwoJZmxvYXQgaTE3MCA9IGk0MjsKCWZsb2F0IGkxNjAgPSBpMzVfUzFfYzAoaTE2NSwgaTE2NywgaTE2OSwgaTE3MCk7CglmbG9hdCBpMTc2ID0gaTE0OCAtIGkxNjA7CglyZXR1cm4gaTExX1MxX2MwKGkxNzYpOwp9CmZsb2F0IGkxN19TMV9jMChmbG9hdDIgaTE2KSAKewoJaTE2ID0gZnJhY3QoaTE2ICogaTcwX1MxX2MwKTsKCWZsb2F0IGk4MCA9IGRvdChmbG9hdDIoaTE2LnksIGkxNi54KSwgaTE2ICsgaTc4X1MxX2MwKTsKCWkxNiArPSBmbG9hdDIoaTgwLCBpODApOwoJZmxvYXQgaTg0ID0gaTE2LnggKiBpMTYueTsKCXJldHVybiAoZnJhY3QoaTg0ICogaTk0X1MxX2MwKSArIGZyYWN0KGk4NCAqIGk5OF9TMV9jMCkpIC0gaTYzX1MxX2MwOwp9CmZsb2F0IGkyM19TMV9jMChmbG9hdCBpMjAsIGZsb2F0IGkyMSwgZmxvYXQgaTIyKSAKewoJcmV0dXJuIHN0ZXAoaTIxLCBpMjApICogKGk2M19TMV9jMCAtIHN0ZXAoaTIyLCBpMjApKTsKfQpmbG9hdCBpNTZfUzFfYzAoZmxvYXQyIGk1NCwgZmxvYXQgaTU1KSAKewoJZmxvYXQyIGkyMjAgPSBpNTQ7CglmbG9hdCBpMjE5ID0gaTE3X1MxX2MwKGkyMjApOwoJZmxvYXQgaTIyNSA9IGkyMTk7CglmbG9hdCBpMjI3ID0gaTYyX1MxX2MwOwoJZmxvYXQgaTIyOCA9IGkyMjRfUzFfYzA7CglmbG9hdCBpMjIzID0gaTIzX1MxX2MwKGkyMjUsIGkyMjcsIGkyMjgpOwoJZmxvYXQgaTI0MCA9IGkyMTkgKyBzaW4oaTIzMV9TMV9jMCAqIChpNTUgKyBpMjMzX1MxX2MwKSk7CglmbG9hdCBpMjQxID0gaTIzOF9TMV9jMDsKCWZsb2F0IGkyNDIgPSBpMjM5X1MxX2MwOwoJaTIyMyArPSBpMjNfUzFfYzAoaTI0MCwgaTI0MSwgaTI0Mik7CglmbG9hdCBpMjU1ID0gaTIxOSArIHNpbihpMjMxX1MxX2MwICogKGk1NSArIGkyNDhfUzFfYzApKTsKCWZsb2F0IGkyNTYgPSBpMjUzX1MxX2MwOwoJZmxvYXQgaTI1NyA9IGkyNTRfUzFfYzA7CglpMjIzICs9IGkyM19TMV9jMChpMjU1LCBpMjU2LCBpMjU3KTsKCWZsb2F0IGkyNjkgPSBpMjE5ICsgc2luKGkyMzFfUzFfYzAgKiAoaTU1ICsgaTI2M19TMV9jMCkpOwoJZmxvYXQgaTI3MCA9IGkyNjhfUzFfYzA7CglmbG9hdCBpMjcxID0gaTIzM19TMV9jMDsKCWkyMjMgKz0gaTIzX1MxX2MwKGkyNjksIGkyNzAsIGkyNzEpOwoJZmxvYXQgaTI3NSA9IGkyMjM7CglyZXR1cm4gaTExX1MxX2MwKGkyNzUpICogaTI3OF9TMV9jMDsKfQpoYWxmNCBydW50aW1lX3NoYWRlcl9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzBfaW5Db2xvciA9IF9pbnB1dDsKCWZsb2F0MiBfdG1wXzFfY29vcmRzID0gdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CglmbG9hdDQgaTM0NiA9IGZsb2F0NChfdG1wXzFfY29vcmRzLCAwLjAsIDAuMCk7CglmbG9hdDQgb0NvbG9yOwoJZmxvYXQyIGkzNDMgPSBmbG9hdDIoaTM0Ni54LCBpMzQ2LnkpOwoJZmxvYXQyIGkzNDkgPSBpMzQzICogdWkzNTFfUzFfYzA7CglmbG9hdDIgaTM1NCA9IGkzNDkgLSBtb2QoaTM0MywgdWkzNTdfUzFfYzApOwoJZmxvYXQgaTM2MSA9IHVpMzYzX1MxX2MwICogdWkzNjVfUzFfYzA7CglmbG9hdDIgaTM2OSA9IGkzNDk7CglmbG9hdCBpMzY4ID0gaTU5X1MxX2MwKGkzNjkpOwoJZmxvYXQyIGkzNzcgPSBpMzQzOwoJZmxvYXQyIGkzNzkgPSB1aTM3M19TMV9jMDsKCWZsb2F0IGkzODEgPSBpMzYxOwoJZmxvYXQgaTM4MyA9IGkyMjRfUzFfYzAgKiB1aTM2M19TMV9jMDsKCWZsb2F0IGkzODQgPSB1aTM3Nl9TMV9jMDsKCWZsb2F0IGkzNzIgPSBpNDNfUzFfYzAoaTM3NywgaTM3OSwgaTM4MSwgaTM4MywgaTM4NCk7CglmbG9hdDIgaTM4OSA9IGkzNTQ7CglmbG9hdCBpMzkxID0gdWkzODhfUzFfYzA7CglmbG9hdCBpMzg3ID0gKChpNTZfUzFfYzAoaTM4OSwgaTM5MSkgKiBpMzcyKSAqIGkzNjgpICogdWkzOThfUzFfYzA7CglmbG9hdDIgaTQwMiA9IGkzNDM7CglmbG9hdDIgaTQwNCA9IHVpMzczX1MxX2MwOwoJZmxvYXQgaTQwNiA9IGkzNjE7CglmbG9hdCBpNDA4ID0gdWkzNzZfUzFfYzA7CglmbG9hdCBpNDAxID0gKGkzNV9TMV9jMChpNDAyLCBpNDA0LCBpNDA2LCBpNDA4KSAqIHVpNDExX1MxX2MwKSAqIHVpNDE1X1MxX2MwLnc7CglmbG9hdDMgaTQyNiA9IGZsb2F0Myh1aTQxNV9TMV9jMC54LCB1aTQxNV9TMV9jMC55LCB1aTQxNV9TMV9jMC56KSAqIGk0MDE7CglmbG9hdDQgaTQyMSA9IGZsb2F0NChpNDI2LngsIGk0MjYueSwgaTQyNi56LCBpNDAxKTsKCWZsb2F0MyBpNDM4ID0gZmxvYXQzKHVpNDMzX1MxX2MwLngsIHVpNDMzX1MxX2MwLnksIHVpNDMzX1MxX2MwLnopICogdWk0MzNfUzFfYzAudzsKCWZsb2F0NCBpNDMyID0gZmxvYXQ0KGk0MzgueCwgaTQzOC55LCBpNDM4LnosIHVpNDMzX1MxX2MwLncpOwoJb0NvbG9yID0gbWl4KGk0MjEsIGk0MzIsIGZsb2F0NChpMzg3LCBpMzg3LCBpMzg3LCBpMzg3KSk7CglyZXR1cm4gaGFsZjQoaGFsZjQob0NvbG9yKSk7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBydW50aW1lX3NoYWRlcl9TMV9jMChfaW5wdXQpOwp9CmhhbGY0IENpcmN1bGFyUlJlY3RfUzIoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MyLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MyLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzIueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWZsb2F0IGNvdmVyYWdlID0gdmNvdmVyYWdlX1MwOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChoYWxmKGNvdmVyYWdlKSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBNYXRyaXhFZmZlY3RfUzEob3V0cHV0Q29sb3JfUzApOwoJaGFsZjQgb3V0cHV0X1MyOwoJb3V0cHV0X1MyID0gQ2lyY3VsYXJSUmVjdF9TMihvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0X1MxICogb3V0cHV0X1MyOwoJfQp9CgABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAABwb3NpdGlvbggAAABjb3ZlcmFnZQUAAABjb2xvcgAAAAoAAABsb2NhbENvb3JkAAABAAAAAAAAAA==","FAAQMYAAMAAAEADAAABAEYAAAICIAB5AABQAAAQAMAAAEATAAABAIIGAAEDCBYQCA4AAAAAAEAKPABAAAAAAB2AAAAAAACAAAAAEBSAAAAAAA":"CQAAAExTS1PUCwAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0NCByYWRpaV9zZWxlY3RvcjsKaW4gZmxvYXQ0IGNvcm5lcl9hbmRfcmFkaXVzX291dHNldHM7CmluIGZsb2F0NCBhYV9ibG9hdF9hbmRfY292ZXJhZ2U7CmluIGZsb2F0NCByYWRpaV94OwppbiBmbG9hdDQgcmFkaWlfeTsKaW4gZmxvYXQ0IHNrZXc7CmluIGZsb2F0MiB0cmFuc2xhdGVfYW5kX2xvY2Fscm90YXRlOwppbiBoYWxmNCBjb2xvcjsKZmxhdCBvdXQgaGFsZjQgdmNvbG9yX1MwOwpvdXQgZmxvYXQyIHZhcmNjb29yZF9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgRmlsbFJSZWN0T3A6OlByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7CglmbG9hdCBhYV9ibG9hdF9tdWx0aXBsaWVyID0gMTsKCWZsb2F0MiBjb3JuZXIgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnh5OwoJZmxvYXQyIHJhZGl1c19vdXRzZXQgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnp3OwoJZmxvYXQyIGFhX2Jsb2F0X2RpcmVjdGlvbiA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS54eTsKCWZsb2F0IGlzX2xpbmVhcl9jb3ZlcmFnZSA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS53OwoJZmxvYXQyIHBpeGVsbGVuZ3RoID0gaW52ZXJzZXNxcnQoZmxvYXQyKGRvdChza2V3Lnh6LCBza2V3Lnh6KSwgZG90KHNrZXcueXcsIHNrZXcueXcpKSk7CglmbG9hdDQgbm9ybWFsaXplZF9heGlzX2RpcnMgPSBza2V3ICogcGl4ZWxsZW5ndGgueHl4eTsKCWZsb2F0MiBheGlzd2lkdGhzID0gKGFicyhub3JtYWxpemVkX2F4aXNfZGlycy54eSkgKyBhYnMobm9ybWFsaXplZF9heGlzX2RpcnMuencpKTsKCWZsb2F0MiBhYV9ibG9hdHJhZGl1cyA9IGF4aXN3aWR0aHMgKiBwaXhlbGxlbmd0aCAqIC41OwoJZmxvYXQ0IHJhZGlpX2FuZF9uZWlnaGJvcnMgPSByYWRpaV9zZWxlY3RvciogZmxvYXQ0eDQocmFkaWlfeCwgcmFkaWlfeSwgcmFkaWlfeC55eHd6LCByYWRpaV95Lnd6eXgpOwoJZmxvYXQyIHJhZGlpID0gcmFkaWlfYW5kX25laWdoYm9ycy54eTsKCWZsb2F0MiBuZWlnaGJvcl9yYWRpaSA9IHJhZGlpX2FuZF9uZWlnaGJvcnMuenc7CglmbG9hdCBjb3ZlcmFnZV9tdWx0aXBsaWVyID0gMTsKCWlmIChhbnkoZ3JlYXRlclRoYW4oYWFfYmxvYXRyYWRpdXMsIGZsb2F0MigxKSkpKSAKCXsKCQljb3JuZXIgPSBtYXgoYWJzKGNvcm5lciksIGFhX2Jsb2F0cmFkaXVzKSAqIHNpZ24oY29ybmVyKTsKCQljb3ZlcmFnZV9tdWx0aXBsaWVyID0gMSAvIChtYXgoYWFfYmxvYXRyYWRpdXMueCwgMSkgKiBtYXgoYWFfYmxvYXRyYWRpdXMueSwgMSkpOwoJCXJhZGlpID0gZmxvYXQyKDApOwoJfQoJZmxvYXQgY292ZXJhZ2UgPSBhYV9ibG9hdF9hbmRfY292ZXJhZ2UuejsKCWlmIChhbnkobGVzc1RoYW4ocmFkaWksIGFhX2Jsb2F0cmFkaXVzICogMS41KSkpIAoJewoJCXJhZGlpID0gZmxvYXQyKDApOwoJCWFhX2Jsb2F0X2RpcmVjdGlvbiA9IHNpZ24oY29ybmVyKTsKCQlpZiAoY292ZXJhZ2UgPiAuNSkgCgkJewoJCQlhYV9ibG9hdF9kaXJlY3Rpb24gPSAtYWFfYmxvYXRfZGlyZWN0aW9uOwoJCX0KCQlpc19saW5lYXJfY292ZXJhZ2UgPSAxOwoJfQoJZWxzZSAKCXsKCQlyYWRpaSA9IGNsYW1wKHJhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQluZWlnaGJvcl9yYWRpaSA9IGNsYW1wKG5laWdoYm9yX3JhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQlmbG9hdDIgc3BhY2luZyA9IDIgLSByYWRpaSAtIG5laWdoYm9yX3JhZGlpOwoJCWZsb2F0MiBleHRyYV9wYWQgPSBtYXgocGl4ZWxsZW5ndGggKiAuMDYyNSAtIHNwYWNpbmcsIGZsb2F0MigwKSk7CgkJcmFkaWkgLT0gZXh0cmFfcGFkICogLjU7Cgl9CglmbG9hdDIgYWFfb3V0c2V0ID0gYWFfYmxvYXRfZGlyZWN0aW9uICogYWFfYmxvYXRyYWRpdXMgKiBhYV9ibG9hdF9tdWx0aXBsaWVyOwoJZmxvYXQyIHZlcnRleHBvcyA9IGNvcm5lciArIHJhZGl1c19vdXRzZXQgKiByYWRpaSArIGFhX291dHNldDsKCWlmIChjb3ZlcmFnZSA+IC41KSAKCXsKCQlpZiAoYWFfYmxvYXRfZGlyZWN0aW9uLnggIT0gMCAmJiB2ZXJ0ZXhwb3MueCAqIGNvcm5lci54IDwgMCkgCgkJewoJCQlmbG9hdCBiYWNrc2V0ID0gYWJzKHZlcnRleHBvcy54KTsKCQkJdmVydGV4cG9zLnggPSAwOwoJCQl2ZXJ0ZXhwb3MueSArPSBiYWNrc2V0ICogc2lnbihjb3JuZXIueSkgKiBwaXhlbGxlbmd0aC55L3BpeGVsbGVuZ3RoLng7CgkJCWNvdmVyYWdlID0gKGNvdmVyYWdlIC0gLjUpICogYWJzKGNvcm5lci54KSAvIChhYnMoY29ybmVyLngpICsgYmFja3NldCkgKyAuNTsKCQl9CgkJaWYgKGFhX2Jsb2F0X2RpcmVjdGlvbi55ICE9IDAgJiYgdmVydGV4cG9zLnkgKiBjb3JuZXIueSA8IDApIAoJCXsKCQkJZmxvYXQgYmFja3NldCA9IGFicyh2ZXJ0ZXhwb3MueSk7CgkJCXZlcnRleHBvcy55ID0gMDsKCQkJdmVydGV4cG9zLnggKz0gYmFja3NldCAqIHNpZ24oY29ybmVyLngpICogcGl4ZWxsZW5ndGgueC9waXhlbGxlbmd0aC55OwoJCQljb3ZlcmFnZSA9IChjb3ZlcmFnZSAtIC41KSAqIGFicyhjb3JuZXIueSkgLyAoYWJzKGNvcm5lci55KSArIGJhY2tzZXQpICsgLjU7CgkJfQoJfQoJZmxvYXQyeDIgc2tld21hdHJpeCA9IGZsb2F0MngyKHNrZXcueHksIHNrZXcuencpOwoJZmxvYXQyIGRldmNvb3JkID0gdmVydGV4cG9zICogc2tld21hdHJpeCArIHRyYW5zbGF0ZV9hbmRfbG9jYWxyb3RhdGUueHk7CglpZiAoMCAhPSBpc19saW5lYXJfY292ZXJhZ2UpIAoJewoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MigwLCBjb3ZlcmFnZSAqIGNvdmVyYWdlX211bHRpcGxpZXIpOwoJfQoJZWxzZSAKCXsKCQlmbG9hdDIgYXJjY29vcmQgPSAxIC0gYWJzKHJhZGl1c19vdXRzZXQpICsgYWFfb3V0c2V0L3JhZGlpICogY29ybmVyOwoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MihhcmNjb29yZC54KzEsIGFyY2Nvb3JkLnkpOwoJfQoJc2tfUG9zaXRpb24gPSBkZXZjb29yZC54eTAxOwp9CgEAAACzBAAAdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMTsKdW5pZm9ybSBmbG9hdDIgdWludlJhZGlpWFlfUzE7CmZsYXQgaW4gaGFsZjQgdmNvbG9yX1MwOwppbiBmbG9hdDIgdmFyY2Nvb3JkX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwpoYWxmNCBFbGxpcHRpY2FsUlJlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CglmbG9hdDIgWiA9IGR4eSAqIHVpbnZSYWRpaVhZX1MxLnh5OwoJaGFsZiBpbXBsaWNpdCA9IGhhbGYoZG90KFosIGR4eSkgLSAxLjApOwoJaGFsZiBncmFkX2RvdCA9IGhhbGYoNC4wICogZG90KFosIFopKTsKCWdyYWRfZG90ID0gbWF4KGdyYWRfZG90LCAxLjBlLTQpOwoJaGFsZiBhcHByb3hfZGlzdCA9IGltcGxpY2l0ICogaGFsZihpbnZlcnNlc3FydChncmFkX2RvdCkpOwoJaGFsZiBhbHBoYSA9IGNsYW1wKDAuNSArIGFwcHJveF9kaXN0LCAwLjAsIDEuMCk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIEZpbGxSUmVjdE9wOjpQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7CglmbG9hdCB4X3BsdXNfMT12YXJjY29vcmRfUzAueCwgeT12YXJjY29vcmRfUzAueTsKCWhhbGYgY292ZXJhZ2U7CglpZiAoMCA9PSB4X3BsdXNfMSkgCgl7CgkJY292ZXJhZ2UgPSBoYWxmKHkpOwoJfQoJZWxzZSAKCXsKCQlmbG9hdCBmbiA9IHhfcGx1c18xICogKHhfcGx1c18xIC0gMik7CgkJZm4gPSBmbWEoeSx5LCBmbik7CgkJZmxvYXQgZm53aWR0aCA9IGZ3aWR0aChmbik7CgkJY292ZXJhZ2UgPSAuNSAtIGhhbGYoZm4vZm53aWR0aCk7CgkJY292ZXJhZ2UgPSBjbGFtcChjb3ZlcmFnZSwgMCwgMSk7Cgl9CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGNvdmVyYWdlKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IEVsbGlwdGljYWxSUmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADgAAAHJhZGlpX3NlbGVjdG9yAAAZAAAAY29ybmVyX2FuZF9yYWRpdXNfb3V0c2V0cwAAABUAAABhYV9ibG9hdF9hbmRfY292ZXJhZ2UAAAAHAAAAcmFkaWlfeAAHAAAAcmFkaWlfeQAEAAAAc2tldxkAAAB0cmFuc2xhdGVfYW5kX2xvY2Fscm90YXRlAAAABQAAAGNvbG9yAAAAAQAAAAAAAAA=","DAQAAAAAAABGAABAYAAQAIHCAIAYAQUBAEAAAAAAEAAAAAAAAAAAAIAHSADQAAAQAAAAAAFAAMAAAABAAAAAAABBAM":"CQAAAExTS1MWAgAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQyIHVBdGxhc1NpemVJbnZfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiB1c2hvcnQyIGluVGV4dHVyZUNvb3JkczsKb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKZmxhdCBvdXQgZmxvYXQgdlRleEluZGV4X1MwOwpvdXQgaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIEJpdG1hcFRleHQKCWludCB0ZXhJZHggPSAwOwoJZmxvYXQyIHVub3JtVGV4Q29vcmRzID0gZmxvYXQyKGluVGV4dHVyZUNvb3Jkcy54LCBpblRleHR1cmVDb29yZHMueSk7Cgl2VGV4dHVyZUNvb3Jkc19TMCA9IHVub3JtVGV4Q29vcmRzICogdUF0bGFzU2l6ZUludl9TMDsKCXZUZXhJbmRleF9TMCA9IGZsb2F0KHRleElkeCk7Cgl2aW5Db2xvcl9TMCA9IGluQ29sb3I7CglmbG9hdDIgX3RtcF8xX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJc2tfUG9zaXRpb24gPSBpblBvc2l0aW9uLnh5MDE7Cn0KAAABAAAAWAMAAHVuaWZvcm0gZmxvYXQ0IHVpbm5lclJlY3RfUzE7CnVuaWZvcm0gaGFsZjIgdXJhZGl1c1BsdXNIYWxmX1MxOwp1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMDsKaW4gZmxvYXQyIHZUZXh0dXJlQ29vcmRzX1MwOwpmbGF0IGluIGZsb2F0IHZUZXhJbmRleF9TMDsKaW4gaGFsZjQgdmluQ29sb3JfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CmhhbGY0IENpcmN1bGFyUlJlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzEueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIEJpdG1hcFRleHQKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWhhbGY0IHRleENvbG9yOwoJewoJCXRleENvbG9yID0gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB2VGV4dHVyZUNvb3Jkc19TMCkucnJycjsKCX0KCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gdGV4Q29sb3I7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBDaXJjdWxhclJSZWN0X1MxKG91dHB1dENvdmVyYWdlX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dF9TMTsKCX0KfQoBAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAPAAAAaW5UZXh0dXJlQ29vcmRzAAEAAAAAAAAA","HVIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAHIBOSN6AGCAABAAAAAAAEAAAABSCQ7IGTADBAAAAAAAAAAAAAAAA5AAAAAAABAAAAACAZAAAAA":"CQAAAExTS1PZAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKaW4gZmxvYXQyIHBvc2l0aW9uOwppbiBmbG9hdCBjb3ZlcmFnZTsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpmbGF0IG91dCBoYWxmNCB2Y29sb3JfUzA7Cm91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm91dCBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwoJewoJCXZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwID0gZmxvYXQzeDIodW1hdHJpeF9TMSkgKiBsb2NhbENvb3JkLnh5MTsKCX0KfQoAAAAAAAAA0BoAAGNvbnN0IGZsb2F0IGk2Ml9TMV9jMCA9IDAuMDsKY29uc3QgZmxvYXQgaTYzX1MxX2MwID0gMS4wOwpjb25zdCBmbG9hdDIgaTcwX1MxX2MwID0gZmxvYXQyKDUuMzk4NzAwMjM3Mjc0MTY5OSwgNS40NDIxMDAwNDgwNjUxODU1KTsKY29uc3QgZmxvYXQyIGk3OF9TMV9jMCA9IGZsb2F0MigyMS41MzUxMDA5MzY4ODk2NDgsIDE0LjMxMzY5OTcyMjI5MDAzOSk7CmNvbnN0IGZsb2F0IGk5NF9TMV9jMCA9IDk1LjQzMDcwMjIwOTQ3MjY1NjsKY29uc3QgZmxvYXQgaTk4X1MxX2MwID0gNzUuMDQ5NjA2MzIzMjQyMTg4Owpjb25zdCBmbG9hdCBpMTMxX1MxX2MwID0gMC41Owpjb25zdCBmbG9hdCBpMjAyX1MxX2MwID0gMC42NDk5OTk5NzYxNTgxNDIwOTsKY29uc3QgZmxvYXQgaTIwOF9TMV9jMCA9IDUwLjA7CmNvbnN0IGZsb2F0IGkyMjRfUzFfYzAgPSAwLjA1MDAwMDAwMDc0NTA1ODA2Owpjb25zdCBmbG9hdCBpMjMxX1MxX2MwID0gMy4xNDE1OTI3NDEwMTI1NzMyOwpjb25zdCBmbG9hdCBpMjMzX1MxX2MwID0gMC4zNDk5OTk5OTQwMzk1MzU1MjsKY29uc3QgZmxvYXQgaTIzOF9TMV9jMCA9IDAuMTAwMDAwMDAxNDkwMTE2MTI7CmNvbnN0IGZsb2F0IGkyMzlfUzFfYzAgPSAwLjE1MDAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMjQ4X1MxX2MwID0gMC42OTk5OTk5ODgwNzkwNzEwNDsKY29uc3QgZmxvYXQgaTI1M19TMV9jMCA9IDAuMjAwMDAwMDAyOTgwMjMyMjQ7CmNvbnN0IGZsb2F0IGkyNTRfUzFfYzAgPSAwLjI1Owpjb25zdCBmbG9hdCBpMjYzX1MxX2MwID0gMS4wNDk5OTk5NTIzMTYyODQyOwpjb25zdCBmbG9hdCBpMjY4X1MxX2MwID0gMC4zMDAwMDAwMTE5MjA5Mjg5NjsKY29uc3QgZmxvYXQgaTI3OF9TMV9jMCA9IDAuNTUwMDAwMDExOTIwOTI4OTY7CmNvbnN0IGZsb2F0IGkyODRfUzFfYzAgPSAwLjgwMDAwMDAxMTkyMDkyODk2Owpjb25zdCBmbG9hdDIgaTI4NV9TMV9jMCA9IGZsb2F0MigwLjgwMDAwMDAxMTkyMDkyODk2LCAwLjgwMDAwMDAxMTkyMDkyODk2KTsKY29uc3QgZmxvYXQgaTI5MV9TMV9jMCA9IDAuMTcwMDAwMDAxNzg4MTM5MzQ7CmNvbnN0IGZsb2F0IGkzMTZfUzFfYzAgPSAwLjI3NTAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMzM1X1MxX2MwID0gMC40NDk5OTk5ODgwNzkwNzEwNDsKdW5pZm9ybSBmbG9hdDQgdWk0MTVfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWk0MTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQ0IHVpNDMzX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzk4X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzc2X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTM3M19TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTM2NV9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTM2M19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzNTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzU3X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzg4X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTI4OV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMDJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzE0X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTI5MF9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMDNfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzE1X1MxX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmZsYXQgaW4gaGFsZjQgdmNvbG9yX1MwOwppbiBmbG9hdCB2Y292ZXJhZ2VfUzA7CmluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKb3V0IGhhbGY0IHNrX0ZyYWdDb2xvcjsKZmxvYXQyeDIgaTI4X1MxX2MwKGZsb2F0MiBpMjcpOwpmbG9hdCBpMzVfUzFfYzAoZmxvYXQyIGkzMSwgZmxvYXQyIGkzMiwgZmxvYXQgaTMzLCBmbG9hdCBpMzQpOwpmbG9hdCBpNTFfUzFfYzAoZmxvYXQyIGk0NiwgZmxvYXQyIGk0NywgZmxvYXQyIGk0OCwgZmxvYXQyIGk0OSwgZmxvYXQgaTUwKTsKZmxvYXQgaTExX1MxX2MwKGZsb2F0IGkxMCk7CmZsb2F0IGk1OV9TMV9jMChmbG9hdDIgaTU4KTsKZmxvYXQgaTQzX1MxX2MwKGZsb2F0MiBpMzgsIGZsb2F0MiBpMzksIGZsb2F0IGk0MCwgZmxvYXQgaTQxLCBmbG9hdCBpNDIpOwpmbG9hdCBpMTdfUzFfYzAoZmxvYXQyIGkxNik7CmZsb2F0IGkyM19TMV9jMChmbG9hdCBpMjAsIGZsb2F0IGkyMSwgZmxvYXQgaTIyKTsKZmxvYXQgaTU2X1MxX2MwKGZsb2F0MiBpNTQsIGZsb2F0IGk1NSk7CmZsb2F0MngyIGkyOF9TMV9jMChmbG9hdDIgaTI3KSAKewoJcmV0dXJuIGZsb2F0MngyKGkyNy54LCAtaTI3LnksIGkyNy55LCBpMjcueCk7Cn0KZmxvYXQgaTM1X1MxX2MwKGZsb2F0MiBpMzEsIGZsb2F0MiBpMzIsIGZsb2F0IGkzMywgZmxvYXQgaTM0KSAKewoJZmxvYXQgaTEyOSA9IGkzNCAqIGkxMzFfUzFfYzA7CglmbG9hdCBpMTMzID0gZGlzdGFuY2UoaTMxLCBpMzIpOwoJcmV0dXJuIGk2M19TMV9jMCAtIHNtb290aHN0ZXAoaTYzX1MxX2MwIC0gaTEyOSwgaTYzX1MxX2MwICsgaTEyOSwgaTEzMyAvIGkzMyk7Cn0KZmxvYXQgaTUxX1MxX2MwKGZsb2F0MiBpNDYsIGZsb2F0MiBpNDcsIGZsb2F0MiBpNDgsIGZsb2F0MiBpNDksIGZsb2F0IGk1MCkgCnsKCWZsb2F0MiBpMTgwID0gaTQ5OwoJaTQ3ID0gaTI4X1MxX2MwKGkxODApICogKGk0OCAtIGk0NykgKyBpNDg7CglpNDcgPSBtb2QoaTQ3LCBmbG9hdDIoaTUwLCBpNTApKSAvIGk0NjsKCWZsb2F0IGkxOTUgPSAoaTUwIC8gaTQ2LnkpICogaTEzMV9TMV9jMDsKCWZsb2F0IGkyMDEgPSBpMjAyX1MxX2MwICogaTE5NTsKCWZsb2F0MiBpMjEwID0gaTQ3OwoJZmxvYXQyIGkyMTIgPSBmbG9hdDIoaTE5NSwgaTE5NSk7CglmbG9hdCBpMjEzID0gaTIwMTsKCWZsb2F0IGkyMTUgPSBpMjAxICogaTIwOF9TMV9jMDsKCXJldHVybiBpMzVfUzFfYzAoaTIxMCwgaTIxMiwgaTIxMywgaTIxNSk7Cn0KZmxvYXQgaTExX1MxX2MwKGZsb2F0IGkxMCkgCnsKCXJldHVybiBjbGFtcChpMTAsIGk2Ml9TMV9jMCwgaTYzX1MxX2MwKTsKfQpmbG9hdCBpNTlfUzFfYzAoZmxvYXQyIGk1OCkgCnsKCWZsb2F0MiBpMjgyID0gaTU4ICogaTI4NV9TMV9jMDsKCWZsb2F0MiBpMjkyID0gaTI4NV9TMV9jMDsKCWZsb2F0MiBpMjkzID0gaTI4MjsKCWZsb2F0MiBpMjk1ID0gdWkyODlfUzFfYzA7CglmbG9hdDIgaTI5NyA9IHVpMjkwX1MxX2MwOwoJZmxvYXQgaTI5OSA9IGkyOTFfUzFfYzA7CglmbG9hdCBpMjg3ID0gaTUxX1MxX2MwKGkyOTIsIGkyOTMsIGkyOTUsIGkyOTcsIGkyOTkpOwoJZmxvYXQyIGkzMDQgPSBpMjg1X1MxX2MwOwoJZmxvYXQyIGkzMDUgPSBpMjgyOwoJZmxvYXQyIGkzMDcgPSB1aTMwMl9TMV9jMDsKCWZsb2F0MiBpMzA5ID0gdWkzMDNfUzFfYzA7CglmbG9hdCBpMzExID0gaTI1M19TMV9jMDsKCWZsb2F0IGkzMDEgPSBpNTFfUzFfYzAoaTMwNCwgaTMwNSwgaTMwNywgaTMwOSwgaTMxMSk7CglmbG9hdDIgaTMxNyA9IGkyODVfUzFfYzA7CglmbG9hdDIgaTMxOCA9IGkyODI7CglmbG9hdDIgaTMyMCA9IHVpMzE0X1MxX2MwOwoJZmxvYXQyIGkzMjIgPSB1aTMxNV9TMV9jMDsKCWZsb2F0IGkzMjQgPSBpMzE2X1MxX2MwOwoJZmxvYXQgaTMxMyA9IGk1MV9TMV9jMChpMzE3LCBpMzE4LCBpMzIwLCBpMzIyLCBpMzI0KTsKCWZsb2F0IGkzMjYgPSAoKGkyODcgKiBpMjg3ICsgaTMwMSkgLSBpMzEzKSAqIGkxMzFfUzFfYzA7CglmbG9hdCBpMzM5ID0gaTMzNV9TMV9jMCArIGkyODRfUzFfYzAgKiBpMzI2OwoJcmV0dXJuIGkxMV9TMV9jMChpMzM5KTsKfQpmbG9hdCBpNDNfUzFfYzAoZmxvYXQyIGkzOCwgZmxvYXQyIGkzOSwgZmxvYXQgaTQwLCBmbG9hdCBpNDEsIGZsb2F0IGk0MikgCnsKCWZsb2F0MiBpMTUyID0gaTM4OwoJZmxvYXQyIGkxNTQgPSBpMzk7CglmbG9hdCBpMTU2ID0gaTQwICsgaTQxOwoJZmxvYXQgaTE1NyA9IGk0MjsKCWZsb2F0IGkxNDggPSBpMzVfUzFfYzAoaTE1MiwgaTE1NCwgaTE1NiwgaTE1Nyk7CglmbG9hdDIgaTE2NSA9IGkzODsKCWZsb2F0MiBpMTY3ID0gaTM5OwoJZmxvYXQgaTE2OSA9IG1heChpNDAgLSBpNDEsIGk2Ml9TMV9jMCk7CglmbG9hdCBpMTcwID0gaTQyOwoJZmxvYXQgaTE2MCA9IGkzNV9TMV9jMChpMTY1LCBpMTY3LCBpMTY5LCBpMTcwKTsKCWZsb2F0IGkxNzYgPSBpMTQ4IC0gaTE2MDsKCXJldHVybiBpMTFfUzFfYzAoaTE3Nik7Cn0KZmxvYXQgaTE3X1MxX2MwKGZsb2F0MiBpMTYpIAp7CglpMTYgPSBmcmFjdChpMTYgKiBpNzBfUzFfYzApOwoJZmxvYXQgaTgwID0gZG90KGZsb2F0MihpMTYueSwgaTE2LngpLCBpMTYgKyBpNzhfUzFfYzApOwoJaTE2ICs9IGZsb2F0MihpODAsIGk4MCk7CglmbG9hdCBpODQgPSBpMTYueCAqIGkxNi55OwoJcmV0dXJuIChmcmFjdChpODQgKiBpOTRfUzFfYzApICsgZnJhY3QoaTg0ICogaTk4X1MxX2MwKSkgLSBpNjNfUzFfYzA7Cn0KZmxvYXQgaTIzX1MxX2MwKGZsb2F0IGkyMCwgZmxvYXQgaTIxLCBmbG9hdCBpMjIpIAp7CglyZXR1cm4gc3RlcChpMjEsIGkyMCkgKiAoaTYzX1MxX2MwIC0gc3RlcChpMjIsIGkyMCkpOwp9CmZsb2F0IGk1Nl9TMV9jMChmbG9hdDIgaTU0LCBmbG9hdCBpNTUpIAp7CglmbG9hdDIgaTIyMCA9IGk1NDsKCWZsb2F0IGkyMTkgPSBpMTdfUzFfYzAoaTIyMCk7CglmbG9hdCBpMjI1ID0gaTIxOTsKCWZsb2F0IGkyMjcgPSBpNjJfUzFfYzA7CglmbG9hdCBpMjI4ID0gaTIyNF9TMV9jMDsKCWZsb2F0IGkyMjMgPSBpMjNfUzFfYzAoaTIyNSwgaTIyNywgaTIyOCk7CglmbG9hdCBpMjQwID0gaTIxOSArIHNpbihpMjMxX1MxX2MwICogKGk1NSArIGkyMzNfUzFfYzApKTsKCWZsb2F0IGkyNDEgPSBpMjM4X1MxX2MwOwoJZmxvYXQgaTI0MiA9IGkyMzlfUzFfYzA7CglpMjIzICs9IGkyM19TMV9jMChpMjQwLCBpMjQxLCBpMjQyKTsKCWZsb2F0IGkyNTUgPSBpMjE5ICsgc2luKGkyMzFfUzFfYzAgKiAoaTU1ICsgaTI0OF9TMV9jMCkpOwoJZmxvYXQgaTI1NiA9IGkyNTNfUzFfYzA7CglmbG9hdCBpMjU3ID0gaTI1NF9TMV9jMDsKCWkyMjMgKz0gaTIzX1MxX2MwKGkyNTUsIGkyNTYsIGkyNTcpOwoJZmxvYXQgaTI2OSA9IGkyMTkgKyBzaW4oaTIzMV9TMV9jMCAqIChpNTUgKyBpMjYzX1MxX2MwKSk7CglmbG9hdCBpMjcwID0gaTI2OF9TMV9jMDsKCWZsb2F0IGkyNzEgPSBpMjMzX1MxX2MwOwoJaTIyMyArPSBpMjNfUzFfYzAoaTI2OSwgaTI3MCwgaTI3MSk7CglmbG9hdCBpMjc1ID0gaTIyMzsKCXJldHVybiBpMTFfUzFfYzAoaTI3NSkgKiBpMjc4X1MxX2MwOwp9CmhhbGY0IHJ1bnRpbWVfc2hhZGVyX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJZmxvYXQyIF90bXBfMV9jb29yZHMgPSB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKCWZsb2F0NCBpMzQ2ID0gZmxvYXQ0KF90bXBfMV9jb29yZHMsIDAuMCwgMC4wKTsKCWZsb2F0NCBvQ29sb3I7CglmbG9hdDIgaTM0MyA9IGZsb2F0MihpMzQ2LngsIGkzNDYueSk7CglmbG9hdDIgaTM0OSA9IGkzNDMgKiB1aTM1MV9TMV9jMDsKCWZsb2F0MiBpMzU0ID0gaTM0OSAtIG1vZChpMzQzLCB1aTM1N19TMV9jMCk7CglmbG9hdCBpMzYxID0gdWkzNjNfUzFfYzAgKiB1aTM2NV9TMV9jMDsKCWZsb2F0MiBpMzY5ID0gaTM0OTsKCWZsb2F0IGkzNjggPSBpNTlfUzFfYzAoaTM2OSk7CglmbG9hdDIgaTM3NyA9IGkzNDM7CglmbG9hdDIgaTM3OSA9IHVpMzczX1MxX2MwOwoJZmxvYXQgaTM4MSA9IGkzNjE7CglmbG9hdCBpMzgzID0gaTIyNF9TMV9jMCAqIHVpMzYzX1MxX2MwOwoJZmxvYXQgaTM4NCA9IHVpMzc2X1MxX2MwOwoJZmxvYXQgaTM3MiA9IGk0M19TMV9jMChpMzc3LCBpMzc5LCBpMzgxLCBpMzgzLCBpMzg0KTsKCWZsb2F0MiBpMzg5ID0gaTM1NDsKCWZsb2F0IGkzOTEgPSB1aTM4OF9TMV9jMDsKCWZsb2F0IGkzODcgPSAoKGk1Nl9TMV9jMChpMzg5LCBpMzkxKSAqIGkzNzIpICogaTM2OCkgKiB1aTM5OF9TMV9jMDsKCWZsb2F0MiBpNDAyID0gaTM0MzsKCWZsb2F0MiBpNDA0ID0gdWkzNzNfUzFfYzA7CglmbG9hdCBpNDA2ID0gaTM2MTsKCWZsb2F0IGk0MDggPSB1aTM3Nl9TMV9jMDsKCWZsb2F0IGk0MDEgPSAoaTM1X1MxX2MwKGk0MDIsIGk0MDQsIGk0MDYsIGk0MDgpICogdWk0MTFfUzFfYzApICogdWk0MTVfUzFfYzAudzsKCWZsb2F0MyBpNDI2ID0gZmxvYXQzKHVpNDE1X1MxX2MwLngsIHVpNDE1X1MxX2MwLnksIHVpNDE1X1MxX2MwLnopICogaTQwMTsKCWZsb2F0NCBpNDIxID0gZmxvYXQ0KGk0MjYueCwgaTQyNi55LCBpNDI2LnosIGk0MDEpOwoJZmxvYXQzIGk0MzggPSBmbG9hdDModWk0MzNfUzFfYzAueCwgdWk0MzNfUzFfYzAueSwgdWk0MzNfUzFfYzAueikgKiB1aTQzM19TMV9jMC53OwoJZmxvYXQ0IGk0MzIgPSBmbG9hdDQoaTQzOC54LCBpNDM4LnksIGk0MzgueiwgdWk0MzNfUzFfYzAudyk7CglvQ29sb3IgPSBtaXgoaTQyMSwgaTQzMiwgZmxvYXQ0KGkzODcsIGkzODcsIGkzODcsIGkzODcpKTsKCXJldHVybiBoYWxmNChoYWxmNChvQ29sb3IpKTsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIHJ1bnRpbWVfc2hhZGVyX1MxX2MwKF9pbnB1dCk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWZsb2F0IGNvdmVyYWdlID0gdmNvdmVyYWdlX1MwOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChoYWxmKGNvdmVyYWdlKSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBNYXRyaXhFZmZlY3RfUzEob3V0cHV0Q29sb3JfUzApOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAHBvc2l0aW9uCAAAAGNvdmVyYWdlBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAEAAAAAAAAA","HUJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAAQQGABZAA6IAAAAACAAAAAADUAAAAAAAEAAAAAIDEAAAAAAA":"CQAAAExTS1PlAAAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQyIGxvY2FsQ29vcmQ7Cm91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgAAAAEAAABGAwAAdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMTsKdW5pZm9ybSBoYWxmMiB1cmFkaXVzUGx1c0hhbGZfUzE7CnVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwppbiBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CmhhbGY0IENpcmN1bGFyUlJlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzEueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzAgPSBoYWxmNCgxKTsKCWZsb2F0MiB0ZXhDb29yZDsKCXRleENvb3JkID0gdmxvY2FsQ29vcmRfUzA7CglvdXRwdXRDb2xvcl9TMCA9ICgoc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB0ZXhDb29yZCkgKiBoYWxmNCgxKSkpOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IENpcmN1bGFyUlJlY3RfUzEob3V0cHV0Q292ZXJhZ2VfUzApOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0X1MxOwoJfQp9CgAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAcG9zaXRpb24KAAAAbG9jYWxDb29yZAAAAQAAAAAAAAA=","HUQACAAAAAMAADAAAIOAAAH677776IZOCAAP577777777777777777YBAAAAAAAAAAACEA5YQ4CWSFAAAAAACAAAAAAAAAAA5AAAAAAABAAAAACAZAAA":"CQAAAExTS1PPAAAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7Cm91dCBoYWxmNCB2Y29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAEAAAA+BAAAY29uc3QgaW50IGtGaWxsQldfUzEgPSAwOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQldfUzEgPSAyOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQUFfUzEgPSAzOwp1bmlmb3JtIGZsb2F0NCB1cmVjdFVuaWZvcm1fUzE7CmluIGhhbGY0IHZjb2xvcl9TMDsKb3V0IGhhbGY0IHNrX0ZyYWdDb2xvcjsKaGFsZjQgUmVjdF9TMShoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzBfaW5Db2xvciA9IF9pbnB1dDsKCWhhbGYgY292ZXJhZ2U7CglpZiAoaW50KDApID09IGtGaWxsQldfUzEgfHwgaW50KDApID09IGtJbnZlcnNlRmlsbEJXX1MxKSAKCXsKCQljb3ZlcmFnZSA9IGhhbGYoYWxsKGdyZWF0ZXJUaGFuKGZsb2F0NChza19GcmFnQ29vcmQueHksIHVyZWN0VW5pZm9ybV9TMS56dyksIGZsb2F0NCh1cmVjdFVuaWZvcm1fUzEueHksIHNrX0ZyYWdDb29yZC54eSkpKSA/IDEgOiAwKTsKCX0KCWVsc2UgCgl7CgkJaGFsZjQgZGlzdHM0ID0gY2xhbXAoaGFsZjQoMS4wLCAxLjAsIC0xLjAsIC0xLjApICogaGFsZjQoc2tfRnJhZ0Nvb3JkLnh5eHkgLSB1cmVjdFVuaWZvcm1fUzEpLCAwLjAsIDEuMCk7CgkJaGFsZjIgZGlzdHMyID0gKGRpc3RzNC54eSArIGRpc3RzNC56dykgLSAxLjA7CgkJY292ZXJhZ2UgPSBkaXN0czIueCAqIGRpc3RzMi55OwoJfQoJaWYgKGludCgwKSA9PSBrSW52ZXJzZUZpbGxCV19TMSB8fCBpbnQoMCkgPT0ga0ludmVyc2VGaWxsQUFfUzEpIAoJewoJCWNvdmVyYWdlID0gMS4wIC0gY292ZXJhZ2U7Cgl9CglyZXR1cm4gaGFsZjQoX2lucHV0ICogY292ZXJhZ2UpOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gUmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAABwb3NpdGlvbgUAAABjb2xvcgAAAAEAAAAAAAAA","HVIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAHQBOSN6AGCAABAAAAAAAEAAAABSCQ7IGTADBAAAAAAAAAAAAAAAAZYA6SYSFDAAAAAGAAAAACADYAAAQAAAAA4BAPEAAAAABAAAAAAB2AAAAAAACAAAAAEBSAAAAA":"CQAAAExTS1PZAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKaW4gZmxvYXQyIHBvc2l0aW9uOwppbiBmbG9hdCBjb3ZlcmFnZTsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpmbGF0IG91dCBoYWxmNCB2Y29sb3JfUzA7Cm91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm91dCBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwoJewoJCXZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwID0gZmxvYXQzeDIodW1hdHJpeF9TMSkgKiBsb2NhbENvb3JkLnh5MTsKCX0KfQoAAAABAAAAdh8AAGNvbnN0IGZsb2F0IGk2Ml9TMV9jMCA9IDAuMDsKY29uc3QgZmxvYXQgaTYzX1MxX2MwID0gMS4wOwpjb25zdCBmbG9hdDIgaTcwX1MxX2MwID0gZmxvYXQyKDUuMzk4NzAwMjM3Mjc0MTY5OSwgNS40NDIxMDAwNDgwNjUxODU1KTsKY29uc3QgZmxvYXQyIGk3OF9TMV9jMCA9IGZsb2F0MigyMS41MzUxMDA5MzY4ODk2NDgsIDE0LjMxMzY5OTcyMjI5MDAzOSk7CmNvbnN0IGZsb2F0IGk5NF9TMV9jMCA9IDk1LjQzMDcwMjIwOTQ3MjY1NjsKY29uc3QgZmxvYXQgaTk4X1MxX2MwID0gNzUuMDQ5NjA2MzIzMjQyMTg4Owpjb25zdCBmbG9hdCBpMTMxX1MxX2MwID0gMC41Owpjb25zdCBmbG9hdCBpMjAyX1MxX2MwID0gMC42NDk5OTk5NzYxNTgxNDIwOTsKY29uc3QgZmxvYXQgaTIwOF9TMV9jMCA9IDUwLjA7CmNvbnN0IGZsb2F0IGkyMjRfUzFfYzAgPSAwLjA1MDAwMDAwMDc0NTA1ODA2Owpjb25zdCBmbG9hdCBpMjMxX1MxX2MwID0gMy4xNDE1OTI3NDEwMTI1NzMyOwpjb25zdCBmbG9hdCBpMjMzX1MxX2MwID0gMC4zNDk5OTk5OTQwMzk1MzU1MjsKY29uc3QgZmxvYXQgaTIzOF9TMV9jMCA9IDAuMTAwMDAwMDAxNDkwMTE2MTI7CmNvbnN0IGZsb2F0IGkyMzlfUzFfYzAgPSAwLjE1MDAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMjQ4X1MxX2MwID0gMC42OTk5OTk5ODgwNzkwNzEwNDsKY29uc3QgZmxvYXQgaTI1M19TMV9jMCA9IDAuMjAwMDAwMDAyOTgwMjMyMjQ7CmNvbnN0IGZsb2F0IGkyNTRfUzFfYzAgPSAwLjI1Owpjb25zdCBmbG9hdCBpMjYzX1MxX2MwID0gMS4wNDk5OTk5NTIzMTYyODQyOwpjb25zdCBmbG9hdCBpMjY4X1MxX2MwID0gMC4zMDAwMDAwMTE5MjA5Mjg5NjsKY29uc3QgZmxvYXQgaTI3OF9TMV9jMCA9IDAuNTUwMDAwMDExOTIwOTI4OTY7CmNvbnN0IGZsb2F0IGkyODRfUzFfYzAgPSAwLjgwMDAwMDAxMTkyMDkyODk2Owpjb25zdCBmbG9hdDIgaTI4NV9TMV9jMCA9IGZsb2F0MigwLjgwMDAwMDAxMTkyMDkyODk2LCAwLjgwMDAwMDAxMTkyMDkyODk2KTsKY29uc3QgZmxvYXQgaTI5MV9TMV9jMCA9IDAuMTcwMDAwMDAxNzg4MTM5MzQ7CmNvbnN0IGZsb2F0IGkzMTZfUzFfYzAgPSAwLjI3NTAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMzM1X1MxX2MwID0gMC40NDk5OTk5ODgwNzkwNzEwNDsKY29uc3QgaW50IGtGaWxsQldfUzIgPSAwOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQldfUzIgPSAyOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQUFfUzIgPSAzOwp1bmlmb3JtIGZsb2F0NCB1aTQxNV9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTQxMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdWk0MzNfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWkzOThfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWkzNzZfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzczX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzY1X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzYzX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTM1MV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzNTdfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWkzODhfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMjg5X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTMwMl9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMTRfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMjkwX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTMwM19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMTVfUzFfYzA7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMl9jMDsKdW5pZm9ybSBoYWxmMiB1cmFkaXVzUGx1c0hhbGZfUzJfYzA7CnVuaWZvcm0gZmxvYXQ0IHVyZWN0VW5pZm9ybV9TMjsKZmxhdCBpbiBoYWxmNCB2Y29sb3JfUzA7CmluIGZsb2F0IHZjb3ZlcmFnZV9TMDsKaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwpmbG9hdDJ4MiBpMjhfUzFfYzAoZmxvYXQyIGkyNyk7CmZsb2F0IGkzNV9TMV9jMChmbG9hdDIgaTMxLCBmbG9hdDIgaTMyLCBmbG9hdCBpMzMsIGZsb2F0IGkzNCk7CmZsb2F0IGk1MV9TMV9jMChmbG9hdDIgaTQ2LCBmbG9hdDIgaTQ3LCBmbG9hdDIgaTQ4LCBmbG9hdDIgaTQ5LCBmbG9hdCBpNTApOwpmbG9hdCBpMTFfUzFfYzAoZmxvYXQgaTEwKTsKZmxvYXQgaTU5X1MxX2MwKGZsb2F0MiBpNTgpOwpmbG9hdCBpNDNfUzFfYzAoZmxvYXQyIGkzOCwgZmxvYXQyIGkzOSwgZmxvYXQgaTQwLCBmbG9hdCBpNDEsIGZsb2F0IGk0Mik7CmZsb2F0IGkxN19TMV9jMChmbG9hdDIgaTE2KTsKZmxvYXQgaTIzX1MxX2MwKGZsb2F0IGkyMCwgZmxvYXQgaTIxLCBmbG9hdCBpMjIpOwpmbG9hdCBpNTZfUzFfYzAoZmxvYXQyIGk1NCwgZmxvYXQgaTU1KTsKZmxvYXQyeDIgaTI4X1MxX2MwKGZsb2F0MiBpMjcpIAp7CglyZXR1cm4gZmxvYXQyeDIoaTI3LngsIC1pMjcueSwgaTI3LnksIGkyNy54KTsKfQpmbG9hdCBpMzVfUzFfYzAoZmxvYXQyIGkzMSwgZmxvYXQyIGkzMiwgZmxvYXQgaTMzLCBmbG9hdCBpMzQpIAp7CglmbG9hdCBpMTI5ID0gaTM0ICogaTEzMV9TMV9jMDsKCWZsb2F0IGkxMzMgPSBkaXN0YW5jZShpMzEsIGkzMik7CglyZXR1cm4gaTYzX1MxX2MwIC0gc21vb3Roc3RlcChpNjNfUzFfYzAgLSBpMTI5LCBpNjNfUzFfYzAgKyBpMTI5LCBpMTMzIC8gaTMzKTsKfQpmbG9hdCBpNTFfUzFfYzAoZmxvYXQyIGk0NiwgZmxvYXQyIGk0NywgZmxvYXQyIGk0OCwgZmxvYXQyIGk0OSwgZmxvYXQgaTUwKSAKewoJZmxvYXQyIGkxODAgPSBpNDk7CglpNDcgPSBpMjhfUzFfYzAoaTE4MCkgKiAoaTQ4IC0gaTQ3KSArIGk0ODsKCWk0NyA9IG1vZChpNDcsIGZsb2F0MihpNTAsIGk1MCkpIC8gaTQ2OwoJZmxvYXQgaTE5NSA9IChpNTAgLyBpNDYueSkgKiBpMTMxX1MxX2MwOwoJZmxvYXQgaTIwMSA9IGkyMDJfUzFfYzAgKiBpMTk1OwoJZmxvYXQyIGkyMTAgPSBpNDc7CglmbG9hdDIgaTIxMiA9IGZsb2F0MihpMTk1LCBpMTk1KTsKCWZsb2F0IGkyMTMgPSBpMjAxOwoJZmxvYXQgaTIxNSA9IGkyMDEgKiBpMjA4X1MxX2MwOwoJcmV0dXJuIGkzNV9TMV9jMChpMjEwLCBpMjEyLCBpMjEzLCBpMjE1KTsKfQpmbG9hdCBpMTFfUzFfYzAoZmxvYXQgaTEwKSAKewoJcmV0dXJuIGNsYW1wKGkxMCwgaTYyX1MxX2MwLCBpNjNfUzFfYzApOwp9CmZsb2F0IGk1OV9TMV9jMChmbG9hdDIgaTU4KSAKewoJZmxvYXQyIGkyODIgPSBpNTggKiBpMjg1X1MxX2MwOwoJZmxvYXQyIGkyOTIgPSBpMjg1X1MxX2MwOwoJZmxvYXQyIGkyOTMgPSBpMjgyOwoJZmxvYXQyIGkyOTUgPSB1aTI4OV9TMV9jMDsKCWZsb2F0MiBpMjk3ID0gdWkyOTBfUzFfYzA7CglmbG9hdCBpMjk5ID0gaTI5MV9TMV9jMDsKCWZsb2F0IGkyODcgPSBpNTFfUzFfYzAoaTI5MiwgaTI5MywgaTI5NSwgaTI5NywgaTI5OSk7CglmbG9hdDIgaTMwNCA9IGkyODVfUzFfYzA7CglmbG9hdDIgaTMwNSA9IGkyODI7CglmbG9hdDIgaTMwNyA9IHVpMzAyX1MxX2MwOwoJZmxvYXQyIGkzMDkgPSB1aTMwM19TMV9jMDsKCWZsb2F0IGkzMTEgPSBpMjUzX1MxX2MwOwoJZmxvYXQgaTMwMSA9IGk1MV9TMV9jMChpMzA0LCBpMzA1LCBpMzA3LCBpMzA5LCBpMzExKTsKCWZsb2F0MiBpMzE3ID0gaTI4NV9TMV9jMDsKCWZsb2F0MiBpMzE4ID0gaTI4MjsKCWZsb2F0MiBpMzIwID0gdWkzMTRfUzFfYzA7CglmbG9hdDIgaTMyMiA9IHVpMzE1X1MxX2MwOwoJZmxvYXQgaTMyNCA9IGkzMTZfUzFfYzA7CglmbG9hdCBpMzEzID0gaTUxX1MxX2MwKGkzMTcsIGkzMTgsIGkzMjAsIGkzMjIsIGkzMjQpOwoJZmxvYXQgaTMyNiA9ICgoaTI4NyAqIGkyODcgKyBpMzAxKSAtIGkzMTMpICogaTEzMV9TMV9jMDsKCWZsb2F0IGkzMzkgPSBpMzM1X1MxX2MwICsgaTI4NF9TMV9jMCAqIGkzMjY7CglyZXR1cm4gaTExX1MxX2MwKGkzMzkpOwp9CmZsb2F0IGk0M19TMV9jMChmbG9hdDIgaTM4LCBmbG9hdDIgaTM5LCBmbG9hdCBpNDAsIGZsb2F0IGk0MSwgZmxvYXQgaTQyKSAKewoJZmxvYXQyIGkxNTIgPSBpMzg7CglmbG9hdDIgaTE1NCA9IGkzOTsKCWZsb2F0IGkxNTYgPSBpNDAgKyBpNDE7CglmbG9hdCBpMTU3ID0gaTQyOwoJZmxvYXQgaTE0OCA9IGkzNV9TMV9jMChpMTUyLCBpMTU0LCBpMTU2LCBpMTU3KTsKCWZsb2F0MiBpMTY1ID0gaTM4OwoJZmxvYXQyIGkxNjcgPSBpMzk7CglmbG9hdCBpMTY5ID0gbWF4KGk0MCAtIGk0MSwgaTYyX1MxX2MwKTsKCWZsb2F0IGkxNzAgPSBpNDI7CglmbG9hdCBpMTYwID0gaTM1X1MxX2MwKGkxNjUsIGkxNjcsIGkxNjksIGkxNzApOwoJZmxvYXQgaTE3NiA9IGkxNDggLSBpMTYwOwoJcmV0dXJuIGkxMV9TMV9jMChpMTc2KTsKfQpmbG9hdCBpMTdfUzFfYzAoZmxvYXQyIGkxNikgCnsKCWkxNiA9IGZyYWN0KGkxNiAqIGk3MF9TMV9jMCk7CglmbG9hdCBpODAgPSBkb3QoZmxvYXQyKGkxNi55LCBpMTYueCksIGkxNiArIGk3OF9TMV9jMCk7CglpMTYgKz0gZmxvYXQyKGk4MCwgaTgwKTsKCWZsb2F0IGk4NCA9IGkxNi54ICogaTE2Lnk7CglyZXR1cm4gKGZyYWN0KGk4NCAqIGk5NF9TMV9jMCkgKyBmcmFjdChpODQgKiBpOThfUzFfYzApKSAtIGk2M19TMV9jMDsKfQpmbG9hdCBpMjNfUzFfYzAoZmxvYXQgaTIwLCBmbG9hdCBpMjEsIGZsb2F0IGkyMikgCnsKCXJldHVybiBzdGVwKGkyMSwgaTIwKSAqIChpNjNfUzFfYzAgLSBzdGVwKGkyMiwgaTIwKSk7Cn0KZmxvYXQgaTU2X1MxX2MwKGZsb2F0MiBpNTQsIGZsb2F0IGk1NSkgCnsKCWZsb2F0MiBpMjIwID0gaTU0OwoJZmxvYXQgaTIxOSA9IGkxN19TMV9jMChpMjIwKTsKCWZsb2F0IGkyMjUgPSBpMjE5OwoJZmxvYXQgaTIyNyA9IGk2Ml9TMV9jMDsKCWZsb2F0IGkyMjggPSBpMjI0X1MxX2MwOwoJZmxvYXQgaTIyMyA9IGkyM19TMV9jMChpMjI1LCBpMjI3LCBpMjI4KTsKCWZsb2F0IGkyNDAgPSBpMjE5ICsgc2luKGkyMzFfUzFfYzAgKiAoaTU1ICsgaTIzM19TMV9jMCkpOwoJZmxvYXQgaTI0MSA9IGkyMzhfUzFfYzA7CglmbG9hdCBpMjQyID0gaTIzOV9TMV9jMDsKCWkyMjMgKz0gaTIzX1MxX2MwKGkyNDAsIGkyNDEsIGkyNDIpOwoJZmxvYXQgaTI1NSA9IGkyMTkgKyBzaW4oaTIzMV9TMV9jMCAqIChpNTUgKyBpMjQ4X1MxX2MwKSk7CglmbG9hdCBpMjU2ID0gaTI1M19TMV9jMDsKCWZsb2F0IGkyNTcgPSBpMjU0X1MxX2MwOwoJaTIyMyArPSBpMjNfUzFfYzAoaTI1NSwgaTI1NiwgaTI1Nyk7CglmbG9hdCBpMjY5ID0gaTIxOSArIHNpbihpMjMxX1MxX2MwICogKGk1NSArIGkyNjNfUzFfYzApKTsKCWZsb2F0IGkyNzAgPSBpMjY4X1MxX2MwOwoJZmxvYXQgaTI3MSA9IGkyMzNfUzFfYzA7CglpMjIzICs9IGkyM19TMV9jMChpMjY5LCBpMjcwLCBpMjcxKTsKCWZsb2F0IGkyNzUgPSBpMjIzOwoJcmV0dXJuIGkxMV9TMV9jMChpMjc1KSAqIGkyNzhfUzFfYzA7Cn0KaGFsZjQgcnVudGltZV9zaGFkZXJfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CglmbG9hdDIgX3RtcF8xX2Nvb3JkcyA9IHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwoJZmxvYXQ0IGkzNDYgPSBmbG9hdDQoX3RtcF8xX2Nvb3JkcywgMC4wLCAwLjApOwoJZmxvYXQ0IG9Db2xvcjsKCWZsb2F0MiBpMzQzID0gZmxvYXQyKGkzNDYueCwgaTM0Ni55KTsKCWZsb2F0MiBpMzQ5ID0gaTM0MyAqIHVpMzUxX1MxX2MwOwoJZmxvYXQyIGkzNTQgPSBpMzQ5IC0gbW9kKGkzNDMsIHVpMzU3X1MxX2MwKTsKCWZsb2F0IGkzNjEgPSB1aTM2M19TMV9jMCAqIHVpMzY1X1MxX2MwOwoJZmxvYXQyIGkzNjkgPSBpMzQ5OwoJZmxvYXQgaTM2OCA9IGk1OV9TMV9jMChpMzY5KTsKCWZsb2F0MiBpMzc3ID0gaTM0MzsKCWZsb2F0MiBpMzc5ID0gdWkzNzNfUzFfYzA7CglmbG9hdCBpMzgxID0gaTM2MTsKCWZsb2F0IGkzODMgPSBpMjI0X1MxX2MwICogdWkzNjNfUzFfYzA7CglmbG9hdCBpMzg0ID0gdWkzNzZfUzFfYzA7CglmbG9hdCBpMzcyID0gaTQzX1MxX2MwKGkzNzcsIGkzNzksIGkzODEsIGkzODMsIGkzODQpOwoJZmxvYXQyIGkzODkgPSBpMzU0OwoJZmxvYXQgaTM5MSA9IHVpMzg4X1MxX2MwOwoJZmxvYXQgaTM4NyA9ICgoaTU2X1MxX2MwKGkzODksIGkzOTEpICogaTM3MikgKiBpMzY4KSAqIHVpMzk4X1MxX2MwOwoJZmxvYXQyIGk0MDIgPSBpMzQzOwoJZmxvYXQyIGk0MDQgPSB1aTM3M19TMV9jMDsKCWZsb2F0IGk0MDYgPSBpMzYxOwoJZmxvYXQgaTQwOCA9IHVpMzc2X1MxX2MwOwoJZmxvYXQgaTQwMSA9IChpMzVfUzFfYzAoaTQwMiwgaTQwNCwgaTQwNiwgaTQwOCkgKiB1aTQxMV9TMV9jMCkgKiB1aTQxNV9TMV9jMC53OwoJZmxvYXQzIGk0MjYgPSBmbG9hdDModWk0MTVfUzFfYzAueCwgdWk0MTVfUzFfYzAueSwgdWk0MTVfUzFfYzAueikgKiBpNDAxOwoJZmxvYXQ0IGk0MjEgPSBmbG9hdDQoaTQyNi54LCBpNDI2LnksIGk0MjYueiwgaTQwMSk7CglmbG9hdDMgaTQzOCA9IGZsb2F0Myh1aTQzM19TMV9jMC54LCB1aTQzM19TMV9jMC55LCB1aTQzM19TMV9jMC56KSAqIHVpNDMzX1MxX2MwLnc7CglmbG9hdDQgaTQzMiA9IGZsb2F0NChpNDM4LngsIGk0MzgueSwgaTQzOC56LCB1aTQzM19TMV9jMC53KTsKCW9Db2xvciA9IG1peChpNDIxLCBpNDMyLCBmbG9hdDQoaTM4NywgaTM4NywgaTM4NywgaTM4NykpOwoJcmV0dXJuIGhhbGY0KGhhbGY0KG9Db2xvcikpOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMShoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gcnVudGltZV9zaGFkZXJfUzFfYzAoX2lucHV0KTsKfQpoYWxmNCBDaXJjdWxhclJSZWN0X1MyX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWZsb2F0MiBkeHkwID0gdWlubmVyUmVjdF9TMl9jMC5MVCAtIHNrX0ZyYWdDb29yZC54eTsKCWZsb2F0MiBkeHkxID0gc2tfRnJhZ0Nvb3JkLnh5IC0gdWlubmVyUmVjdF9TMl9jMC5SQjsKCWZsb2F0MiBkeHkgPSBtYXgobWF4KGR4eTAsIGR4eTEpLCAwLjApOwoJaGFsZiBhbHBoYSA9IGhhbGYoc2F0dXJhdGUodXJhZGl1c1BsdXNIYWxmX1MyX2MwLnggLSBsZW5ndGgoZHh5KSkpOwoJcmV0dXJuIF9pbnB1dCAqIGFscGhhOwp9CmhhbGY0IFJlY3RfUzIoaGFsZjQgX2lucHV0KSAKewoJX2lucHV0ID0gQ2lyY3VsYXJSUmVjdF9TMl9jMChfaW5wdXQpOwoJaGFsZjQgX3RtcF8yX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGNvdmVyYWdlOwoJaWYgKGludCgxKSA9PSBrRmlsbEJXX1MyIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxCV19TMikgCgl7CgkJY292ZXJhZ2UgPSBoYWxmKGFsbChncmVhdGVyVGhhbihmbG9hdDQoc2tfRnJhZ0Nvb3JkLnh5LCB1cmVjdFVuaWZvcm1fUzIuencpLCBmbG9hdDQodXJlY3RVbmlmb3JtX1MyLnh5LCBza19GcmFnQ29vcmQueHkpKSkgPyAxIDogMCk7Cgl9CgllbHNlIAoJewoJCWhhbGY0IGRpc3RzNCA9IGNsYW1wKGhhbGY0KDEuMCwgMS4wLCAtMS4wLCAtMS4wKSAqIGhhbGY0KHNrX0ZyYWdDb29yZC54eXh5IC0gdXJlY3RVbmlmb3JtX1MyKSwgMC4wLCAxLjApOwoJCWhhbGYyIGRpc3RzMiA9IChkaXN0czQueHkgKyBkaXN0czQuencpIC0gMS4wOwoJCWNvdmVyYWdlID0gZGlzdHMyLnggKiBkaXN0czIueTsKCX0KCWlmIChpbnQoMSkgPT0ga0ludmVyc2VGaWxsQldfUzIgfHwgaW50KDEpID09IGtJbnZlcnNlRmlsbEFBX1MyKSAKCXsKCQljb3ZlcmFnZSA9IDEuMCAtIGNvdmVyYWdlOwoJfQoJcmV0dXJuIGhhbGY0KF9pbnB1dCAqIGNvdmVyYWdlKTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgY292ZXJhZ2UgPSB2Y292ZXJhZ2VfUzA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGhhbGYoY292ZXJhZ2UpKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IE1hdHJpeEVmZmVjdF9TMShvdXRwdXRDb2xvcl9TMCk7CgloYWxmNCBvdXRwdXRfUzI7CglvdXRwdXRfUzIgPSBSZWN0X1MyKG91dHB1dENvdmVyYWdlX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRfUzEgKiBvdXRwdXRfUzI7Cgl9Cn0KAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAABwb3NpdGlvbggAAABjb3ZlcmFnZQUAAABjb2xvcgAAAAoAAABsb2NhbENvb3JkAAABAAAAAAAAAA==","HUQAAAAAAAMAADAAAIOAAAH677776IZOCAAP577777777777777777YBAAAAAAAAAAAKAAYAAAACAAAAAAACCAYAAA":"CQAAAExTS1PUAAAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmZsYXQgb3V0IGhhbGY0IHZjb2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKfQoAAAAAKQEAAGZsYXQgaW4gaGFsZjQgdmNvbG9yX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAAAQAAAAAAAAA=","HVIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAHQBOSN6AGCAABAAAAAAAEAAAABSCQ7IGTADBAAAAAAAAAAAAAAAAZCBRM4GNEAAAAAGAAAAAAAAAAABAAOAAAABAAAAAAABBAMAA":"CQAAAExTS1N0AQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKaW4gZmxvYXQyIHBvc2l0aW9uOwppbiBoYWxmNCBjb2xvcjsKaW4gZmxvYXQyIGxvY2FsQ29vcmQ7CmZsYXQgb3V0IGhhbGY0IHZjb2xvcl9TMDsKb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfMl9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzEpICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAQAAADwdAABjb25zdCBmbG9hdCBpNjJfUzFfYzAgPSAwLjA7CmNvbnN0IGZsb2F0IGk2M19TMV9jMCA9IDEuMDsKY29uc3QgZmxvYXQyIGk3MF9TMV9jMCA9IGZsb2F0Mig1LjM5ODcwMDIzNzI3NDE2OTksIDUuNDQyMTAwMDQ4MDY1MTg1NSk7CmNvbnN0IGZsb2F0MiBpNzhfUzFfYzAgPSBmbG9hdDIoMjEuNTM1MTAwOTM2ODg5NjQ4LCAxNC4zMTM2OTk3MjIyOTAwMzkpOwpjb25zdCBmbG9hdCBpOTRfUzFfYzAgPSA5NS40MzA3MDIyMDk0NzI2NTY7CmNvbnN0IGZsb2F0IGk5OF9TMV9jMCA9IDc1LjA0OTYwNjMyMzI0MjE4ODsKY29uc3QgZmxvYXQgaTEzMV9TMV9jMCA9IDAuNTsKY29uc3QgZmxvYXQgaTIwMl9TMV9jMCA9IDAuNjQ5OTk5OTc2MTU4MTQyMDk7CmNvbnN0IGZsb2F0IGkyMDhfUzFfYzAgPSA1MC4wOwpjb25zdCBmbG9hdCBpMjI0X1MxX2MwID0gMC4wNTAwMDAwMDA3NDUwNTgwNjsKY29uc3QgZmxvYXQgaTIzMV9TMV9jMCA9IDMuMTQxNTkyNzQxMDEyNTczMjsKY29uc3QgZmxvYXQgaTIzM19TMV9jMCA9IDAuMzQ5OTk5OTk0MDM5NTM1NTI7CmNvbnN0IGZsb2F0IGkyMzhfUzFfYzAgPSAwLjEwMDAwMDAwMTQ5MDExNjEyOwpjb25zdCBmbG9hdCBpMjM5X1MxX2MwID0gMC4xNTAwMDAwMDU5NjA0NjQ0ODsKY29uc3QgZmxvYXQgaTI0OF9TMV9jMCA9IDAuNjk5OTk5OTg4MDc5MDcxMDQ7CmNvbnN0IGZsb2F0IGkyNTNfUzFfYzAgPSAwLjIwMDAwMDAwMjk4MDIzMjI0Owpjb25zdCBmbG9hdCBpMjU0X1MxX2MwID0gMC4yNTsKY29uc3QgZmxvYXQgaTI2M19TMV9jMCA9IDEuMDQ5OTk5OTUyMzE2Mjg0MjsKY29uc3QgZmxvYXQgaTI2OF9TMV9jMCA9IDAuMzAwMDAwMDExOTIwOTI4OTY7CmNvbnN0IGZsb2F0IGkyNzhfUzFfYzAgPSAwLjU1MDAwMDAxMTkyMDkyODk2Owpjb25zdCBmbG9hdCBpMjg0X1MxX2MwID0gMC44MDAwMDAwMTE5MjA5Mjg5NjsKY29uc3QgZmxvYXQyIGkyODVfUzFfYzAgPSBmbG9hdDIoMC44MDAwMDAwMTE5MjA5Mjg5NiwgMC44MDAwMDAwMTE5MjA5Mjg5Nik7CmNvbnN0IGZsb2F0IGkyOTFfUzFfYzAgPSAwLjE3MDAwMDAwMTc4ODEzOTM0Owpjb25zdCBmbG9hdCBpMzE2X1MxX2MwID0gMC4yNzUwMDAwMDU5NjA0NjQ0ODsKY29uc3QgZmxvYXQgaTMzNV9TMV9jMCA9IDAuNDQ5OTk5OTg4MDc5MDcxMDQ7CmNvbnN0IGludCBrRmlsbEFBX1MyID0gMTsKY29uc3QgaW50IGtJbnZlcnNlRmlsbEJXX1MyID0gMjsKY29uc3QgaW50IGtJbnZlcnNlRmlsbEFBX1MyID0gMzsKdW5pZm9ybSBmbG9hdDQgdWk0MTVfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWk0MTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQ0IHVpNDMzX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzk4X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzc2X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTM3M19TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTM2NV9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTM2M19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzNTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzU3X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzg4X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTI4OV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMDJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzE0X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTI5MF9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMDNfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzE1X1MxX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CnVuaWZvcm0gZmxvYXQ0IHVjaXJjbGVfUzI7CmZsYXQgaW4gaGFsZjQgdmNvbG9yX1MwOwppbiBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CmZsb2F0MngyIGkyOF9TMV9jMChmbG9hdDIgaTI3KTsKZmxvYXQgaTM1X1MxX2MwKGZsb2F0MiBpMzEsIGZsb2F0MiBpMzIsIGZsb2F0IGkzMywgZmxvYXQgaTM0KTsKZmxvYXQgaTUxX1MxX2MwKGZsb2F0MiBpNDYsIGZsb2F0MiBpNDcsIGZsb2F0MiBpNDgsIGZsb2F0MiBpNDksIGZsb2F0IGk1MCk7CmZsb2F0IGkxMV9TMV9jMChmbG9hdCBpMTApOwpmbG9hdCBpNTlfUzFfYzAoZmxvYXQyIGk1OCk7CmZsb2F0IGk0M19TMV9jMChmbG9hdDIgaTM4LCBmbG9hdDIgaTM5LCBmbG9hdCBpNDAsIGZsb2F0IGk0MSwgZmxvYXQgaTQyKTsKZmxvYXQgaTE3X1MxX2MwKGZsb2F0MiBpMTYpOwpmbG9hdCBpMjNfUzFfYzAoZmxvYXQgaTIwLCBmbG9hdCBpMjEsIGZsb2F0IGkyMik7CmZsb2F0IGk1Nl9TMV9jMChmbG9hdDIgaTU0LCBmbG9hdCBpNTUpOwpmbG9hdDJ4MiBpMjhfUzFfYzAoZmxvYXQyIGkyNykgCnsKCXJldHVybiBmbG9hdDJ4MihpMjcueCwgLWkyNy55LCBpMjcueSwgaTI3LngpOwp9CmZsb2F0IGkzNV9TMV9jMChmbG9hdDIgaTMxLCBmbG9hdDIgaTMyLCBmbG9hdCBpMzMsIGZsb2F0IGkzNCkgCnsKCWZsb2F0IGkxMjkgPSBpMzQgKiBpMTMxX1MxX2MwOwoJZmxvYXQgaTEzMyA9IGRpc3RhbmNlKGkzMSwgaTMyKTsKCXJldHVybiBpNjNfUzFfYzAgLSBzbW9vdGhzdGVwKGk2M19TMV9jMCAtIGkxMjksIGk2M19TMV9jMCArIGkxMjksIGkxMzMgLyBpMzMpOwp9CmZsb2F0IGk1MV9TMV9jMChmbG9hdDIgaTQ2LCBmbG9hdDIgaTQ3LCBmbG9hdDIgaTQ4LCBmbG9hdDIgaTQ5LCBmbG9hdCBpNTApIAp7CglmbG9hdDIgaTE4MCA9IGk0OTsKCWk0NyA9IGkyOF9TMV9jMChpMTgwKSAqIChpNDggLSBpNDcpICsgaTQ4OwoJaTQ3ID0gbW9kKGk0NywgZmxvYXQyKGk1MCwgaTUwKSkgLyBpNDY7CglmbG9hdCBpMTk1ID0gKGk1MCAvIGk0Ni55KSAqIGkxMzFfUzFfYzA7CglmbG9hdCBpMjAxID0gaTIwMl9TMV9jMCAqIGkxOTU7CglmbG9hdDIgaTIxMCA9IGk0NzsKCWZsb2F0MiBpMjEyID0gZmxvYXQyKGkxOTUsIGkxOTUpOwoJZmxvYXQgaTIxMyA9IGkyMDE7CglmbG9hdCBpMjE1ID0gaTIwMSAqIGkyMDhfUzFfYzA7CglyZXR1cm4gaTM1X1MxX2MwKGkyMTAsIGkyMTIsIGkyMTMsIGkyMTUpOwp9CmZsb2F0IGkxMV9TMV9jMChmbG9hdCBpMTApIAp7CglyZXR1cm4gY2xhbXAoaTEwLCBpNjJfUzFfYzAsIGk2M19TMV9jMCk7Cn0KZmxvYXQgaTU5X1MxX2MwKGZsb2F0MiBpNTgpIAp7CglmbG9hdDIgaTI4MiA9IGk1OCAqIGkyODVfUzFfYzA7CglmbG9hdDIgaTI5MiA9IGkyODVfUzFfYzA7CglmbG9hdDIgaTI5MyA9IGkyODI7CglmbG9hdDIgaTI5NSA9IHVpMjg5X1MxX2MwOwoJZmxvYXQyIGkyOTcgPSB1aTI5MF9TMV9jMDsKCWZsb2F0IGkyOTkgPSBpMjkxX1MxX2MwOwoJZmxvYXQgaTI4NyA9IGk1MV9TMV9jMChpMjkyLCBpMjkzLCBpMjk1LCBpMjk3LCBpMjk5KTsKCWZsb2F0MiBpMzA0ID0gaTI4NV9TMV9jMDsKCWZsb2F0MiBpMzA1ID0gaTI4MjsKCWZsb2F0MiBpMzA3ID0gdWkzMDJfUzFfYzA7CglmbG9hdDIgaTMwOSA9IHVpMzAzX1MxX2MwOwoJZmxvYXQgaTMxMSA9IGkyNTNfUzFfYzA7CglmbG9hdCBpMzAxID0gaTUxX1MxX2MwKGkzMDQsIGkzMDUsIGkzMDcsIGkzMDksIGkzMTEpOwoJZmxvYXQyIGkzMTcgPSBpMjg1X1MxX2MwOwoJZmxvYXQyIGkzMTggPSBpMjgyOwoJZmxvYXQyIGkzMjAgPSB1aTMxNF9TMV9jMDsKCWZsb2F0MiBpMzIyID0gdWkzMTVfUzFfYzA7CglmbG9hdCBpMzI0ID0gaTMxNl9TMV9jMDsKCWZsb2F0IGkzMTMgPSBpNTFfUzFfYzAoaTMxNywgaTMxOCwgaTMyMCwgaTMyMiwgaTMyNCk7CglmbG9hdCBpMzI2ID0gKChpMjg3ICogaTI4NyArIGkzMDEpIC0gaTMxMykgKiBpMTMxX1MxX2MwOwoJZmxvYXQgaTMzOSA9IGkzMzVfUzFfYzAgKyBpMjg0X1MxX2MwICogaTMyNjsKCXJldHVybiBpMTFfUzFfYzAoaTMzOSk7Cn0KZmxvYXQgaTQzX1MxX2MwKGZsb2F0MiBpMzgsIGZsb2F0MiBpMzksIGZsb2F0IGk0MCwgZmxvYXQgaTQxLCBmbG9hdCBpNDIpIAp7CglmbG9hdDIgaTE1MiA9IGkzODsKCWZsb2F0MiBpMTU0ID0gaTM5OwoJZmxvYXQgaTE1NiA9IGk0MCArIGk0MTsKCWZsb2F0IGkxNTcgPSBpNDI7CglmbG9hdCBpMTQ4ID0gaTM1X1MxX2MwKGkxNTIsIGkxNTQsIGkxNTYsIGkxNTcpOwoJZmxvYXQyIGkxNjUgPSBpMzg7CglmbG9hdDIgaTE2NyA9IGkzOTsKCWZsb2F0IGkxNjkgPSBtYXgoaTQwIC0gaTQxLCBpNjJfUzFfYzApOwoJZmxvYXQgaTE3MCA9IGk0MjsKCWZsb2F0IGkxNjAgPSBpMzVfUzFfYzAoaTE2NSwgaTE2NywgaTE2OSwgaTE3MCk7CglmbG9hdCBpMTc2ID0gaTE0OCAtIGkxNjA7CglyZXR1cm4gaTExX1MxX2MwKGkxNzYpOwp9CmZsb2F0IGkxN19TMV9jMChmbG9hdDIgaTE2KSAKewoJaTE2ID0gZnJhY3QoaTE2ICogaTcwX1MxX2MwKTsKCWZsb2F0IGk4MCA9IGRvdChmbG9hdDIoaTE2LnksIGkxNi54KSwgaTE2ICsgaTc4X1MxX2MwKTsKCWkxNiArPSBmbG9hdDIoaTgwLCBpODApOwoJZmxvYXQgaTg0ID0gaTE2LnggKiBpMTYueTsKCXJldHVybiAoZnJhY3QoaTg0ICogaTk0X1MxX2MwKSArIGZyYWN0KGk4NCAqIGk5OF9TMV9jMCkpIC0gaTYzX1MxX2MwOwp9CmZsb2F0IGkyM19TMV9jMChmbG9hdCBpMjAsIGZsb2F0IGkyMSwgZmxvYXQgaTIyKSAKewoJcmV0dXJuIHN0ZXAoaTIxLCBpMjApICogKGk2M19TMV9jMCAtIHN0ZXAoaTIyLCBpMjApKTsKfQpmbG9hdCBpNTZfUzFfYzAoZmxvYXQyIGk1NCwgZmxvYXQgaTU1KSAKewoJZmxvYXQyIGkyMjAgPSBpNTQ7CglmbG9hdCBpMjE5ID0gaTE3X1MxX2MwKGkyMjApOwoJZmxvYXQgaTIyNSA9IGkyMTk7CglmbG9hdCBpMjI3ID0gaTYyX1MxX2MwOwoJZmxvYXQgaTIyOCA9IGkyMjRfUzFfYzA7CglmbG9hdCBpMjIzID0gaTIzX1MxX2MwKGkyMjUsIGkyMjcsIGkyMjgpOwoJZmxvYXQgaTI0MCA9IGkyMTkgKyBzaW4oaTIzMV9TMV9jMCAqIChpNTUgKyBpMjMzX1MxX2MwKSk7CglmbG9hdCBpMjQxID0gaTIzOF9TMV9jMDsKCWZsb2F0IGkyNDIgPSBpMjM5X1MxX2MwOwoJaTIyMyArPSBpMjNfUzFfYzAoaTI0MCwgaTI0MSwgaTI0Mik7CglmbG9hdCBpMjU1ID0gaTIxOSArIHNpbihpMjMxX1MxX2MwICogKGk1NSArIGkyNDhfUzFfYzApKTsKCWZsb2F0IGkyNTYgPSBpMjUzX1MxX2MwOwoJZmxvYXQgaTI1NyA9IGkyNTRfUzFfYzA7CglpMjIzICs9IGkyM19TMV9jMChpMjU1LCBpMjU2LCBpMjU3KTsKCWZsb2F0IGkyNjkgPSBpMjE5ICsgc2luKGkyMzFfUzFfYzAgKiAoaTU1ICsgaTI2M19TMV9jMCkpOwoJZmxvYXQgaTI3MCA9IGkyNjhfUzFfYzA7CglmbG9hdCBpMjcxID0gaTIzM19TMV9jMDsKCWkyMjMgKz0gaTIzX1MxX2MwKGkyNjksIGkyNzAsIGkyNzEpOwoJZmxvYXQgaTI3NSA9IGkyMjM7CglyZXR1cm4gaTExX1MxX2MwKGkyNzUpICogaTI3OF9TMV9jMDsKfQpoYWxmNCBydW50aW1lX3NoYWRlcl9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzBfaW5Db2xvciA9IF9pbnB1dDsKCWZsb2F0MiBfdG1wXzFfY29vcmRzID0gdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CglmbG9hdDQgaTM0NiA9IGZsb2F0NChfdG1wXzFfY29vcmRzLCAwLjAsIDAuMCk7CglmbG9hdDQgb0NvbG9yOwoJZmxvYXQyIGkzNDMgPSBmbG9hdDIoaTM0Ni54LCBpMzQ2LnkpOwoJZmxvYXQyIGkzNDkgPSBpMzQzICogdWkzNTFfUzFfYzA7CglmbG9hdDIgaTM1NCA9IGkzNDkgLSBtb2QoaTM0MywgdWkzNTdfUzFfYzApOwoJZmxvYXQgaTM2MSA9IHVpMzYzX1MxX2MwICogdWkzNjVfUzFfYzA7CglmbG9hdDIgaTM2OSA9IGkzNDk7CglmbG9hdCBpMzY4ID0gaTU5X1MxX2MwKGkzNjkpOwoJZmxvYXQyIGkzNzcgPSBpMzQzOwoJZmxvYXQyIGkzNzkgPSB1aTM3M19TMV9jMDsKCWZsb2F0IGkzODEgPSBpMzYxOwoJZmxvYXQgaTM4MyA9IGkyMjRfUzFfYzAgKiB1aTM2M19TMV9jMDsKCWZsb2F0IGkzODQgPSB1aTM3Nl9TMV9jMDsKCWZsb2F0IGkzNzIgPSBpNDNfUzFfYzAoaTM3NywgaTM3OSwgaTM4MSwgaTM4MywgaTM4NCk7CglmbG9hdDIgaTM4OSA9IGkzNTQ7CglmbG9hdCBpMzkxID0gdWkzODhfUzFfYzA7CglmbG9hdCBpMzg3ID0gKChpNTZfUzFfYzAoaTM4OSwgaTM5MSkgKiBpMzcyKSAqIGkzNjgpICogdWkzOThfUzFfYzA7CglmbG9hdDIgaTQwMiA9IGkzNDM7CglmbG9hdDIgaTQwNCA9IHVpMzczX1MxX2MwOwoJZmxvYXQgaTQwNiA9IGkzNjE7CglmbG9hdCBpNDA4ID0gdWkzNzZfUzFfYzA7CglmbG9hdCBpNDAxID0gKGkzNV9TMV9jMChpNDAyLCBpNDA0LCBpNDA2LCBpNDA4KSAqIHVpNDExX1MxX2MwKSAqIHVpNDE1X1MxX2MwLnc7CglmbG9hdDMgaTQyNiA9IGZsb2F0Myh1aTQxNV9TMV9jMC54LCB1aTQxNV9TMV9jMC55LCB1aTQxNV9TMV9jMC56KSAqIGk0MDE7CglmbG9hdDQgaTQyMSA9IGZsb2F0NChpNDI2LngsIGk0MjYueSwgaTQyNi56LCBpNDAxKTsKCWZsb2F0MyBpNDM4ID0gZmxvYXQzKHVpNDMzX1MxX2MwLngsIHVpNDMzX1MxX2MwLnksIHVpNDMzX1MxX2MwLnopICogdWk0MzNfUzFfYzAudzsKCWZsb2F0NCBpNDMyID0gZmxvYXQ0KGk0MzgueCwgaTQzOC55LCBpNDM4LnosIHVpNDMzX1MxX2MwLncpOwoJb0NvbG9yID0gbWl4KGk0MjEsIGk0MzIsIGZsb2F0NChpMzg3LCBpMzg3LCBpMzg3LCBpMzg3KSk7CglyZXR1cm4gaGFsZjQoaGFsZjQob0NvbG9yKSk7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBydW50aW1lX3NoYWRlcl9TMV9jMChfaW5wdXQpOwp9CmhhbGY0IENpcmNsZV9TMihoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzJfaW5Db2xvciA9IF9pbnB1dDsKCWhhbGYgZDsKCWlmIChpbnQoMSkgPT0ga0ludmVyc2VGaWxsQldfUzIgfHwgaW50KDEpID09IGtJbnZlcnNlRmlsbEFBX1MyKSAKCXsKCQlkID0gaGFsZigobGVuZ3RoKCh1Y2lyY2xlX1MyLnh5IC0gc2tfRnJhZ0Nvb3JkLnh5KSAqIHVjaXJjbGVfUzIudykgLSAxLjApICogdWNpcmNsZV9TMi56KTsKCX0KCWVsc2UgCgl7CgkJZCA9IGhhbGYoKDEuMCAtIGxlbmd0aCgodWNpcmNsZV9TMi54eSAtIHNrX0ZyYWdDb29yZC54eSkgKiB1Y2lyY2xlX1MyLncpKSAqIHVjaXJjbGVfUzIueik7Cgl9CglpZiAoaW50KDEpID09IGtGaWxsQUFfUzIgfHwgaW50KDEpID09IGtJbnZlcnNlRmlsbEFBX1MyKSAKCXsKCQlyZXR1cm4gaGFsZjQoX2lucHV0ICogc2F0dXJhdGUoZCkpOwoJfQoJZWxzZSAKCXsKCQlyZXR1cm4gaGFsZjQoZCA+IDAuNSA/IF9pbnB1dCA6IGhhbGY0KDAuMCkpOwoJfQp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gTWF0cml4RWZmZWN0X1MxKG91dHB1dENvbG9yX1MwKTsKCWhhbGY0IG91dHB1dF9TMjsKCW91dHB1dF9TMiA9IENpcmNsZV9TMihvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0X1MxICogb3V0cHV0X1MyOwoJfQp9CgEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAEAAAAAAAAA","HVIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAHQBOSN6AGCAABAAAAAAAEAAAABSCQ7IGTADBAAAAAAAAAAAAAAAAZCBRM4GNEAAAAAGAAAAAAAAAAABAAOAAAABAAAAAAABBAMAA":"CQAAAExTS1PZAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKaW4gZmxvYXQyIHBvc2l0aW9uOwppbiBmbG9hdCBjb3ZlcmFnZTsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpmbGF0IG91dCBoYWxmNCB2Y29sb3JfUzA7Cm91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm91dCBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwoJewoJCXZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwID0gZmxvYXQzeDIodW1hdHJpeF9TMSkgKiBsb2NhbENvb3JkLnh5MTsKCX0KfQoAAAABAAAAeh0AAGNvbnN0IGZsb2F0IGk2Ml9TMV9jMCA9IDAuMDsKY29uc3QgZmxvYXQgaTYzX1MxX2MwID0gMS4wOwpjb25zdCBmbG9hdDIgaTcwX1MxX2MwID0gZmxvYXQyKDUuMzk4NzAwMjM3Mjc0MTY5OSwgNS40NDIxMDAwNDgwNjUxODU1KTsKY29uc3QgZmxvYXQyIGk3OF9TMV9jMCA9IGZsb2F0MigyMS41MzUxMDA5MzY4ODk2NDgsIDE0LjMxMzY5OTcyMjI5MDAzOSk7CmNvbnN0IGZsb2F0IGk5NF9TMV9jMCA9IDk1LjQzMDcwMjIwOTQ3MjY1NjsKY29uc3QgZmxvYXQgaTk4X1MxX2MwID0gNzUuMDQ5NjA2MzIzMjQyMTg4Owpjb25zdCBmbG9hdCBpMTMxX1MxX2MwID0gMC41Owpjb25zdCBmbG9hdCBpMjAyX1MxX2MwID0gMC42NDk5OTk5NzYxNTgxNDIwOTsKY29uc3QgZmxvYXQgaTIwOF9TMV9jMCA9IDUwLjA7CmNvbnN0IGZsb2F0IGkyMjRfUzFfYzAgPSAwLjA1MDAwMDAwMDc0NTA1ODA2Owpjb25zdCBmbG9hdCBpMjMxX1MxX2MwID0gMy4xNDE1OTI3NDEwMTI1NzMyOwpjb25zdCBmbG9hdCBpMjMzX1MxX2MwID0gMC4zNDk5OTk5OTQwMzk1MzU1MjsKY29uc3QgZmxvYXQgaTIzOF9TMV9jMCA9IDAuMTAwMDAwMDAxNDkwMTE2MTI7CmNvbnN0IGZsb2F0IGkyMzlfUzFfYzAgPSAwLjE1MDAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMjQ4X1MxX2MwID0gMC42OTk5OTk5ODgwNzkwNzEwNDsKY29uc3QgZmxvYXQgaTI1M19TMV9jMCA9IDAuMjAwMDAwMDAyOTgwMjMyMjQ7CmNvbnN0IGZsb2F0IGkyNTRfUzFfYzAgPSAwLjI1Owpjb25zdCBmbG9hdCBpMjYzX1MxX2MwID0gMS4wNDk5OTk5NTIzMTYyODQyOwpjb25zdCBmbG9hdCBpMjY4X1MxX2MwID0gMC4zMDAwMDAwMTE5MjA5Mjg5NjsKY29uc3QgZmxvYXQgaTI3OF9TMV9jMCA9IDAuNTUwMDAwMDExOTIwOTI4OTY7CmNvbnN0IGZsb2F0IGkyODRfUzFfYzAgPSAwLjgwMDAwMDAxMTkyMDkyODk2Owpjb25zdCBmbG9hdDIgaTI4NV9TMV9jMCA9IGZsb2F0MigwLjgwMDAwMDAxMTkyMDkyODk2LCAwLjgwMDAwMDAxMTkyMDkyODk2KTsKY29uc3QgZmxvYXQgaTI5MV9TMV9jMCA9IDAuMTcwMDAwMDAxNzg4MTM5MzQ7CmNvbnN0IGZsb2F0IGkzMTZfUzFfYzAgPSAwLjI3NTAwMDAwNTk2MDQ2NDQ4Owpjb25zdCBmbG9hdCBpMzM1X1MxX2MwID0gMC40NDk5OTk5ODgwNzkwNzEwNDsKY29uc3QgaW50IGtGaWxsQUFfUzIgPSAxOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQldfUzIgPSAyOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQUFfUzIgPSAzOwp1bmlmb3JtIGZsb2F0NCB1aTQxNV9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1aTQxMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdWk0MzNfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWkzOThfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWkzNzZfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMzczX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzY1X1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVpMzYzX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTM1MV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzNTdfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdWkzODhfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMjg5X1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTMwMl9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMTRfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVpMjkwX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1aTMwM19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdWkzMTVfUzFfYzA7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKdW5pZm9ybSBmbG9hdDQgdWNpcmNsZV9TMjsKZmxhdCBpbiBoYWxmNCB2Y29sb3JfUzA7CmluIGZsb2F0IHZjb3ZlcmFnZV9TMDsKaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwpvdXQgaGFsZjQgc2tfRnJhZ0NvbG9yOwpmbG9hdDJ4MiBpMjhfUzFfYzAoZmxvYXQyIGkyNyk7CmZsb2F0IGkzNV9TMV9jMChmbG9hdDIgaTMxLCBmbG9hdDIgaTMyLCBmbG9hdCBpMzMsIGZsb2F0IGkzNCk7CmZsb2F0IGk1MV9TMV9jMChmbG9hdDIgaTQ2LCBmbG9hdDIgaTQ3LCBmbG9hdDIgaTQ4LCBmbG9hdDIgaTQ5LCBmbG9hdCBpNTApOwpmbG9hdCBpMTFfUzFfYzAoZmxvYXQgaTEwKTsKZmxvYXQgaTU5X1MxX2MwKGZsb2F0MiBpNTgpOwpmbG9hdCBpNDNfUzFfYzAoZmxvYXQyIGkzOCwgZmxvYXQyIGkzOSwgZmxvYXQgaTQwLCBmbG9hdCBpNDEsIGZsb2F0IGk0Mik7CmZsb2F0IGkxN19TMV9jMChmbG9hdDIgaTE2KTsKZmxvYXQgaTIzX1MxX2MwKGZsb2F0IGkyMCwgZmxvYXQgaTIxLCBmbG9hdCBpMjIpOwpmbG9hdCBpNTZfUzFfYzAoZmxvYXQyIGk1NCwgZmxvYXQgaTU1KTsKZmxvYXQyeDIgaTI4X1MxX2MwKGZsb2F0MiBpMjcpIAp7CglyZXR1cm4gZmxvYXQyeDIoaTI3LngsIC1pMjcueSwgaTI3LnksIGkyNy54KTsKfQpmbG9hdCBpMzVfUzFfYzAoZmxvYXQyIGkzMSwgZmxvYXQyIGkzMiwgZmxvYXQgaTMzLCBmbG9hdCBpMzQpIAp7CglmbG9hdCBpMTI5ID0gaTM0ICogaTEzMV9TMV9jMDsKCWZsb2F0IGkxMzMgPSBkaXN0YW5jZShpMzEsIGkzMik7CglyZXR1cm4gaTYzX1MxX2MwIC0gc21vb3Roc3RlcChpNjNfUzFfYzAgLSBpMTI5LCBpNjNfUzFfYzAgKyBpMTI5LCBpMTMzIC8gaTMzKTsKfQpmbG9hdCBpNTFfUzFfYzAoZmxvYXQyIGk0NiwgZmxvYXQyIGk0NywgZmxvYXQyIGk0OCwgZmxvYXQyIGk0OSwgZmxvYXQgaTUwKSAKewoJZmxvYXQyIGkxODAgPSBpNDk7CglpNDcgPSBpMjhfUzFfYzAoaTE4MCkgKiAoaTQ4IC0gaTQ3KSArIGk0ODsKCWk0NyA9IG1vZChpNDcsIGZsb2F0MihpNTAsIGk1MCkpIC8gaTQ2OwoJZmxvYXQgaTE5NSA9IChpNTAgLyBpNDYueSkgKiBpMTMxX1MxX2MwOwoJZmxvYXQgaTIwMSA9IGkyMDJfUzFfYzAgKiBpMTk1OwoJZmxvYXQyIGkyMTAgPSBpNDc7CglmbG9hdDIgaTIxMiA9IGZsb2F0MihpMTk1LCBpMTk1KTsKCWZsb2F0IGkyMTMgPSBpMjAxOwoJZmxvYXQgaTIxNSA9IGkyMDEgKiBpMjA4X1MxX2MwOwoJcmV0dXJuIGkzNV9TMV9jMChpMjEwLCBpMjEyLCBpMjEzLCBpMjE1KTsKfQpmbG9hdCBpMTFfUzFfYzAoZmxvYXQgaTEwKSAKewoJcmV0dXJuIGNsYW1wKGkxMCwgaTYyX1MxX2MwLCBpNjNfUzFfYzApOwp9CmZsb2F0IGk1OV9TMV9jMChmbG9hdDIgaTU4KSAKewoJZmxvYXQyIGkyODIgPSBpNTggKiBpMjg1X1MxX2MwOwoJZmxvYXQyIGkyOTIgPSBpMjg1X1MxX2MwOwoJZmxvYXQyIGkyOTMgPSBpMjgyOwoJZmxvYXQyIGkyOTUgPSB1aTI4OV9TMV9jMDsKCWZsb2F0MiBpMjk3ID0gdWkyOTBfUzFfYzA7CglmbG9hdCBpMjk5ID0gaTI5MV9TMV9jMDsKCWZsb2F0IGkyODcgPSBpNTFfUzFfYzAoaTI5MiwgaTI5MywgaTI5NSwgaTI5NywgaTI5OSk7CglmbG9hdDIgaTMwNCA9IGkyODVfUzFfYzA7CglmbG9hdDIgaTMwNSA9IGkyODI7CglmbG9hdDIgaTMwNyA9IHVpMzAyX1MxX2MwOwoJZmxvYXQyIGkzMDkgPSB1aTMwM19TMV9jMDsKCWZsb2F0IGkzMTEgPSBpMjUzX1MxX2MwOwoJZmxvYXQgaTMwMSA9IGk1MV9TMV9jMChpMzA0LCBpMzA1LCBpMzA3LCBpMzA5LCBpMzExKTsKCWZsb2F0MiBpMzE3ID0gaTI4NV9TMV9jMDsKCWZsb2F0MiBpMzE4ID0gaTI4MjsKCWZsb2F0MiBpMzIwID0gdWkzMTRfUzFfYzA7CglmbG9hdDIgaTMyMiA9IHVpMzE1X1MxX2MwOwoJZmxvYXQgaTMyNCA9IGkzMTZfUzFfYzA7CglmbG9hdCBpMzEzID0gaTUxX1MxX2MwKGkzMTcsIGkzMTgsIGkzMjAsIGkzMjIsIGkzMjQpOwoJZmxvYXQgaTMyNiA9ICgoaTI4NyAqIGkyODcgKyBpMzAxKSAtIGkzMTMpICogaTEzMV9TMV9jMDsKCWZsb2F0IGkzMzkgPSBpMzM1X1MxX2MwICsgaTI4NF9TMV9jMCAqIGkzMjY7CglyZXR1cm4gaTExX1MxX2MwKGkzMzkpOwp9CmZsb2F0IGk0M19TMV9jMChmbG9hdDIgaTM4LCBmbG9hdDIgaTM5LCBmbG9hdCBpNDAsIGZsb2F0IGk0MSwgZmxvYXQgaTQyKSAKewoJZmxvYXQyIGkxNTIgPSBpMzg7CglmbG9hdDIgaTE1NCA9IGkzOTsKCWZsb2F0IGkxNTYgPSBpNDAgKyBpNDE7CglmbG9hdCBpMTU3ID0gaTQyOwoJZmxvYXQgaTE0OCA9IGkzNV9TMV9jMChpMTUyLCBpMTU0LCBpMTU2LCBpMTU3KTsKCWZsb2F0MiBpMTY1ID0gaTM4OwoJZmxvYXQyIGkxNjcgPSBpMzk7CglmbG9hdCBpMTY5ID0gbWF4KGk0MCAtIGk0MSwgaTYyX1MxX2MwKTsKCWZsb2F0IGkxNzAgPSBpNDI7CglmbG9hdCBpMTYwID0gaTM1X1MxX2MwKGkxNjUsIGkxNjcsIGkxNjksIGkxNzApOwoJZmxvYXQgaTE3NiA9IGkxNDggLSBpMTYwOwoJcmV0dXJuIGkxMV9TMV9jMChpMTc2KTsKfQpmbG9hdCBpMTdfUzFfYzAoZmxvYXQyIGkxNikgCnsKCWkxNiA9IGZyYWN0KGkxNiAqIGk3MF9TMV9jMCk7CglmbG9hdCBpODAgPSBkb3QoZmxvYXQyKGkxNi55LCBpMTYueCksIGkxNiArIGk3OF9TMV9jMCk7CglpMTYgKz0gZmxvYXQyKGk4MCwgaTgwKTsKCWZsb2F0IGk4NCA9IGkxNi54ICogaTE2Lnk7CglyZXR1cm4gKGZyYWN0KGk4NCAqIGk5NF9TMV9jMCkgKyBmcmFjdChpODQgKiBpOThfUzFfYzApKSAtIGk2M19TMV9jMDsKfQpmbG9hdCBpMjNfUzFfYzAoZmxvYXQgaTIwLCBmbG9hdCBpMjEsIGZsb2F0IGkyMikgCnsKCXJldHVybiBzdGVwKGkyMSwgaTIwKSAqIChpNjNfUzFfYzAgLSBzdGVwKGkyMiwgaTIwKSk7Cn0KZmxvYXQgaTU2X1MxX2MwKGZsb2F0MiBpNTQsIGZsb2F0IGk1NSkgCnsKCWZsb2F0MiBpMjIwID0gaTU0OwoJZmxvYXQgaTIxOSA9IGkxN19TMV9jMChpMjIwKTsKCWZsb2F0IGkyMjUgPSBpMjE5OwoJZmxvYXQgaTIyNyA9IGk2Ml9TMV9jMDsKCWZsb2F0IGkyMjggPSBpMjI0X1MxX2MwOwoJZmxvYXQgaTIyMyA9IGkyM19TMV9jMChpMjI1LCBpMjI3LCBpMjI4KTsKCWZsb2F0IGkyNDAgPSBpMjE5ICsgc2luKGkyMzFfUzFfYzAgKiAoaTU1ICsgaTIzM19TMV9jMCkpOwoJZmxvYXQgaTI0MSA9IGkyMzhfUzFfYzA7CglmbG9hdCBpMjQyID0gaTIzOV9TMV9jMDsKCWkyMjMgKz0gaTIzX1MxX2MwKGkyNDAsIGkyNDEsIGkyNDIpOwoJZmxvYXQgaTI1NSA9IGkyMTkgKyBzaW4oaTIzMV9TMV9jMCAqIChpNTUgKyBpMjQ4X1MxX2MwKSk7CglmbG9hdCBpMjU2ID0gaTI1M19TMV9jMDsKCWZsb2F0IGkyNTcgPSBpMjU0X1MxX2MwOwoJaTIyMyArPSBpMjNfUzFfYzAoaTI1NSwgaTI1NiwgaTI1Nyk7CglmbG9hdCBpMjY5ID0gaTIxOSArIHNpbihpMjMxX1MxX2MwICogKGk1NSArIGkyNjNfUzFfYzApKTsKCWZsb2F0IGkyNzAgPSBpMjY4X1MxX2MwOwoJZmxvYXQgaTI3MSA9IGkyMzNfUzFfYzA7CglpMjIzICs9IGkyM19TMV9jMChpMjY5LCBpMjcwLCBpMjcxKTsKCWZsb2F0IGkyNzUgPSBpMjIzOwoJcmV0dXJuIGkxMV9TMV9jMChpMjc1KSAqIGkyNzhfUzFfYzA7Cn0KaGFsZjQgcnVudGltZV9zaGFkZXJfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CglmbG9hdDIgX3RtcF8xX2Nvb3JkcyA9IHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwoJZmxvYXQ0IGkzNDYgPSBmbG9hdDQoX3RtcF8xX2Nvb3JkcywgMC4wLCAwLjApOwoJZmxvYXQ0IG9Db2xvcjsKCWZsb2F0MiBpMzQzID0gZmxvYXQyKGkzNDYueCwgaTM0Ni55KTsKCWZsb2F0MiBpMzQ5ID0gaTM0MyAqIHVpMzUxX1MxX2MwOwoJZmxvYXQyIGkzNTQgPSBpMzQ5IC0gbW9kKGkzNDMsIHVpMzU3X1MxX2MwKTsKCWZsb2F0IGkzNjEgPSB1aTM2M19TMV9jMCAqIHVpMzY1X1MxX2MwOwoJZmxvYXQyIGkzNjkgPSBpMzQ5OwoJZmxvYXQgaTM2OCA9IGk1OV9TMV9jMChpMzY5KTsKCWZsb2F0MiBpMzc3ID0gaTM0MzsKCWZsb2F0MiBpMzc5ID0gdWkzNzNfUzFfYzA7CglmbG9hdCBpMzgxID0gaTM2MTsKCWZsb2F0IGkzODMgPSBpMjI0X1MxX2MwICogdWkzNjNfUzFfYzA7CglmbG9hdCBpMzg0ID0gdWkzNzZfUzFfYzA7CglmbG9hdCBpMzcyID0gaTQzX1MxX2MwKGkzNzcsIGkzNzksIGkzODEsIGkzODMsIGkzODQpOwoJZmxvYXQyIGkzODkgPSBpMzU0OwoJZmxvYXQgaTM5MSA9IHVpMzg4X1MxX2MwOwoJZmxvYXQgaTM4NyA9ICgoaTU2X1MxX2MwKGkzODksIGkzOTEpICogaTM3MikgKiBpMzY4KSAqIHVpMzk4X1MxX2MwOwoJZmxvYXQyIGk0MDIgPSBpMzQzOwoJZmxvYXQyIGk0MDQgPSB1aTM3M19TMV9jMDsKCWZsb2F0IGk0MDYgPSBpMzYxOwoJZmxvYXQgaTQwOCA9IHVpMzc2X1MxX2MwOwoJZmxvYXQgaTQwMSA9IChpMzVfUzFfYzAoaTQwMiwgaTQwNCwgaTQwNiwgaTQwOCkgKiB1aTQxMV9TMV9jMCkgKiB1aTQxNV9TMV9jMC53OwoJZmxvYXQzIGk0MjYgPSBmbG9hdDModWk0MTVfUzFfYzAueCwgdWk0MTVfUzFfYzAueSwgdWk0MTVfUzFfYzAueikgKiBpNDAxOwoJZmxvYXQ0IGk0MjEgPSBmbG9hdDQoaTQyNi54LCBpNDI2LnksIGk0MjYueiwgaTQwMSk7CglmbG9hdDMgaTQzOCA9IGZsb2F0Myh1aTQzM19TMV9jMC54LCB1aTQzM19TMV9jMC55LCB1aTQzM19TMV9jMC56KSAqIHVpNDMzX1MxX2MwLnc7CglmbG9hdDQgaTQzMiA9IGZsb2F0NChpNDM4LngsIGk0MzgueSwgaTQzOC56LCB1aTQzM19TMV9jMC53KTsKCW9Db2xvciA9IG1peChpNDIxLCBpNDMyLCBmbG9hdDQoaTM4NywgaTM4NywgaTM4NywgaTM4NykpOwoJcmV0dXJuIGhhbGY0KGhhbGY0KG9Db2xvcikpOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMShoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gcnVudGltZV9zaGFkZXJfUzFfYzAoX2lucHV0KTsKfQpoYWxmNCBDaXJjbGVfUzIoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8yX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGQ7CglpZiAoaW50KDEpID09IGtJbnZlcnNlRmlsbEJXX1MyIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMikgCgl7CgkJZCA9IGhhbGYoKGxlbmd0aCgodWNpcmNsZV9TMi54eSAtIHNrX0ZyYWdDb29yZC54eSkgKiB1Y2lyY2xlX1MyLncpIC0gMS4wKSAqIHVjaXJjbGVfUzIueik7Cgl9CgllbHNlIAoJewoJCWQgPSBoYWxmKCgxLjAgLSBsZW5ndGgoKHVjaXJjbGVfUzIueHkgLSBza19GcmFnQ29vcmQueHkpICogdWNpcmNsZV9TMi53KSkgKiB1Y2lyY2xlX1MyLnopOwoJfQoJaWYgKGludCgxKSA9PSBrRmlsbEFBX1MyIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMikgCgl7CgkJcmV0dXJuIGhhbGY0KF9pbnB1dCAqIHNhdHVyYXRlKGQpKTsKCX0KCWVsc2UgCgl7CgkJcmV0dXJuIGhhbGY0KGQgPiAwLjUgPyBfaW5wdXQgOiBoYWxmNCgwLjApKTsKCX0KfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgY292ZXJhZ2UgPSB2Y292ZXJhZ2VfUzA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGhhbGYoY292ZXJhZ2UpKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IE1hdHJpeEVmZmVjdF9TMShvdXRwdXRDb2xvcl9TMCk7CgloYWxmNCBvdXRwdXRfUzI7CglvdXRwdXRfUzIgPSBDaXJjbGVfUzIob3V0cHV0Q292ZXJhZ2VfUzApOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dF9TMjsKCX0KfQoAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAHBvc2l0aW9uCAAAAGNvdmVyYWdlBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAEAAAAAAAAA","GEMAAAYAAEHAAAARC4EAAAQWBQAAAAAAAAAQAAAAIBCAAAGQAEAAAAAQAAAABAEQAEAAAAA":"CQAAAExTS1NUAQAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiBoYWxmMyBpblNoYWRvd1BhcmFtczsKb3V0IGhhbGYzIHZpblNoYWRvd1BhcmFtc19TMDsKb3V0IGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBSUmVjdFNoYWRvdwoJdmluU2hhZG93UGFyYW1zX1MwID0gaW5TaGFkb3dQYXJhbXM7Cgl2aW5Db2xvcl9TMCA9IGluQ29sb3I7CglmbG9hdDIgX3RtcF8wX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJc2tfUG9zaXRpb24gPSBfdG1wXzBfaW5Qb3NpdGlvbi54eTAxOwp9CgAAAAAjAgAAdW5pZm9ybSBzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7CmluIGhhbGYzIHZpblNoYWRvd1BhcmFtc19TMDsKaW4gaGFsZjQgdmluQ29sb3JfUzA7Cm91dCBoYWxmNCBza19GcmFnQ29sb3I7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBSUmVjdFNoYWRvdwoJaGFsZjMgc2hhZG93UGFyYW1zOwoJc2hhZG93UGFyYW1zID0gdmluU2hhZG93UGFyYW1zX1MwOwoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZpbkNvbG9yX1MwOwoJaGFsZiBkID0gbGVuZ3RoKHNoYWRvd1BhcmFtcy54eSk7CglmbG9hdDIgdXYgPSBmbG9hdDIoc2hhZG93UGFyYW1zLnogKiAoMS4wIC0gZCksIDAuNSk7CgloYWxmIGZhY3RvciA9IHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMCwgdXYpLjAwMHIuYTsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoZmFjdG9yKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAOAAAAaW5TaGFkb3dQYXJhbXMAAAEAAAAAAAAA"}}