3CABCCABBCCBBCABCCBBACBBCCABC{}aW1wb3J0IHRpbWUKaW1wb3J0IHNwcml0ZQoKCnNwcml0ZS5jbGVhckFsbFNwcml0ZXMoKQpfSGFub2ljb2xvciA9IFsnYmx1ZScsICdyZWQnLCAneWVsbG93JywgJ2dyZWVuJywgJ3B1cnBsZScsICdibGFjayddCl9IYW5vaSA9IFtbXSwgW10sIFtdXQpBID0gMApCID0gMQpDID0gMgpfbiA9IDMKX0hhbm9pQ29sdW1uID0gWwogICAgc3ByaXRlLlNwcml0ZSgnSGFub2lDb2x1bW4nLCAyMDAsIDMyMCksCiAgICBzcHJpdGUuU3ByaXRlKCdIYW5vaUNvbHVtbicsIDQwMCwgMzIwKSwKICAgIHNwcml0ZS5TcHJpdGUoJ0hhbm9pQ29sdW1uJywgNjAwLCAzMjApCl0KX0hhbm9pQ29sdW1uTnVtYmVyID0gWwogICAgc3ByaXRlLlRleHQoJ0EnLCAxOTAsIDEyMCksCiAgICBzcHJpdGUuVGV4dCgnQicsIDM5MCwgMTIwKSwKICAgIHNwcml0ZS5UZXh0KCdDJywgNTkwLCAxMjApCl0KX0hhbm9pQmxvY2sgPSBbXQpmb3IgaSBpbiByYW5nZSgwLCBfbiwgMSk6CiAgICBfSGFub2lCbG9jay5hcHBlbmQoc3ByaXRlLlNwcml0ZShfSGFub2ljb2xvcltpXSwgMjAwLCA0MDAtKF9uLWktMSkqMjcpKQogICAgX0hhbm9pQmxvY2tbaV0uc2V0U2NhbGUoMjUsIDMwKmkrMzApCiAgICBfSGFub2lbMF0uaW5zZXJ0KDAsIF9IYW5vaUJsb2NrW2ldKQpfc3RlcHRleHQgPSBzcHJpdGUuVGV4dCgn5q2l5pWw77yaMCcsIDMwLCAzMCkKX3N0ZXBzID0geydzdGVwcycgOiAwfQp0aW1lLnNsZWVwKDEpCmlmIGxlbihfSGFub2lbQV0pPjAgOgogICAgX0hhbm9pQmxvY2tNb3ZlZCA9IF9IYW5vaVtBXS5wb3AoKQogICAgaWYgbGVuKF9IYW5vaVtDXSkgPiAwIDoKICAgICAgICBfSGFub2lCbG9ja1N1cHByZXNzZWQgPSBfSGFub2lbQ10ucG9wKCkKICAgICAgICBpZiBfSGFub2lCbG9jay5pbmRleChfSGFub2lCbG9ja01vdmVkKSA+IF9IYW5vaUJsb2NrLmluZGV4KF9IYW5vaUJsb2NrU3VwcHJlc3NlZCk6CiAgICAgICAgICAgIHByaW50KCfpnZ7ms5Xnp7vliqjvvIHnqIvluo/mnInor6/vvIEnKQogICAgICAgICAgICBleGl0KCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBfSGFub2lbQ10uYXBwZW5kKF9IYW5vaUJsb2NrU3VwcHJlc3NlZCkKICAgIF9IYW5vaUJsb2NrTW92ZWQuc2xpZGVUbyhBKjIwMCsyMDAsIDE4MCwgMC4yKQogICAgX0hhbm9pQmxvY2tNb3ZlZC5zbGlkZVRvKEMqMjAwKzIwMCwgMTgwLCAwLjUpCiAgICBfSGFub2lCbG9ja01vdmVkLnNsaWRlVG8oQyoyMDArMjAwLCA0MDAtbGVuKF9IYW5vaVtDXSkqMjcsIDAuMikKICAgIF9IYW5vaVtDXS5hcHBlbmQoX0hhbm9pQmxvY2tNb3ZlZCkKICAgIF9zdGVwc1snc3RlcHMnXSArPSAxCiAgICBfc3RlcHRleHQuY2hhbmdlVGV4dCgn5q2l5pWw77yaJytzdHIoX3N0ZXBzWydzdGVwcyddKSkKZWxzZSA6CiAgICBwcmludCgn6Z2e5rOV56e75Yqo77yB56iL5bqP5pyJ6K+v77yBJykKICAgIGV4aXQoKQppZiBsZW4oX0hhbm9pW0FdKT4wIDoKICAgIF9IYW5vaUJsb2NrTW92ZWQgPSBfSGFub2lbQV0ucG9wKCkKICAgIGlmIGxlbihfSGFub2lbQl0pID4gMCA6CiAgICAgICAgX0hhbm9pQmxvY2tTdXBwcmVzc2VkID0gX0hhbm9pW0JdLnBvcCgpCiAgICAgICAgaWYgX0hhbm9pQmxvY2suaW5kZXgoX0hhbm9pQmxvY2tNb3ZlZCkgPiBfSGFub2lCbG9jay5pbmRleChfSGFub2lCbG9ja1N1cHByZXNzZWQpOgogICAgICAgICAgICBwcmludCgn6Z2e5rOV56e75Yqo77yB56iL5bqP5pyJ6K+v77yBJykKICAgICAgICAgICAgZXhpdCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX0hhbm9pW0JdLmFwcGVuZChfSGFub2lCbG9ja1N1cHByZXNzZWQpCiAgICBfSGFub2lCbG9ja01vdmVkLnNsaWRlVG8oQSoyMDArMjAwLCAxODAsIDAuMikKICAgIF9IYW5vaUJsb2NrTW92ZWQuc2xpZGVUbyhCKjIwMCsyMDAsIDE4MCwgMC41KQogICAgX0hhbm9pQmxvY2tNb3ZlZC5zbGlkZVRvKEIqMjAwKzIwMCwgNDAwLWxlbihfSGFub2lbQl0pKjI3LCAwLjIpCiAgICBfSGFub2lbQl0uYXBwZW5kKF9IYW5vaUJsb2NrTW92ZWQpCiAgICBfc3RlcHNbJ3N0ZXBzJ10gKz0gMQogICAgX3N0ZXB0ZXh0LmNoYW5nZVRleHQoJ+atpeaVsO+8micrc3RyKF9zdGVwc1snc3RlcHMnXSkpCmVsc2UgOgogICAgcHJpbnQoJ+mdnuazleenu+WKqO+8geeoi+W6j+acieivr++8gScpCiAgICBleGl0KCkKaWYgbGVuKF9IYW5vaVtDXSk+MCA6CiAgICBfSGFub2lCbG9ja01vdmVkID0gX0hhbm9pW0NdLnBvcCgpCiAgICBpZiBsZW4oX0hhbm9pW0JdKSA+IDAgOgogICAgICAgIF9IYW5vaUJsb2NrU3VwcHJlc3NlZCA9IF9IYW5vaVtCXS5wb3AoKQogICAgICAgIGlmIF9IYW5vaUJsb2NrLmluZGV4KF9IYW5vaUJsb2NrTW92ZWQpID4gX0hhbm9pQmxvY2suaW5kZXgoX0hhbm9pQmxvY2tTdXBwcmVzc2VkKToKICAgICAgICAgICAgcHJpbnQoJ+mdnuazleenu+WKqO+8geeoi+W6j+acieivr++8gScpCiAgICAgICAgICAgIGV4aXQoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIF9IYW5vaVtCXS5hcHBlbmQoX0hhbm9pQmxvY2tTdXBwcmVzc2VkKQogICAgX0hhbm9pQmxvY2tNb3ZlZC5zbGlkZVRvKEMqMjAwKzIwMCwgMTgwLCAwLjIpCiAgICBfSGFub2lCbG9ja01vdmVkLnNsaWRlVG8oQioyMDArMjAwLCAxODAsIDAuNSkKICAgIF9IYW5vaUJsb2NrTW92ZWQuc2xpZGVUbyhCKjIwMCsyMDAsIDQwMC1sZW4oX0hhbm9pW0JdKSoyNywgMC4yKQogICAgX0hhbm9pW0JdLmFwcGVuZChfSGFub2lCbG9ja01vdmVkKQogICAgX3N0ZXBzWydzdGVwcyddICs9IDEKICAgIF9zdGVwdGV4dC5jaGFuZ2VUZXh0KCfmraXmlbDvvJonK3N0cihfc3RlcHNbJ3N0ZXBzJ10pKQplbHNlIDoKICAgIHByaW50KCfpnZ7ms5Xnp7vliqjvvIHnqIvluo/mnInor6/vvIEnKQogICAgZXhpdCgpCmlmIGxlbihfSGFub2lbQV0pPjAgOgogICAgX0hhbm9pQmxvY2tNb3ZlZCA9IF9IYW5vaVtBXS5wb3AoKQogICAgaWYgbGVuKF9IYW5vaVtDXSkgPiAwIDoKICAgICAgICBfSGFub2lCbG9ja1N1cHByZXNzZWQgPSBfSGFub2lbQ10ucG9wKCkKICAgICAgICBpZiBfSGFub2lCbG9jay5pbmRleChfSGFub2lCbG9ja01vdmVkKSA+IF9IYW5vaUJsb2NrLmluZGV4KF9IYW5vaUJsb2NrU3VwcHJlc3NlZCk6CiAgICAgICAgICAgIHByaW50KCfpnZ7ms5Xnp7vliqjvvIHnqIvluo/mnInor6/vvIEnKQogICAgICAgICAgICBleGl0KCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBfSGFub2lbQ10uYXBwZW5kKF9IYW5vaUJsb2NrU3VwcHJlc3NlZCkKICAgIF9IYW5vaUJsb2NrTW92ZWQuc2xpZGVUbyhBKjIwMCsyMDAsIDE4MCwgMC4yKQogICAgX0hhbm9pQmxvY2tNb3ZlZC5zbGlkZVRvKEMqMjAwKzIwMCwgMTgwLCAwLjUpCiAgICBfSGFub2lCbG9ja01vdmVkLnNsaWRlVG8oQyoyMDArMjAwLCA0MDAtbGVuKF9IYW5vaVtDXSkqMjcsIDAuMikKICAgIF9IYW5vaVtDXS5hcHBlbmQoX0hhbm9pQmxvY2tNb3ZlZCkKICAgIF9zdGVwc1snc3RlcHMnXSArPSAxCiAgICBfc3RlcHRleHQuY2hhbmdlVGV4dCgn5q2l5pWw77yaJytzdHIoX3N0ZXBzWydzdGVwcyddKSkKZWxzZSA6CiAgICBwcmludCgn6Z2e5rOV56e75Yqo77yB56iL5bqP5pyJ6K+v77yBJykKICAgIGV4aXQoKQppZiBsZW4oX0hhbm9pW0JdKT4wIDoKICAgIF9IYW5vaUJsb2NrTW92ZWQgPSBfSGFub2lbQl0ucG9wKCkKICAgIGlmIGxlbihfSGFub2lbQV0pID4gMCA6CiAgICAgICAgX0hhbm9pQmxvY2tTdXBwcmVzc2VkID0gX0hhbm9pW0FdLnBvcCgpCiAgICAgICAgaWYgX0hhbm9pQmxvY2suaW5kZXgoX0hhbm9pQmxvY2tNb3ZlZCkgPiBfSGFub2lCbG9jay5pbmRleChfSGFub2lCbG9ja1N1cHByZXNzZWQpOgogICAgICAgICAgICBwcmludCgn6Z2e5rOV56e75Yqo77yB56iL5bqP5pyJ6K+v77yBJykKICAgICAgICAgICAgZXhpdCgpCiAgICAgICAgZWxzZToKICAgICAgICAgICAgX0hhbm9pW0FdLmFwcGVuZChfSGFub2lCbG9ja1N1cHByZXNzZWQpCiAgICBfSGFub2lCbG9ja01vdmVkLnNsaWRlVG8oQioyMDArMjAwLCAxODAsIDAuMikKICAgIF9IYW5vaUJsb2NrTW92ZWQuc2xpZGVUbyhBKjIwMCsyMDAsIDE4MCwgMC41KQogICAgX0hhbm9pQmxvY2tNb3ZlZC5zbGlkZVRvKEEqMjAwKzIwMCwgNDAwLWxlbihfSGFub2lbQV0pKjI3LCAwLjIpCiAgICBfSGFub2lbQV0uYXBwZW5kKF9IYW5vaUJsb2NrTW92ZWQpCiAgICBfc3RlcHNbJ3N0ZXBzJ10gKz0gMQogICAgX3N0ZXB0ZXh0LmNoYW5nZVRleHQoJ+atpeaVsO+8micrc3RyKF9zdGVwc1snc3RlcHMnXSkpCmVsc2UgOgogICAgcHJpbnQoJ+mdnuazleenu+WKqO+8geeoi+W6j+acieivr++8gScpCiAgICBleGl0KCkKaWYgbGVuKF9IYW5vaVtCXSk+MCA6CiAgICBfSGFub2lCbG9ja01vdmVkID0gX0hhbm9pW0JdLnBvcCgpCiAgICBpZiBsZW4oX0hhbm9pW0NdKSA+IDAgOgogICAgICAgIF9IYW5vaUJsb2NrU3VwcHJlc3NlZCA9IF9IYW5vaVtDXS5wb3AoKQogICAgICAgIGlmIF9IYW5vaUJsb2NrLmluZGV4KF9IYW5vaUJsb2NrTW92ZWQpID4gX0hhbm9pQmxvY2suaW5kZXgoX0hhbm9pQmxvY2tTdXBwcmVzc2VkKToKICAgICAgICAgICAgcHJpbnQoJ+mdnuazleenu+WKqO+8geeoi+W6j+acieivr++8gScpCiAgICAgICAgICAgIGV4aXQoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIF9IYW5vaVtDXS5hcHBlbmQoX0hhbm9pQmxvY2tTdXBwcmVzc2VkKQogICAgX0hhbm9pQmxvY2tNb3ZlZC5zbGlkZVRvKEIqMjAwKzIwMCwgMTgwLCAwLjIpCiAgICBfSGFub2lCbG9ja01vdmVkLnNsaWRlVG8oQyoyMDArMjAwLCAxODAsIDAuNSkKICAgIF9IYW5vaUJsb2NrTW92ZWQuc2xpZGVUbyhDKjIwMCsyMDAsIDQwMC1sZW4oX0hhbm9pW0NdKSoyNywgMC4yKQogICAgX0hhbm9pW0NdLmFwcGVuZChfSGFub2lCbG9ja01vdmVkKQogICAgX3N0ZXBzWydzdGVwcyddICs9IDEKICAgIF9zdGVwdGV4dC5jaGFuZ2VUZXh0KCfmraXmlbDvvJonK3N0cihfc3RlcHNbJ3N0ZXBzJ10pKQplbHNlIDoKICAgIHByaW50KCfpnZ7ms5Xnp7vliqjvvIHnqIvluo/mnInor6/vvIEnKQogICAgZXhpdCgpCmlmIGxlbihfSGFub2lbQV0pPjAgOgogICAgX0hhbm9pQmxvY2tNb3ZlZCA9IF9IYW5vaVtBXS5wb3AoKQogICAgaWYgbGVuKF9IYW5vaVtDXSkgPiAwIDoKICAgICAgICBfSGFub2lCbG9ja1N1cHByZXNzZWQgPSBfSGFub2lbQ10ucG9wKCkKICAgICAgICBpZiBfSGFub2lCbG9jay5pbmRleChfSGFub2lCbG9ja01vdmVkKSA+IF9IYW5vaUJsb2NrLmluZGV4KF9IYW5vaUJsb2NrU3VwcHJlc3NlZCk6CiAgICAgICAgICAgIHByaW50KCfpnZ7ms5Xnp7vliqjvvIHnqIvluo/mnInor6/vvIEnKQogICAgICAgICAgICBleGl0KCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBfSGFub2lbQ10uYXBwZW5kKF9IYW5vaUJsb2NrU3VwcHJlc3NlZCkKICAgIF9IYW5vaUJsb2NrTW92ZWQuc2xpZGVUbyhBKjIwMCsyMDAsIDE4MCwgMC4yKQogICAgX0hhbm9pQmxvY2tNb3ZlZC5zbGlkZVRvKEMqMjAwKzIwMCwgMTgwLCAwLjUpCiAgICBfSGFub2lCbG9ja01vdmVkLnNsaWRlVG8oQyoyMDArMjAwLCA0MDAtbGVuKF9IYW5vaVtDXSkqMjcsIDAuMikKICAgIF9IYW5vaVtDXS5hcHBlbmQoX0hhbm9pQmxvY2tNb3ZlZCkKICAgIF9zdGVwc1snc3RlcHMnXSArPSAxCiAgICBfc3RlcHRleHQuY2hhbmdlVGV4dCgn5q2l5pWw77yaJytzdHIoX3N0ZXBzWydzdGVwcyddKSkKZWxzZSA6CiAgICBwcmludCgn6Z2e5rOV56e75Yqo77yB56iL5bqP5pyJ6K+v77yBJykKICAgIGV4aXQoKQo=