Issue #4257 has been updated by tadayoshi funaba. File switch_hitter.patch4 added i'm planning to apply this change within a couple of weeks. ---------------------------------------- http://redmine.ruby-lang.org/issues/show/4257 ---------------------------------------- http://redmine.ruby-lang.org SW5kZXg6IGxpYi9kYXRlLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGxpYi9kYXRlLnJiCShyZXZpc2lvbiAzMDg1NikKKysrIGxpYi9kYXRlLnJi CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogIwotIyBkYXRlLnJi IC0gZGF0ZSBhbmQgdGltZSBsaWJyYXJ5CisjIGRhdGUucmIgPHN3aXRjaF9o aXR0ZXI+IC0gZGF0ZSBhbmQgdGltZSBsaWJyYXJ5CiAjCiAjIEF1dGhvcjog VGFkYXlvc2hpIEZ1bmFiYSAxOTk4LTIwMTEKICMKQEAgLTI4MCw2ICsyODAs MTUgQEAKICAgICAgIGVuZAogICAgIGVuZAogCisgICAgZGVmIHRvX2YKKyAg ICAgIHJldHVybiAwIGlmIEBkID09IDAKKyAgICAgIGlmIEBkID4gMAorCUZs b2F0OjpJTkZJTklUWQorICAgICAgZWxzZQorCS1GbG9hdDo6SU5GSU5JVFkK KyAgICAgIGVuZAorICAgIGVuZAorCiAgIGVuZAogCiAgICMgVGhlIEp1bGlh biBEYXkgTnVtYmVyIG9mIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtIGZv ciBJdGFseQpAQCAtNDQzLDggKzQ1MiwxNCBAQAogICAgICMgW2NvbW1lcmNp YWxfeWVhciwgd2Vla19vZl95ZWFyLCBkYXlfb2Zfd2Vla10KICAgICBkZWYg amRfdG9fY29tbWVyY2lhbChqZCwgc2c9R1JFR09SSUFOKSAjIDpub2RvYzoK ICAgICAgIGEgPSBqZF90b19jaXZpbChqZCAtIDMsIHNnKVswXQotICAgICAg eSA9IGlmIGpkID49IGNvbW1lcmNpYWxfdG9famQoYSArIDEsIDEsIDEsIHNn KSB0aGVuIGEgKyAxIGVsc2UgYSBlbmQKLSAgICAgIHcgPSAxICsgKChqZCAt IGNvbW1lcmNpYWxfdG9famQoeSwgMSwgMSwgc2cpKSAvIDcpLmZsb29yCisg ICAgICBqID0gY29tbWVyY2lhbF90b19qZChhICsgMSwgMSwgMSwgc2cpCisg ICAgICBpZiBqZCA+PSBqCisJeSA9IGEgKyAxCisgICAgICBlbHNlCisJaiA9 IGNvbW1lcmNpYWxfdG9famQoYSwgMSwgMSwgc2cpCisJeSA9IGEKKyAgICAg IGVuZAorICAgICAgdyA9IDEgKyAoKGpkIC0gaikgLyA3KS5mbG9vcgogICAg ICAgZCA9IChqZCArIDEpICUgNwogICAgICAgZCA9IDcgaWYgZCA9PSAwCiAg ICAgICByZXR1cm4geSwgdywgZApAQCAtNzE5LDI2ICs3MzQsMzEgQEAKICAg ZGVmIHNlbGYuZ3JlZ29yaWFuX2xlYXA/ICh5KSB5ICUgNCA9PSAwICYmIHkg JSAxMDAgIT0gMCB8fCB5ICUgNDAwID09IDAgZW5kCiAKICAgY2xhc3MgPDwg c2VsZjsgYWxpYXNfbWV0aG9kIDpsZWFwPywgOmdyZWdvcmlhbl9sZWFwPyBl bmQKLSAgY2xhc3MgPDwgc2VsZjsgYWxpYXNfbWV0aG9kIDpuZXchLCA6bmV3 IGVuZAogCi0gIGRlZiBzZWxmLnZhbGlkX2pkPyAoamQsIHNnPUlUQUxZKQor ICBkZWYgc2VsZi52YWxpZF9qZF9yPyAoamQsIHNnPUlUQUxZKQogICAgICEh X3ZhbGlkX2pkPyhqZCwgc2cpCiAgIGVuZAogCi0gIGRlZiBzZWxmLnZhbGlk X29yZGluYWw/ICh5LCBkLCBzZz1JVEFMWSkKKyAgcHJpdmF0ZV9jbGFzc19t ZXRob2QgOnZhbGlkX2pkX3I/CisKKyAgZGVmIHNlbGYudmFsaWRfb3JkaW5h bF9yPyAoeSwgZCwgc2c9SVRBTFkpCiAgICAgISFfdmFsaWRfb3JkaW5hbD8o eSwgZCwgc2cpCiAgIGVuZAogCi0gIGRlZiBzZWxmLnZhbGlkX2NpdmlsPyAo eSwgbSwgZCwgc2c9SVRBTFkpCisgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDp2 YWxpZF9vcmRpbmFsX3I/CisKKyAgZGVmIHNlbGYudmFsaWRfY2l2aWxfcj8g KHksIG0sIGQsIHNnPUlUQUxZKQogICAgICEhX3ZhbGlkX2NpdmlsPyh5LCBt LCBkLCBzZykKICAgZW5kCiAKLSAgY2xhc3MgPDwgc2VsZjsgYWxpYXNfbWV0 aG9kIDp2YWxpZF9kYXRlPywgOnZhbGlkX2NpdmlsPyBlbmQKKyAgcHJpdmF0 ZV9jbGFzc19tZXRob2QgOnZhbGlkX2NpdmlsX3I/CiAKLSAgZGVmIHNlbGYu dmFsaWRfY29tbWVyY2lhbD8gKHksIHcsIGQsIHNnPUlUQUxZKQorICBkZWYg c2VsZi52YWxpZF9jb21tZXJjaWFsX3I/ICh5LCB3LCBkLCBzZz1JVEFMWSkK ICAgICAhIV92YWxpZF9jb21tZXJjaWFsPyh5LCB3LCBkLCBzZykKICAgZW5k CiAKKyAgcHJpdmF0ZV9jbGFzc19tZXRob2QgOnZhbGlkX2NvbW1lcmNpYWxf cj8KKwogICBkZWYgc2VsZi52YWxpZF93ZWVrbnVtPyAoeSwgdywgZCwgZiwg c2c9SVRBTFkpICMgOm5vZG9jOgogICAgICEhX3ZhbGlkX3dlZWtudW0/KHks IHcsIGQsIGYsIHNnKQogICBlbmQKQEAgLTc1NywxNiArNzc3LDI4IEBACiAK ICAgcHJpdmF0ZV9jbGFzc19tZXRob2QgOnZhbGlkX3RpbWU/CiAKKyAgZGVm IHNlbGYubmV3IShhamQ9MCwgb2Y9MCwgc2c9SVRBTFkpCisgICAgamQsIGRm ID0gYWpkX3RvX2pkKGFqZCwgMCkKKyAgICBpZiAhKEZpeG51bSA9PT0gamQp IHx8CisJamQgPCBzZyB8fCBkZiAhPTAgfHwgb2YgIT0gMCB8fAorICAgICAg ICBqZCA8IC0zMjcgfHwgamQgPiAzNjY5NjM5MjUKKyAgICAgIHJldHVybiBu ZXdfciEoYWpkLCBvZiwgc2cpCisgICAgZW5kCisgICAgbmV3X2whKGpkLCBz ZykKKyAgZW5kCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0ZSBvYmplY3QgZnJv bSBhIEp1bGlhbiBEYXkgTnVtYmVyLgogICAjCiAgICMgK2pkKyBpcyB0aGUg SnVsaWFuIERheSBOdW1iZXI7IGlmIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1 bHRzIHRvCiAgICMgMC4KICAgIyArc2crIHNwZWNpZmllcyB0aGUgRGF5IG9m IENhbGVuZGFyIFJlZm9ybS4KLSAgZGVmIHNlbGYuamQoamQ9MCwgc2c9SVRB TFkpCisgIGRlZiBzZWxmLmpkX3IoamQ9MCwgc2c9SVRBTFkpICMgOm5vZG9j OgogICAgIGpkID0gX3ZhbGlkX2pkPyhqZCwgc2cpCi0gICAgbmV3IShqZF90 b19hamQoamQsIDAsIDApLCAwLCBzZykKKyAgICBuZXdfciEoamRfdG9fYWpk KGpkLCAwLCAwKSwgMCwgc2cpCiAgIGVuZAogCisgIHByaXZhdGVfY2xhc3Nf bWV0aG9kIDpqZF9yCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0ZSBvYmplY3Qg ZnJvbSBhbiBPcmRpbmFsIERhdGUsIHNwZWNpZmllZAogICAjIGJ5IHllYXIg K3krIGFuZCBkYXktb2YteWVhciArZCsuICtkKyBjYW4gYmUgbmVnYXRpdmUs CiAgICMgaW4gd2hpY2ggaXQgY291bnRzIGJhY2t3YXJkcyBmcm9tIHRoZSBl bmQgb2YgdGhlIHllYXIuCkBAIC03NzcsMTMgKzgwOSwxNSBAQAogICAjIE51 bWJlciBkYXkgMC4KICAgIwogICAjICtzZysgc3BlY2lmaWVzIHRoZSBEYXkg b2YgQ2FsZW5kYXIgUmVmb3JtLgotICBkZWYgc2VsZi5vcmRpbmFsKHk9LTQ3 MTIsIGQ9MSwgc2c9SVRBTFkpCisgIGRlZiBzZWxmLm9yZGluYWxfcih5PS00 NzEyLCBkPTEsIHNnPUlUQUxZKSAjIDpub2RvYzoKICAgICB1bmxlc3MgamQg PSBfdmFsaWRfb3JkaW5hbD8oeSwgZCwgc2cpCiAgICAgICByYWlzZSBBcmd1 bWVudEVycm9yLCAnaW52YWxpZCBkYXRlJwogICAgIGVuZAotICAgIG5ldyEo amRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCisgICAgbmV3X3IhKGpkX3Rv X2FqZChqZCwgMCwgMCksIDAsIHNnKQogICBlbmQKIAorICBwcml2YXRlX2Ns YXNzX21ldGhvZCA6b3JkaW5hbF9yCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0 ZSBvYmplY3QgZm9yIHRoZSBDaXZpbCBEYXRlIHNwZWNpZmllZCBieQogICAj IHllYXIgK3krLCBtb250aCArbSssIGFuZCBkYXktb2YtbW9udGggK2QrLgog ICAjCkBAIC03OTcsMTQgKzgzMSwxNCBAQAogICAjIEp1bGlhbiBEYXkgTnVt YmVyIGRheSAwLgogICAjCiAgICMgK3NnKyBzcGVjaWZpZXMgdGhlIERheSBv ZiBDYWxlbmRhciBSZWZvcm0uCi0gIGRlZiBzZWxmLmNpdmlsKHk9LTQ3MTIs IG09MSwgZD0xLCBzZz1JVEFMWSkKKyAgZGVmIHNlbGYuY2l2aWxfcih5PS00 NzEyLCBtPTEsIGQ9MSwgc2c9SVRBTFkpICMgOm5vZG9jOgogICAgIHVubGVz cyBqZCA9IF92YWxpZF9jaXZpbD8oeSwgbSwgZCwgc2cpCiAgICAgICByYWlz ZSBBcmd1bWVudEVycm9yLCAnaW52YWxpZCBkYXRlJwogICAgIGVuZAotICAg IG5ldyEoamRfdG9fYWpkKGpkLCAwLCAwKSwgMCwgc2cpCisgICAgbmV3X3Ih KGpkX3RvX2FqZChqZCwgMCwgMCksIDAsIHNnKQogICBlbmQKIAotICBjbGFz cyA8PCBzZWxmOyBhbGlhc19tZXRob2QgOm5ldywgOmNpdmlsIGVuZAorICBw cml2YXRlX2NsYXNzX21ldGhvZCA6Y2l2aWxfcgogCiAgICMgQ3JlYXRlIGEg bmV3IERhdGUgb2JqZWN0IGZvciB0aGUgQ29tbWVyY2lhbCBEYXRlIHNwZWNp ZmllZCBieQogICAjIHllYXIgK3krLCB3ZWVrLW9mLXllYXIgK3crLCBhbmQg ZGF5LW9mLXdlZWsgK2QrLgpAQCAtODIwLDEzICs4NTQsMTUgQEAKICAgIyBK dWxpYW4gRGF5IE51bWJlciBkYXkgMC4KICAgIwogICAjICtzZysgc3BlY2lm aWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtLgotICBkZWYgc2VsZi5j b21tZXJjaWFsKHk9LTQ3MTIsIHc9MSwgZD0xLCBzZz1JVEFMWSkKKyAgZGVm IHNlbGYuY29tbWVyY2lhbF9yKHk9LTQ3MTIsIHc9MSwgZD0xLCBzZz1JVEFM WSkgIyA6bm9kb2M6CiAgICAgdW5sZXNzIGpkID0gX3ZhbGlkX2NvbW1lcmNp YWw/KHksIHcsIGQsIHNnKQogICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwg J2ludmFsaWQgZGF0ZScKICAgICBlbmQKLSAgICBuZXchKGpkX3RvX2FqZChq ZCwgMCwgMCksIDAsIHNnKQorICAgIG5ld19yIShqZF90b19hamQoamQsIDAs IDApLCAwLCBzZykKICAgZW5kCiAKKyAgcHJpdmF0ZV9jbGFzc19tZXRob2Qg OmNvbW1lcmNpYWxfcgorCiAgIGRlZiBzZWxmLndlZWtudW0oeT0tNDcxMiwg dz0wLCBkPTEsIGY9MCwgc2c9SVRBTFkpCiAgICAgdW5sZXNzIGpkID0gX3Zh bGlkX3dlZWtudW0/KHksIHcsIGQsIGYsIHNnKQogICAgICAgcmFpc2UgQXJn dW1lbnRFcnJvciwgJ2ludmFsaWQgZGF0ZScKQEAgLTEwOTksNyArMTEzNSw3 IEBACiAJICBhbGlhc19tZXRob2QgOl9fI3tpZC5vYmplY3RfaWR9X18sIDoj e2lkLnRvX3N9CiAJICBwcml2YXRlIDpfXyN7aWQub2JqZWN0X2lkfV9fCiAJ ICBkZWYgI3tpZC50b19zfSgqYXJncykKLQkgICAgQF9fY2FfX1sje2lkLm9i amVjdF9pZH1dIHx8PSBfXyN7aWQub2JqZWN0X2lkfV9fKCphcmdzKQorCSAg ICBfX2NhX19bI3tpZC5vYmplY3RfaWR9XSB8fD0gX18je2lkLm9iamVjdF9p ZH1fXygqYXJncykKIAkgIGVuZAogCWVuZDsKICAgICAgIGVuZApAQCAtMTEw OSw5NiArMTE0NSw2OSBAQAogCiAgIGVuZAogCi0gICMgKk5PVEUqIHRoaXMg aXMgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBtZXRob2QgbmV3ISgpLiAg SWYKLSAgIyB5b3UgYXJlIHJlYWRpbmcgdGhpcyBhcyB0aGUgZG9jdW1lbnRh dGlvbiBmb3IgbmV3KCksIHRoYXQgaXMKLSAgIyBiZWNhdXNlIHJkb2MgZG9l c24ndCBmdWxseSBzdXBwb3J0IHRoZSBhbGlhc2luZyBvZiB0aGUKLSAgIyBp bml0aWFsaXplKCkgbWV0aG9kLgotICAjIG5ldygpIGlzIGluCi0gICMgZmFj dCBhbiBhbGlhcyBmb3IgI2NpdmlsKCk6IHJlYWQgdGhlIGRvY3VtZW50YXRp b24gZm9yIHRoYXQKLSAgIyBtZXRob2QgaW5zdGVhZC4KLSAgIwotICAjIENy ZWF0ZSBhIG5ldyBEYXRlIG9iamVjdC4KLSAgIwotICAjICthamQrIGlzIHRo ZSBBc3Ryb25vbWljYWwgSnVsaWFuIERheSBOdW1iZXIuCi0gICMgK29mKyBp cyB0aGUgb2Zmc2V0IGZyb20gVVRDIGFzIGEgZnJhY3Rpb24gb2YgYSBkYXku Ci0gICMgQm90aCBkZWZhdWx0IHRvIDAuCi0gICMKLSAgIyArc2crIHNwZWNp ZmllcyB0aGUgRGF5IG9mIENhbGVuZGFyIFJlZm9ybSB0byB1c2UgZm9yIHRo aXMKLSAgIyBEYXRlIG9iamVjdC4KLSAgIwotICAjIFVzaW5nIG9uZSBvZiB0 aGUgZmFjdG9yeSBtZXRob2RzIHN1Y2ggYXMgRGF0ZTo6Y2l2aWwgaXMKLSAg IyBnZW5lcmFsbHkgZWFzaWVyIGFuZCBzYWZlci4KLSAgZGVmIGluaXRpYWxp emUoYWpkPTAsIG9mPTAsIHNnPUlUQUxZKQotICAgIEBhamQsIEBvZiwgQHNn ID0gYWpkLCBvZiwgc2cKLSAgICBAX19jYV9fID0ge30KLSAgZW5kCi0KLSAg IyBHZXQgdGhlIGRhdGUgYXMgYW4gQXN0cm9ub21pY2FsIEp1bGlhbiBEYXkg TnVtYmVyLgotICBkZWYgYWpkKCkgQGFqZCBlbmQKLQogICAjIEdldCB0aGUg ZGF0ZSBhcyBhbiBBc3Ryb25vbWljYWwgTW9kaWZpZWQgSnVsaWFuIERheSBO dW1iZXIuCi0gIGRlZiBhbWpkKCkgYWpkX3RvX2FtamQoQGFqZCkgZW5kCisg IGRlZiBhbWpkX3IoKSBhamRfdG9fYW1qZChhamQpIGVuZAogCi0gIG9uY2Ug OmFtamQKKyAgb25jZSA6YW1qZF9yCiAKLSAgZGVmIGRheW51bSgpIGFqZF90 b19qZChAYWpkLCBAb2YpIGVuZAorICBkZWYgZGF5bnVtKCkgYWpkX3RvX2pk KGFqZCwgb2Zmc2V0KSBlbmQKIAogICBvbmNlIDpkYXludW0KICAgcHJpdmF0 ZSA6ZGF5bnVtCiAKICAgIyBHZXQgdGhlIGRhdGUgYXMgYSBKdWxpYW4gRGF5 IE51bWJlci4KLSAgZGVmIGpkKCkgZGF5bnVtWzBdIGVuZAorICBkZWYgamRf cigpIGRheW51bVswXSBlbmQgIyA6bm9kb2M6CiAKICAgIyBHZXQgYW55IGZy YWN0aW9uYWwgZGF5IHBhcnQgb2YgdGhlIGRhdGUuCi0gIGRlZiBkYXlfZnJh Y3Rpb24oKSBkYXludW1bMV0gZW5kCisgIGRlZiBkYXlfZnJhY3Rpb25fcigp IGRheW51bVsxXSBlbmQgIyA6bm9kb2M6CiAKICAgIyBHZXQgdGhlIGRhdGUg YXMgYSBNb2RpZmllZCBKdWxpYW4gRGF5IE51bWJlci4KLSAgZGVmIG1qZCgp IGpkX3RvX21qZChqZCkgZW5kCisgIGRlZiBtamRfcigpIGpkX3RvX21qZChq ZCkgZW5kICMgOm5vZG9jOgogCiAgICMgR2V0IHRoZSBkYXRlIGFzIHRoZSBu dW1iZXIgb2YgZGF5cyBzaW5jZSB0aGUgRGF5IG9mIENhbGVuZGFyCiAgICMg UmVmb3JtIChpbiBJdGFseSBhbmQgdGhlIENhdGhvbGljIGNvdW50cmllcyku Ci0gIGRlZiBsZCgpIGpkX3RvX2xkKGpkKSBlbmQKKyAgZGVmIGxkX3IoKSBq ZF90b19sZChqZCkgZW5kICMgOm5vZG9jOgogCi0gIG9uY2UgOmpkLCA6ZGF5 X2ZyYWN0aW9uLCA6bWpkLCA6bGQKKyAgb25jZSA6amRfciwgOmRheV9mcmFj dGlvbl9yLCA6bWpkX3IsIDpsZF9yCisgIHByaXZhdGUgOmpkX3IsIDpkYXlf ZnJhY3Rpb25fciwgOm1qZF9yLCA6bGRfcgogCiAgICMgR2V0IHRoZSBkYXRl IGFzIGEgQ2l2aWwgRGF0ZSwgW3llYXIsIG1vbnRoLCBkYXlfb2ZfbW9udGhd Ci0gIGRlZiBjaXZpbCgpIGpkX3RvX2NpdmlsKGpkLCBAc2cpIGVuZCAjIDpu b2RvYzoKKyAgZGVmIGNpdmlsKCkgamRfdG9fY2l2aWwoamQsIHN0YXJ0KSBl bmQgIyA6bm9kb2M6CiAKICAgIyBHZXQgdGhlIGRhdGUgYXMgYW4gT3JkaW5h bCBEYXRlLCBbeWVhciwgZGF5X29mX3llYXJdCi0gIGRlZiBvcmRpbmFsKCkg amRfdG9fb3JkaW5hbChqZCwgQHNnKSBlbmQgIyA6bm9kb2M6CisgIGRlZiBv cmRpbmFsKCkgamRfdG9fb3JkaW5hbChqZCwgc3RhcnQpIGVuZCAjIDpub2Rv YzoKIAogICAjIEdldCB0aGUgZGF0ZSBhcyBhIENvbW1lcmNpYWwgRGF0ZSwg W3llYXIsIHdlZWtfb2ZfeWVhciwgZGF5X29mX3dlZWtdCi0gIGRlZiBjb21t ZXJjaWFsKCkgamRfdG9fY29tbWVyY2lhbChqZCwgQHNnKSBlbmQgIyA6bm9k b2M6CisgIGRlZiBjb21tZXJjaWFsKCkgamRfdG9fY29tbWVyY2lhbChqZCwg c3RhcnQpIGVuZCAjIDpub2RvYzoKIAotICBkZWYgd2Vla251bTAoKSBqZF90 b193ZWVrbnVtKGpkLCAwLCBAc2cpIGVuZCAjIDpub2RvYzoKLSAgZGVmIHdl ZWtudW0xKCkgamRfdG9fd2Vla251bShqZCwgMSwgQHNnKSBlbmQgIyA6bm9k b2M6CisgIGRlZiB3ZWVrbnVtMCgpIGpkX3RvX3dlZWtudW0oamQsIDAsIHN0 YXJ0KSBlbmQgIyA6bm9kb2M6CisgIGRlZiB3ZWVrbnVtMSgpIGpkX3RvX3dl ZWtudW0oamQsIDEsIHN0YXJ0KSBlbmQgIyA6bm9kb2M6CiAKICAgb25jZSA6 Y2l2aWwsIDpvcmRpbmFsLCA6Y29tbWVyY2lhbCwgOndlZWtudW0wLCA6d2Vl a251bTEKICAgcHJpdmF0ZSA6Y2l2aWwsIDpvcmRpbmFsLCA6Y29tbWVyY2lh bCwgOndlZWtudW0wLCA6d2Vla251bTEKIAogICAjIEdldCB0aGUgeWVhciBv ZiB0aGlzIGRhdGUuCi0gIGRlZiB5ZWFyKCkgY2l2aWxbMF0gZW5kCisgIGRl ZiB5ZWFyX3IoKSBjaXZpbFswXSBlbmQgIyA6bm9kb2M6CiAKICAgIyBHZXQg dGhlIGRheS1vZi10aGUteWVhciBvZiB0aGlzIGRhdGUuCiAgICMKICAgIyBK YW51YXJ5IDEgaXMgZGF5LW9mLXRoZS15ZWFyIDEKLSAgZGVmIHlkYXkoKSBv cmRpbmFsWzFdIGVuZAorICBkZWYgeWRheV9yKCkgb3JkaW5hbFsxXSBlbmQg IyA6bm9kb2M6CiAKICAgIyBHZXQgdGhlIG1vbnRoIG9mIHRoaXMgZGF0ZS4K ICAgIwogICAjIEphbnVhcnkgaXMgbW9udGggMS4KLSAgZGVmIG1vbigpIGNp dmlsWzFdIGVuZAorICBkZWYgbW9uX3IoKSBjaXZpbFsxXSBlbmQgIyA6bm9k b2M6CiAKICAgIyBHZXQgdGhlIGRheS1vZi10aGUtbW9udGggb2YgdGhpcyBk YXRlLgotICBkZWYgbWRheSgpIGNpdmlsWzJdIGVuZAorICBkZWYgbWRheV9y KCkgY2l2aWxbMl0gZW5kICMgOm5vZG9jOgogCi0gIGFsaWFzX21ldGhvZCA6 bW9udGgsIDptb24KLSAgYWxpYXNfbWV0aG9kIDpkYXksIDptZGF5CisgIHBy aXZhdGUgOnllYXJfciwgOnlkYXlfciwgOm1vbl9yLCA6bWRheV9yCiAKLSAg ZGVmIHdudW0wKCkgd2Vla251bTBbMV0gZW5kICMgOm5vZG9jOgotICBkZWYg d251bTEoKSB3ZWVrbnVtMVsxXSBlbmQgIyA6bm9kb2M6CisgIGRlZiB3bnVt MF9yKCkgd2Vla251bTBbMV0gZW5kICMgOm5vZG9jOgorICBkZWYgd251bTFf cigpIHdlZWtudW0xWzFdIGVuZCAjIDpub2RvYzoKIAotICBwcml2YXRlIDp3 bnVtMCwgOndudW0xCisgIHByaXZhdGUgOndudW0wX3IsIDp3bnVtMV9yCiAK ICAgIyBHZXQgdGhlIHRpbWUgb2YgdGhpcyBkYXRlIGFzIFtob3VycywgbWlu dXRlcywgc2Vjb25kcywKICAgIyBmcmFjdGlvbl9vZl9hX3NlY29uZF0KQEAg LTEyMTAsMjUgKzEyMTksMjAgQEAKICAgcHJpdmF0ZSA6dGltZSwgOnRpbWVf d29fc2YsIDp0aW1lX3NmCiAKICAgIyBHZXQgdGhlIGhvdXIgb2YgdGhpcyBk YXRlLgotICBkZWYgaG91cigpIHRpbWVfd29fc2ZbMF0gZW5kICMgNHAKKyAg ZGVmIGhvdXJfcigpIHRpbWVfd29fc2ZbMF0gZW5kICMgOm5vZG9jOiAjIDRw CiAKICAgIyBHZXQgdGhlIG1pbnV0ZSBvZiB0aGlzIGRhdGUuCi0gIGRlZiBt aW4oKSB0aW1lX3dvX3NmWzFdIGVuZCAjIDRwCisgIGRlZiBtaW5fcigpIHRp bWVfd29fc2ZbMV0gZW5kICMgOm5vZG9jOiAjIDRwCiAKICAgIyBHZXQgdGhl IHNlY29uZCBvZiB0aGlzIGRhdGUuCi0gIGRlZiBzZWMoKSB0aW1lX3dvX3Nm WzJdIGVuZCAjIDRwCisgIGRlZiBzZWNfcigpIHRpbWVfd29fc2ZbMl0gZW5k ICMgOm5vZG9jOiAjIDRwCiAKICAgIyBHZXQgdGhlIGZyYWN0aW9uLW9mLWEt c2Vjb25kIG9mIHRoaXMgZGF0ZS4KLSAgZGVmIHNlY19mcmFjdGlvbigpIHRp bWVfc2YgZW5kICMgNHAKKyAgZGVmIHNlY19mcmFjdGlvbl9yKCkgdGltZV9z ZiBlbmQgIyA0cAogCi0gIGFsaWFzX21ldGhvZCA6bWludXRlLCA6bWluCi0g IGFsaWFzX21ldGhvZCA6c2Vjb25kLCA6c2VjCi0gIGFsaWFzX21ldGhvZCA6 c2Vjb25kX2ZyYWN0aW9uLCA6c2VjX2ZyYWN0aW9uCisgIHByaXZhdGUgOmhv dXJfciwgOm1pbl9yLCA6c2VjX3IsIDpzZWNfZnJhY3Rpb25fcgogCi0gIHBy aXZhdGUgOmhvdXIsIDptaW4sIDpzZWMsIDpzZWNfZnJhY3Rpb24sCi0JICA6 bWludXRlLCA6c2Vjb25kLCA6c2Vjb25kX2ZyYWN0aW9uCi0KLSAgZGVmIHpv bmUgIyA0cCAtIHN0cmZ0aW1lKCclOnonKQorICBkZWYgem9uZV9yICMgOm5v ZG9jOiAjIDRwIC0gc3RyZnRpbWUoJyU6eicpCiAgICAgc2lnbiA9IGlmIG9m ZnNldCA8IDAgdGhlbiAnLScgZWxzZSAnKycgZW5kCiAgICAgZnIgPSBvZmZz ZXQuYWJzCiAgICAgc3MgPSBmci5kaXYoU0VDT05EU19JTl9EQVkpCkBAIC0x MjM3LDI0ICsxMjQxLDI3IEBACiAgICAgZm9ybWF0KCclcyUwMmQ6JTAyZCcs IHNpZ24sIGhoLCBtbSkKICAgZW5kCiAKLSAgcHJpdmF0ZSA6em9uZQorICBw cml2YXRlIDp6b25lX3IKIAogICAjIEdldCB0aGUgY29tbWVyY2lhbCB5ZWFy IG9mIHRoaXMgZGF0ZS4gIFNlZSAqQ29tbWVyY2lhbCogKkRhdGUqCiAgICMg aW4gdGhlIGludHJvZHVjdGlvbiBmb3IgaG93IHRoaXMgZGlmZmVycyBmcm9t IHRoZSBub3JtYWwgeWVhci4KLSAgZGVmIGN3eWVhcigpIGNvbW1lcmNpYWxb MF0gZW5kCisgIGRlZiBjd3llYXJfcigpIGNvbW1lcmNpYWxbMF0gZW5kICMg Om5vZG9jOgogCiAgICMgR2V0IHRoZSBjb21tZXJjaWFsIHdlZWsgb2YgdGhl IHllYXIgb2YgdGhpcyBkYXRlLgotICBkZWYgY3dlZWsoKSBjb21tZXJjaWFs WzFdIGVuZAorICBkZWYgY3dlZWtfcigpIGNvbW1lcmNpYWxbMV0gZW5kICMg Om5vZG9jOgogCiAgICMgR2V0IHRoZSBjb21tZXJjaWFsIGRheSBvZiB0aGUg d2VlayBvZiB0aGlzIGRhdGUuICBNb25kYXkgaXMKICAgIyBjb21tZXJjaWFs IGRheS1vZi13ZWVrIDE7IFN1bmRheSBpcyBjb21tZXJjaWFsIGRheS1vZi13 ZWVrIDcuCi0gIGRlZiBjd2RheSgpIGNvbW1lcmNpYWxbMl0gZW5kCisgIGRl ZiBjd2RheV9yKCkgY29tbWVyY2lhbFsyXSBlbmQgIyA6bm9kb2M6CiAKKyAg cHJpdmF0ZSA6Y3d5ZWFyX3IsIDpjd2Vla19yLCA6Y3dkYXlfcgorCiAgICMg R2V0IHRoZSB3ZWVrIGRheSBvZiB0aGlzIGRhdGUuICBTdW5kYXkgaXMgZGF5 LW9mLXdlZWsgMDsKICAgIyBTYXR1cmRheSBpcyBkYXktb2Ytd2VlayA2Lgot ICBkZWYgd2RheSgpIGpkX3RvX3dkYXkoamQpIGVuZAorICBkZWYgd2RheV9y KCkgamRfdG9fd2RheShqZCkgZW5kICMgOm5vZG9jOgogCi0gIG9uY2UgOndk YXkKKyAgb25jZSA6d2RheV9yCisgIHByaXZhdGUgOndkYXlfcgogCiA9YmVn aW4KICAgTU9OVEhOQU1FUy5lYWNoX3dpdGhfaW5kZXggZG8gfG4sIGl8CkBA IC0xMjY4LDE5ICsxMjc1LDIwIEBACiAgICAgZGVmaW5lX21ldGhvZChuLmRv d25jYXNlICsgJz8nKXt3ZGF5ID09IGl9CiAgIGVuZAogCi0gIGRlZiBudGhf a2RheT8gKG4sIGspCisgIGRlZiBudGhfa2RheT8gKG4sIGspICMgOm5vZG9j OgogICAgIGsgPT0gd2RheSAmJiBqZCA9PT0gbnRoX2tkYXlfdG9famQoeWVh ciwgbW9uLCBuLCBrLCBzdGFydCkKICAgZW5kCiAKICAgcHJpdmF0ZSA6bnRo X2tkYXk/CiAKICAgIyBJcyB0aGUgY3VycmVudCBkYXRlIG9sZC1zdHlsZSAo SnVsaWFuIENhbGVuZGFyKT8KLSAgZGVmIGp1bGlhbj8gKCkgamQgPCBAc2cg ZW5kCisgIGRlZiBqdWxpYW5fcj8gKCkgamQgPCBzdGFydCBlbmQgIyA6bm9k b2M6CiAKICAgIyBJcyB0aGUgY3VycmVudCBkYXRlIG5ldy1zdHlsZSAoR3Jl Z29yaWFuIENhbGVuZGFyKT8KLSAgZGVmIGdyZWdvcmlhbj8gKCkgIWp1bGlh bj8gZW5kCisgIGRlZiBncmVnb3JpYW5fcj8gKCkgIWp1bGlhbj8gZW5kICMg Om5vZG9jOgogCi0gIG9uY2UgOmp1bGlhbj8sIDpncmVnb3JpYW4/CisgIG9u Y2UgOmp1bGlhbl9yPywgOmdyZWdvcmlhbl9yPworICBwcml2YXRlIDpqdWxp YW5fcj8sIDpncmVnb3JpYW5fcj8KIAogICBkZWYgZml4X3N0eWxlICMgOm5v ZG9jOgogICAgIGlmIGp1bGlhbj8KQEAgLTEyOTEsMTkgKzEyOTksMjIgQEAK ICAgcHJpdmF0ZSA6Zml4X3N0eWxlCiAKICAgIyBJcyB0aGlzIGEgbGVhcCB5 ZWFyPwotICBkZWYgbGVhcD8KKyAgZGVmIGxlYXBfcj8gIyA6bm9kb2M6CiAg ICAgamRfdG9fY2l2aWwoY2l2aWxfdG9famQoeWVhciwgMywgMSwgZml4X3N0 eWxlKSAtIDEsCiAJCWZpeF9zdHlsZSlbLTFdID09IDI5CiAgIGVuZAogCi0g IG9uY2UgOmxlYXA/CisgIG9uY2UgOmxlYXBfcj8KKyAgcHJpdmF0ZSA6bGVh cF9yPwogCiAgICMgV2hlbiBpcyB0aGUgRGF5IG9mIENhbGVuZGFyIFJlZm9y bSBmb3IgdGhpcyBEYXRlIG9iamVjdD8KLSAgZGVmIHN0YXJ0KCkgQHNnIGVu ZAorICBkZWYgc3RhcnRfcigpIEBzZyBlbmQgIyA6bm9kb2M6CiAKICAgIyBD cmVhdGUgYSBjb3B5IG9mIHRoaXMgRGF0ZSBvYmplY3QgdXNpbmcgYSBuZXcg RGF5IG9mIENhbGVuZGFyIFJlZm9ybS4KLSAgZGVmIG5ld19zdGFydChzZz1z ZWxmLmNsYXNzOjpJVEFMWSkgc2VsZi5jbGFzcy5uZXchKEBhamQsIEBvZiwg c2cpIGVuZAorICBkZWYgbmV3X3N0YXJ0X3Ioc2c9c2VsZi5jbGFzczo6SVRB TFkpIHNlbGYuY2xhc3MubmV3X3IhKGFqZCwgb2Zmc2V0LCBzZykgZW5kICMg Om5vZG9jOgogCisgIHByaXZhdGUgOnN0YXJ0X3IsIDpuZXdfc3RhcnRfcgor CiAgICMgQ3JlYXRlIGEgY29weSBvZiB0aGlzIERhdGUgb2JqZWN0IHRoYXQg dXNlcyB0aGUgSXRhbGlhbi9DYXRob2xpYwogICAjIERheSBvZiBDYWxlbmRh ciBSZWZvcm0uCiAgIGRlZiBpdGFseSgpIG5ld19zdGFydChzZWxmLmNsYXNz OjpJVEFMWSkgZW5kCkBAIC0xMzIwLDE2ICsxMzMxLDE2IEBACiAgICMgQ2Fs ZW5kYXIuCiAgIGRlZiBncmVnb3JpYW4oKSBuZXdfc3RhcnQoc2VsZi5jbGFz czo6R1JFR09SSUFOKSBlbmQKIAotICBkZWYgb2Zmc2V0KCkgQG9mIGVuZAot Ci0gIGRlZiBuZXdfb2Zmc2V0KG9mPTApCisgIGRlZiBuZXdfb2Zmc2V0X3Io b2Y9MCkgIyA6bm9kb2M6CiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAg b2YgPSBSYXRpb25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQor ICAgIGVsc2lmIEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgo b2YgKiA4NjQwMCkucm91bmQsIDg2NDAwKQogICAgIGVuZAotICAgIHNlbGYu Y2xhc3MubmV3IShAYWpkLCBvZiwgQHNnKQorICAgIHNlbGYuY2xhc3MubmV3 X3IhKGFqZCwgb2YsIHN0YXJ0KQogICBlbmQKIAotICBwcml2YXRlIDpvZmZz ZXQsIDpuZXdfb2Zmc2V0CisgIHByaXZhdGUgOm5ld19vZmZzZXRfcgogCiAg ICMgUmV0dXJuIGEgbmV3IERhdGUgb2JqZWN0IHRoYXQgaXMgK24rIGRheXMg bGF0ZXIgdGhhbiB0aGUKICAgIyBjdXJyZW50IG9uZS4KQEAgLTEzNDAsMTMg KzEzNTEsMTkgQEAKICAgIwogICAjIElmICtuKyBpcyBub3QgYSBOdW1lcmlj LCBhIFR5cGVFcnJvciB3aWxsIGJlIHRocm93bi4gIEluCiAgICMgcGFydGlj dWxhciwgdHdvIERhdGVzIGNhbm5vdCBiZSBhZGRlZCB0byBlYWNoIG90aGVy LgotICBkZWYgKyAobikKKyAgZGVmIHBsdXNfciAobikgIyA6bm9kb2M6CiAg ICAgY2FzZSBuCi0gICAgd2hlbiBOdW1lcmljOyByZXR1cm4gc2VsZi5jbGFz cy5uZXchKEBhamQgKyBuLCBAb2YsIEBzZykKKyAgICB3aGVuIE51bWVyaWMK KyAgICAgIGlmIEZsb2F0ID09PSBuCisJbiA9IFJhdGlvbmFsKChuICogODY0 MDAwMDAwMDAwMDApLnJvdW5kLCA4NjQwMDAwMDAwMDAwMCkKKyAgICAgIGVu ZAorICAgICAgcmV0dXJuIHNlbGYuY2xhc3MubmV3X3IhKGFqZCArIG4sIG9m ZnNldCwgc3RhcnQpCiAgICAgZW5kCiAgICAgcmFpc2UgVHlwZUVycm9yLCAn ZXhwZWN0ZWQgbnVtZXJpYycKICAgZW5kCiAKKyAgcHJpdmF0ZSA6cGx1c19y CisKICAgIyBJZiAreCsgaXMgYSBOdW1lcmljIHZhbHVlLCBjcmVhdGUgYSBu ZXcgRGF0ZSBvYmplY3QgdGhhdCBpcwogICAjICt4KyBkYXlzIGVhcmxpZXIg dGhhbiB0aGUgY3VycmVudCBvbmUuCiAgICMKQEAgLTEzNTUsMTQgKzEzNzIs MjEgQEAKICAgIyBkYXRlIGlzIHRoYW4gK3grLgogICAjCiAgICMgSWYgK3gr IGlzIG5laXRoZXIgTnVtZXJpYyBub3IgYSBEYXRlLCBhIFR5cGVFcnJvciBp cyByYWlzZWQuCi0gIGRlZiAtICh4KQorICBkZWYgbWludXNfciAoeCkgIyA6 bm9kb2M6CiAgICAgY2FzZSB4Ci0gICAgd2hlbiBOdW1lcmljOyByZXR1cm4g c2VsZi5jbGFzcy5uZXchKEBhamQgLSB4LCBAb2YsIEBzZykKLSAgICB3aGVu IERhdGU7ICAgIHJldHVybiBAYWpkIC0geC5hamQKKyAgICB3aGVuIE51bWVy aWMKKyAgICAgIGlmIEZsb2F0ID09PSB4CisJeCA9IFJhdGlvbmFsKCh4ICog ODY0MDAwMDAwMDAwMDApLnJvdW5kLCA4NjQwMDAwMDAwMDAwMCkKKyAgICAg IGVuZAorICAgICAgcmV0dXJuIHNlbGYuY2xhc3MubmV3X3IhKGFqZCAtIHgs IG9mZnNldCwgc3RhcnQpCisgICAgd2hlbiBEYXRlCisgICAgICByZXR1cm4g YWpkIC0geC5hamQKICAgICBlbmQKICAgICByYWlzZSBUeXBlRXJyb3IsICdl eHBlY3RlZCBudW1lcmljIG9yIGRhdGUnCiAgIGVuZAogCisgIHByaXZhdGUg Om1pbnVzX3IKKwogICAjIENvbXBhcmUgdGhpcyBkYXRlIHdpdGggYW5vdGhl ciBkYXRlLgogICAjCiAgICMgK290aGVyKyBjYW4gYWxzbyBiZSBhIE51bWVy aWMgdmFsdWUsIGluIHdoaWNoIGNhc2UgaXQgaXMKQEAgLTEzNzQsMTAgKzEz OTgsMTAgQEAKICAgIyB0d28gRGF0ZVRpbWUgaW5zdGFuY2VzLiAgV2hlbiBj b21wYXJpbmcgYSBEYXRlVGltZSBpbnN0YW5jZQogICAjIHdpdGggYSBEYXRl IGluc3RhbmNlLCB0aGUgdGltZSBvZiB0aGUgbGF0dGVyIHdpbGwgYmUKICAg IyBjb25zaWRlcmVkIGFzIGZhbGxpbmcgb24gbWlkbmlnaHQgVVRDLgotICBk ZWYgPD0+IChvdGhlcikKKyAgZGVmIGNtcF9yIChvdGhlcikgIyA6bm9kb2M6 CiAgICAgY2FzZSBvdGhlcgotICAgIHdoZW4gTnVtZXJpYzsgcmV0dXJuIEBh amQgPD0+IG90aGVyCi0gICAgd2hlbiBEYXRlOyAgICByZXR1cm4gQGFqZCA8 PT4gb3RoZXIuYWpkCisgICAgd2hlbiBOdW1lcmljOyByZXR1cm4gYWpkIDw9 PiBvdGhlcgorICAgIHdoZW4gRGF0ZTsgICAgcmV0dXJuIGFqZCA8PT4gb3Ro ZXIuYWpkCiAgICAgZWxzZQogICAgICAgYmVnaW4KICAgICAgICAgbCwgciA9 IG90aGVyLmNvZXJjZShzZWxmKQpAQCAtMTM4OCwxMyArMTQxMiwxNSBAQAog ICAgIG5pbAogICBlbmQKIAorICBwcml2YXRlIDpjbXBfcgorCiAgICMgVGhl IHJlbGF0aW9uc2hpcCBvcGVyYXRvciBmb3IgRGF0ZS4KICAgIwogICAjIENv bXBhcmVzIGRhdGVzIGJ5IEp1bGlhbiBEYXkgTnVtYmVyLiAgV2hlbiBjb21w YXJpbmcKICAgIyB0d28gRGF0ZVRpbWUgaW5zdGFuY2VzLCBvciBhIERhdGVU aW1lIHdpdGggYSBEYXRlLAogICAjIHRoZSBpbnN0YW5jZXMgd2lsbCBiZSBy ZWdhcmRlZCBhcyBlcXVpdmFsZW50IGlmIHRoZXkKICAgIyBmYWxsIG9uIHRo ZSBzYW1lIGRhdGUgaW4gbG9jYWwgdGltZS4KLSAgZGVmID09PSAob3RoZXIp CisgIGRlZiBlcXVhbF9yIChvdGhlcikgIyA6bm9kb2M6CiAgICAgY2FzZSBv dGhlcgogICAgIHdoZW4gTnVtZXJpYzsgcmV0dXJuIGpkID09IG90aGVyCiAg ICAgd2hlbiBEYXRlOyAgICByZXR1cm4gamQgPT0gb3RoZXIuamQKQEAgLTE0 MDgsNiArMTQzNCw4IEBACiAgICAgZmFsc2UKICAgZW5kCiAKKyAgcHJpdmF0 ZSA6ZXF1YWxfcgorCiAgIGRlZiBuZXh0X2RheShuPTEpIHNlbGYgKyBuIGVu ZAogICBkZWYgcHJldl9kYXkobj0xKSBzZWxmIC0gbiBlbmQKIApAQCAtMTQy Niw3ICsxNDU0LDcgQEAKICAgICB5LCBtID0gKHllYXIgKiAxMiArIChtb24g LSAxKSArIG4pLmRpdm1vZCgxMikKICAgICBtLCAgID0gKG0gKyAxKSAgICAg ICAgICAgICAgICAgICAgLmRpdm1vZCgxKQogICAgIGQgPSBtZGF5Ci0gICAg dW50aWwgamQyID0gX3ZhbGlkX2NpdmlsPyh5LCBtLCBkLCBAc2cpCisgICAg dW50aWwgamQyID0gX3ZhbGlkX2NpdmlsPyh5LCBtLCBkLCBzdGFydCkKICAg ICAgIGQgLT0gMQogICAgICAgcmFpc2UgQXJndW1lbnRFcnJvciwgJ2ludmFs aWQgZGF0ZScgdW5sZXNzIGQgPiAwCiAgICAgZW5kCkBAIC0xNDg2LDMwICsx NTE0LDI5IEBACiAgICMgSXMgdGhpcyBEYXRlIGVxdWFsIHRvICtvdGhlcis/ CiAgICMKICAgIyArb3RoZXIrIG11c3QgYm90aCBiZSBhIERhdGUgb2JqZWN0 LCBhbmQgcmVwcmVzZW50IHRoZSBzYW1lIGRhdGUuCi0gIGRlZiBlcWw/IChv dGhlcikgRGF0ZSA9PT0gb3RoZXIgJiYgc2VsZiA9PSBvdGhlciBlbmQKKyAg ZGVmIGVxbF9yPyAob3RoZXIpIERhdGUgPT09IG90aGVyICYmIHNlbGYgPT0g b3RoZXIgZW5kICMgOm5vZG9jOgogCisgIHByaXZhdGUgOmVxbF9yPworCiAg ICMgQ2FsY3VsYXRlIGEgaGFzaCB2YWx1ZSBmb3IgdGhpcyBkYXRlLgotICBk ZWYgaGFzaCgpIEBhamQuaGFzaCBlbmQKKyAgZGVmIGhhc2hfcigpIGFqZC5o YXNoIGVuZCAjIDpub2RvYzoKIAorICBwcml2YXRlIDpoYXNoX3IKKwogICAj IFJldHVybiBpbnRlcm5hbCBvYmplY3Qgc3RhdGUgYXMgYSBwcm9ncmFtbWVy LXJlYWRhYmxlIHN0cmluZy4KLSAgZGVmIGluc3BlY3QKLSAgICBmb3JtYXQo JyM8JXM6ICVzICglcywlcywlcyk+Jywgc2VsZi5jbGFzcywgdG9fcywgQGFq ZCwgQG9mLCBAc2cpCisgIGRlZiBpbnNwZWN0X3IgIyA6bm9kb2M6CisgICAg Zm9ybWF0KCcjPCVzW1JdOiAlcyAoJXMsJXMsJXMpPicsIHNlbGYuY2xhc3Ms IHRvX3NfciwgYWpkLCBvZmZzZXQsIHN0YXJ0KQogICBlbmQKIAorICBwcml2 YXRlIDppbnNwZWN0X3IKKwogICAjIFJldHVybiB0aGUgZGF0ZSBhcyBhIGh1 bWFuLXJlYWRhYmxlIHN0cmluZy4KICAgIwogICAjIFRoZSBmb3JtYXQgdXNl ZCBpcyBZWVlZLU1NLURELgotICBkZWYgdG9fcygpIGZvcm1hdCgnJS40ZC0l MDJkLSUwMmQnLCB5ZWFyLCBtb24sIG1kYXkpIGVuZCAjIDRwCisgIGRlZiB0 b19zX3IoKSBmb3JtYXQoJyUuNGQtJTAyZC0lMDJkJywgeWVhciwgbW9uLCBt ZGF5KSBlbmQgIyA6bm9kb2M6ICMgNHAKIAotICAjIER1bXAgdG8gTWFyc2hh bCBmb3JtYXQuCi0gIGRlZiBtYXJzaGFsX2R1bXAoKSBbQGFqZCwgQG9mLCBA c2ddIGVuZAorICBwcml2YXRlIDp0b19zX3IKIAotICAjIExvYWQgZnJvbSBN YXJzaGFsIGZvcm1hdC4KLSAgZGVmIG1hcnNoYWxfbG9hZChhKQotICAgIEBh amQsIEBvZiwgQHNnLCA9IGEKLSAgICBAX19jYV9fID0ge30KLSAgZW5kCi0K IGVuZAogCiAjIENsYXNzIHJlcHJlc2VudGluZyBhIGRhdGUgYW5kIHRpbWUu CkBAIC0xNTYyLDYgKzE1ODksMTkgQEAKICMKIGNsYXNzIERhdGVUaW1lIDwg RGF0ZQogCisgIGRlZiBzZWxmLm5ldyEoYWpkPTAsIG9mPTAsIHNnPUlUQUxZ KQorICAgIGpkLCBkZiA9IGFqZF90b19qZChhamQsIDApCisgICAgZGYsIHNm ID0gKGRmICogODY0MDApLmRpdm1vZCgxKQorICAgIHNmLCBzc2YgPSAoc2Yg KiAxMDAwMDAwMDAwKS5kaXZtb2QoMSkKKyAgICBvZGYsIG9zZiA9IChvZiAq IDg2NDAwKS5kaXZtb2QoMSkKKyAgICBpZiAhKEZpeG51bSA9PT0gamQpIHx8 CisJamQgPCBzZyB8fCBzc2YgIT0gMCB8fCBvc2YgIT0gMCB8fAorICAgICAg ICBqZCA8IC0zMjcgfHwgamQgPiAzNjY5NjM5MjUKKyAgICAgIHJldHVybiBu ZXdfciEoYWpkLCBvZiwgc2cpCisgICAgZW5kCisgICAgbmV3X2whKGpkLCBk Ziwgc2YsIG9kZiwgc2cpCisgIGVuZAorCiAgICMgQ3JlYXRlIGEgbmV3IERh dGVUaW1lIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQK ICAgIyBKdWxpYW4gRGF5IE51bWJlciAramQrIGFuZCBob3VyICtoKywgbWlu dXRlICttaW4rLCBzZWNvbmQgK3MrLgogICAjCkBAIC0xNTc1LDE3ICsxNjE1 LDIxIEBACiAgICMgK3NnKyBzcGVjaWZpZXMgdGhlIERheSBvZiBDYWxlbmRh ciBSZWZvcm0uCiAgICMKICAgIyBBbGwgZGF5L3RpbWUgdmFsdWVzIGRlZmF1 bHQgdG8gMC4KLSAgZGVmIHNlbGYuamQoamQ9MCwgaD0wLCBtaW49MCwgcz0w LCBvZj0wLCBzZz1JVEFMWSkKKyAgZGVmIHNlbGYuamRfcihqZD0wLCBoPTAs IG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKSAjIDpub2RvYzoKICAgICB1 bmxlc3MgKGpkID0gX3ZhbGlkX2pkPyhqZCwgc2cpKSAmJgogCSAgIChmciA9 IF92YWxpZF90aW1lPyhoLCBtaW4sIHMpKQogICAgICAgcmFpc2UgQXJndW1l bnRFcnJvciwgJ2ludmFsaWQgZGF0ZScKICAgICBlbmQKICAgICBpZiBTdHJp bmcgPT09IG9mCiAgICAgICBvZiA9IFJhdGlvbmFsKHpvbmVfdG9fZGlmZihv ZikgfHwgMCwgODY0MDApCisgICAgZWxzaWYgRmxvYXQgPT09IG9mCisgICAg ICBvZiA9IFJhdGlvbmFsKChvZiAqIDg2NDAwKS5yb3VuZCwgODY0MDApCiAg ICAgZW5kCi0gICAgbmV3IShqZF90b19hamQoamQsIGZyLCBvZiksIG9mLCBz ZykKKyAgICBuZXdfciEoamRfdG9fYWpkKGpkLCBmciwgb2YpLCBvZiwgc2cp CiAgIGVuZAogCisgIHByaXZhdGVfY2xhc3NfbWV0aG9kIDpqZF9yCisKICAg IyBDcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IGNvcnJlc3BvbmRpbmcg dG8gdGhlIHNwZWNpZmllZAogICAjIE9yZGluYWwgRGF0ZSBhbmQgaG91ciAr aCssIG1pbnV0ZSArbWluKywgc2Vjb25kICtzKy4KICAgIwpAQCAtMTYwMCwx NyArMTY0NCwyMSBAQAogICAjCiAgICMgK3krIGRlZmF1bHRzIHRvIC00NzEy LCBhbmQgK2QrIHRvIDE7IHRoaXMgaXMgSnVsaWFuIERheSBOdW1iZXIKICAg IyBkYXkgMC4gIFRoZSB0aW1lIHZhbHVlcyBkZWZhdWx0IHRvIDAuCi0gIGRl ZiBzZWxmLm9yZGluYWwoeT0tNDcxMiwgZD0xLCBoPTAsIG1pbj0wLCBzPTAs IG9mPTAsIHNnPUlUQUxZKQorICBkZWYgc2VsZi5vcmRpbmFsX3IoeT0tNDcx MiwgZD0xLCBoPTAsIG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKSAjIDpu b2RvYzoKICAgICB1bmxlc3MgKGpkID0gX3ZhbGlkX29yZGluYWw/KHksIGQs IHNnKSkgJiYKIAkgICAoZnIgPSBfdmFsaWRfdGltZT8oaCwgbWluLCBzKSkK ICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUnCiAg ICAgZW5kCiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBSYXRp b25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVsc2lm IEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4NjQw MCkucm91bmQsIDg2NDAwKQogICAgIGVuZAotICAgIG5ldyEoamRfdG9fYWpk KGpkLCBmciwgb2YpLCBvZiwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2FqZChq ZCwgZnIsIG9mKSwgb2YsIHNnKQogICBlbmQKIAorICBwcml2YXRlX2NsYXNz X21ldGhvZCA6b3JkaW5hbF9yCisKICAgIyBDcmVhdGUgYSBuZXcgRGF0ZVRp bWUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZAogICAj IENpdmlsIERhdGUgYW5kIGhvdXIgK2grLCBtaW51dGUgK21pbissIHNlY29u ZCArcysuCiAgICMKQEAgLTE2MjUsMTggKzE2NzMsMjAgQEAKICAgIwogICAj ICt5KyBkZWZhdWx0cyB0byAtNDcxMiwgK20rIHRvIDEsIGFuZCArZCsgdG8g MTsgdGhpcyBpcyBKdWxpYW4gRGF5CiAgICMgTnVtYmVyIGRheSAwLiAgVGhl IHRpbWUgdmFsdWVzIGRlZmF1bHQgdG8gMC4KLSAgZGVmIHNlbGYuY2l2aWwo eT0tNDcxMiwgbT0xLCBkPTEsIGg9MCwgbWluPTAsIHM9MCwgb2Y9MCwgc2c9 SVRBTFkpCisgIGRlZiBzZWxmLmNpdmlsX3IoeT0tNDcxMiwgbT0xLCBkPTEs IGg9MCwgbWluPTAsIHM9MCwgb2Y9MCwgc2c9SVRBTFkpICMgOm5vZG9jOgog ICAgIHVubGVzcyAoamQgPSBfdmFsaWRfY2l2aWw/KHksIG0sIGQsIHNnKSkg JiYKIAkgICAoZnIgPSBfdmFsaWRfdGltZT8oaCwgbWluLCBzKSkKICAgICAg IHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUnCiAgICAgZW5k CiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBSYXRpb25hbCh6 b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVsc2lmIEZsb2F0 ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4NjQwMCkucm91 bmQsIDg2NDAwKQogICAgIGVuZAotICAgIG5ldyEoamRfdG9fYWpkKGpkLCBm ciwgb2YpLCBvZiwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2FqZChqZCwgZnIs IG9mKSwgb2YsIHNnKQogICBlbmQKIAotICBjbGFzcyA8PCBzZWxmOyBhbGlh c19tZXRob2QgOm5ldywgOmNpdmlsIGVuZAorICBwcml2YXRlX2NsYXNzX21l dGhvZCA6Y2l2aWxfcgogCiAgICMgQ3JlYXRlIGEgbmV3IERhdGVUaW1lIG9i amVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQKICAgIyBDb21t ZXJjaWFsIERhdGUgYW5kIGhvdXIgK2grLCBtaW51dGUgK21pbissIHNlY29u ZCArcysuCkBAIC0xNjUzLDE3ICsxNzAzLDIxIEBACiAgICMgK3krIGRlZmF1 bHRzIHRvIC00NzEyLCArdysgdG8gMSwgYW5kICtkKyB0byAxOyB0aGlzIGlz CiAgICMgSnVsaWFuIERheSBOdW1iZXIgZGF5IDAuCiAgICMgVGhlIHRpbWUg dmFsdWVzIGRlZmF1bHQgdG8gMC4KLSAgZGVmIHNlbGYuY29tbWVyY2lhbCh5 PS00NzEyLCB3PTEsIGQ9MSwgaD0wLCBtaW49MCwgcz0wLCBvZj0wLCBzZz1J VEFMWSkKKyAgZGVmIHNlbGYuY29tbWVyY2lhbF9yKHk9LTQ3MTIsIHc9MSwg ZD0xLCBoPTAsIG1pbj0wLCBzPTAsIG9mPTAsIHNnPUlUQUxZKSAjIDpub2Rv YzoKICAgICB1bmxlc3MgKGpkID0gX3ZhbGlkX2NvbW1lcmNpYWw/KHksIHcs IGQsIHNnKSkgJiYKIAkgICAoZnIgPSBfdmFsaWRfdGltZT8oaCwgbWluLCBz KSkKICAgICAgIHJhaXNlIEFyZ3VtZW50RXJyb3IsICdpbnZhbGlkIGRhdGUn CiAgICAgZW5kCiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBS YXRpb25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVs c2lmIEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4 NjQwMCkucm91bmQsIDg2NDAwKQogICAgIGVuZAotICAgIG5ldyEoamRfdG9f YWpkKGpkLCBmciwgb2YpLCBvZiwgc2cpCisgICAgbmV3X3IhKGpkX3RvX2Fq ZChqZCwgZnIsIG9mKSwgb2YsIHNnKQogICBlbmQKIAorICBwcml2YXRlX2Ns YXNzX21ldGhvZCA6Y29tbWVyY2lhbF9yCisKICAgZGVmIHNlbGYud2Vla251 bSh5PS00NzEyLCB3PTAsIGQ9MSwgZj0wLCBoPTAsIG1pbj0wLCBzPTAsIG9m PTAsIHNnPUlUQUxZKSAjIDpub2RvYzoKICAgICB1bmxlc3MgKGpkID0gX3Zh bGlkX3dlZWtudW0/KHksIHcsIGQsIGYsIHNnKSkgJiYKIAkgICAoZnIgPSBf dmFsaWRfdGltZT8oaCwgbWluLCBzKSkKQEAgLTE2NzEsNiArMTcyNSw4IEBA CiAgICAgZW5kCiAgICAgaWYgU3RyaW5nID09PSBvZgogICAgICAgb2YgPSBS YXRpb25hbCh6b25lX3RvX2RpZmYob2YpIHx8IDAsIDg2NDAwKQorICAgIGVs c2lmIEZsb2F0ID09PSBvZgorICAgICAgb2YgPSBSYXRpb25hbCgob2YgKiA4 NjQwMCkucm91bmQsIDg2NDAwKQogICAgIGVuZAogICAgIG5ldyEoamRfdG9f YWpkKGpkLCBmciwgb2YpLCBvZiwgc2cpCiAgIGVuZApAQCAtMTY4NCw2ICsx NzQwLDggQEAKICAgICBlbmQKICAgICBpZiBTdHJpbmcgPT09IG9mCiAgICAg ICBvZiA9IFJhdGlvbmFsKHpvbmVfdG9fZGlmZihvZikgfHwgMCwgODY0MDAp CisgICAgZWxzaWYgRmxvYXQgPT09IG9mCisgICAgICBvZiA9IFJhdGlvbmFs KChvZiAqIDg2NDAwKS5yb3VuZCwgODY0MDApCiAgICAgZW5kCiAgICAgbmV3 IShqZF90b19hamQoamQsIGZyLCBvZiksIG9mLCBzZykKICAgZW5kCkBAIC0x NzcwLDE0ICsxODI4LDEzIEBACiAgICAgbmV3X2J5X2ZyYWdzKGVsZW0sIHNn KQogICBlbmQKIAotICBwdWJsaWMgOmhvdXIsIDptaW4sIDpzZWMsIDpzZWNf ZnJhY3Rpb24sIDp6b25lLCA6b2Zmc2V0LCA6bmV3X29mZnNldCwKLQkgOm1p bnV0ZSwgOnNlY29uZCwgOnNlY29uZF9mcmFjdGlvbgotCi0gIGRlZiB0b19z ICMgNHAKKyAgZGVmIHRvX3NfciAjIDpub2RvYzogIyA0cAogICAgIGZvcm1h dCgnJS40ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlcycsCiAJICAgeWVh ciwgbW9uLCBtZGF5LCBob3VyLCBtaW4sIHNlYywgem9uZSkKICAgZW5kCiAK KyAgcHJpdmF0ZSA6dG9fc19yCisKIGVuZAogCiBjbGFzcyBUaW1lCkBAIC0x Nzk1LDcgKzE4NTIsNyBAQAogICAgICAgUmF0aW9uYWwoc3Vic2VjLCA4NjQw MCkKICAgICBvZiA9IFJhdGlvbmFsKHV0Y19vZmZzZXQsIDg2NDAwKQogICAg IERhdGVUaW1lLm5ldyEoRGF0ZVRpbWUuX19zZW5kX18oOmpkX3RvX2FqZCwg amQsIGZyLCBvZiksCi0JCSAgb2YsIERhdGVUaW1lOjpJVEFMWSkKKyAgICAg ICAgICAgICAgICAgIG9mLCBEYXRlVGltZTo6SVRBTFkpCiAgIGVuZAogCiBl bmQKQEAgLTE4MDQsMzEgKzE4NjEsOCBAQAogCiAgIGRlZiB0b190aW1lKCkg VGltZS5sb2NhbCh5ZWFyLCBtb24sIG1kYXkpIGVuZAogICBkZWYgdG9fZGF0 ZSgpIHNlbGYgZW5kCi0gIGRlZiB0b19kYXRldGltZSgpIERhdGVUaW1lLm5l dyEoamRfdG9fYWpkKGpkLCAwLCAwKSwgQG9mLCBAc2cpIGVuZAorICBkZWYg dG9fZGF0ZXRpbWUoKSBEYXRlVGltZS5uZXchKGpkX3RvX2FqZChqZCwgMCwg MCksIG9mZnNldCwgc3RhcnQpIGVuZAogCi0gICMgQ3JlYXRlIGEgbmV3IERh dGUgb2JqZWN0IHJlcHJlc2VudGluZyB0b2RheS4KLSAgIwotICAjICtzZysg c3BlY2lmaWVzIHRoZSBEYXkgb2YgQ2FsZW5kYXIgUmVmb3JtLgotICBkZWYg c2VsZi50b2RheShzZz1JVEFMWSkKLSAgICB0ID0gVGltZS5ub3cKLSAgICBq ZCA9IGNpdmlsX3RvX2pkKHQueWVhciwgdC5tb24sIHQubWRheSwgc2cpCi0g ICAgbmV3IShqZF90b19hamQoamQsIDAsIDApLCAwLCBzZykKLSAgZW5kCi0K LSAgIyBDcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IHJlcHJlc2VudGlu ZyB0aGUgY3VycmVudCB0aW1lLgotICAjCi0gICMgK3NnKyBzcGVjaWZpZXMg dGhlIERheSBvZiBDYWxlbmRhciBSZWZvcm0uCi0gIGRlZiBzZWxmLm5vdyhz Zz1JVEFMWSkKLSAgICB0ID0gVGltZS5ub3cKLSAgICBqZCA9IGNpdmlsX3Rv X2pkKHQueWVhciwgdC5tb24sIHQubWRheSwgc2cpCi0gICAgZnIgPSB0aW1l X3RvX2RheV9mcmFjdGlvbih0LmhvdXIsIHQubWluLCBbdC5zZWMsIDU5XS5t aW4pICsKLSAgICAgIFJhdGlvbmFsKHQuc3Vic2VjLCA4NjQwMCkKLSAgICBv ZiA9IFJhdGlvbmFsKHQudXRjX29mZnNldCwgODY0MDApCi0gICAgbmV3IShq ZF90b19hamQoamQsIGZyLCBvZiksIG9mLCBzZykKLSAgZW5kCi0KLSAgcHJp dmF0ZV9jbGFzc19tZXRob2QgOm5vdwotCiBlbmQKIAogY2xhc3MgRGF0ZVRp bWUgPCBEYXRlCkBAIC0xODM5LDEzICsxODczLDEyIEBACiAgICAgICBUaW1l LnV0Yyh5ZWFyLCBtb24sIG1kYXksIGhvdXIsIG1pbiwgc2VjICsKIAkgICAg ICAgc2VjX2ZyYWN0aW9uKQogICAgIGVuZC4KLQlnZXRsb2NhbAorICAgICAg ICBnZXRsb2NhbAogICBlbmQKIAotICBkZWYgdG9fZGF0ZSgpIERhdGUubmV3 IShqZF90b19hamQoamQsIDAsIDApLCAwLCBAc2cpIGVuZAorICBkZWYgdG9f ZGF0ZSgpIERhdGUubmV3IShqZF90b19hamQoamQsIDAsIDApLCAwLCBzdGFy dCkgZW5kCiAgIGRlZiB0b19kYXRldGltZSgpIHNlbGYgZW5kCiAKLSAgcHJp dmF0ZV9jbGFzc19tZXRob2QgOnRvZGF5Ci0gIHB1YmxpY19jbGFzc19tZXRo b2QgIDpub3cKK2VuZAogCi1lbmQKK3JlcXVpcmUgJ2RhdGVfY29yZScKSW5k ZXg6IGV4dC9kYXRlL2RhdGVfY29yZS5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGV4dC9kYXRlL2RhdGVfY29yZS5jCShyZXZpc2lvbiAwKQorKysg ZXh0L2RhdGUvZGF0ZV9jb3JlLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs MzU2NyBAQAorLyoKKyAgZGF0ZV9jb3JlLmMgPHN3aXRjaF9oaXR0ZXI+OiBD b2RlZCBieSBUYWRheW9zaGkgRnVuYWJhIDIwMTAsIDIwMTEKKyovCisKKyNp bmNsdWRlICJydWJ5LmgiCisjaW5jbHVkZSAicnVieS9lbmNvZGluZy5oIgor I2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNkZWZp bmUgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpZmRlZiBSVUJZ X0VYVENPTkZfSAorI2luY2x1ZGUgUlVCWV9FWFRDT05GX0gKKyNlbmRpZgor CisjaWZuZGVmIEhBVkVfRkxPT1JMCisjZGVmaW5lIGZsb29ybCh4KSAoKGxv bmcgZG91YmxlKWZsb29yKChkb3VibGUpKHgpKSkKKyNlbmRpZgorI2lmbmRl ZiBIQVZFX1JPVU5ETAorI2RlZmluZSByb3VuZGwoeCkgKChsb25nIGRvdWJs ZSlyb3VuZCgoZG91YmxlKSh4KSkpCisjZW5kaWYKKworI2RlZmluZSBMSUdI VF9NT0RFICgxIDw8IDApCisjZGVmaW5lIEhBVkVfSkQgICAgKDEgPDwgMSkK KyNkZWZpbmUgSEFWRV9ERiAgICAoMSA8PCAyKQorI2RlZmluZSBIQVZFX0NJ VklMICgxIDw8IDMpCisjZGVmaW5lIEhBVkVfVElNRSAgKDEgPDwgNCkKKwor I2RlZmluZSBsaWdodF9tb2RlX3AoeCkgKCh4KS0+ZmxhZ3MgJiBMSUdIVF9N T0RFKQorI2RlZmluZSBoYXZlX2pkX3AoeCkgKCh4KS0+ZmxhZ3MgJiBIQVZF X0pEKQorI2RlZmluZSBoYXZlX2RmX3AoeCkgKCh4KS0+ZmxhZ3MgJiBIQVZF X0RGKQorI2RlZmluZSBoYXZlX2NpdmlsX3AoeCkgKCh4KS0+ZmxhZ3MgJiBI QVZFX0NJVklMKQorI2RlZmluZSBoYXZlX3RpbWVfcCh4KSAoKHgpLT5mbGFn cyAmIEhBVkVfVElNRSkKKworI2RlZmluZSBNSU5fWUVBUiAtNDcxMworI2Rl ZmluZSBNQVhfWUVBUiAxMDAwMDAwCisjZGVmaW5lIE1JTl9KRCAtMzI3Cisj ZGVmaW5lIE1BWF9KRCAzNjY5NjM5MjUKKworI2RlZmluZSBMSUdIVEFCTEVf SkQoaikgKGogPj0gTUlOX0pEICYmIGogPD0gTUFYX0pEKQorI2RlZmluZSBM SUdIVEFCTEVfWUVBUih5KSAoeSA+PSBNSU5fWUVBUiAmJiB5IDw9IE1BWF9Z RUFSKQorI2RlZmluZSBMSUdIVEFCTEVfQ1dZRUFSKHkpIExJR0hUQUJMRV9Z RUFSKHkpCisKKyNkZWZpbmUgSVRBTFkgMjI5OTE2MQorCisjZGVmaW5lIERB WV9JTl9TRUNPTkRTIDg2NDAwCisjZGVmaW5lIFNFQ09ORF9JTl9OQU5PU0VD T05EUyAxMDAwMDAwMDAwCisjZGVmaW5lIERBWV9JTl9OQU5PU0VDT05EUyA4 NjQwMDAwMDAwMDAwMExMCisKKy8qIGNvcGllZCBmcm9tIHRpbWUuYyAqLwor I2RlZmluZSBORElWKHgseSkgKC0oLSgoeCkrMSkvKHkpKS0xKQorI2RlZmlu ZSBOTU9EKHgseSkgKCh5KS0oLSgoeCkrMSklKHkpKS0xKQorI2RlZmluZSBE SVYobixkKSAoKG4pPDAgPyBORElWKChuKSwoZCkpIDogKG4pLyhkKSkKKyNk ZWZpbmUgTU9EKG4sZCkgKChuKTwwID8gTk1PRCgobiksKGQpKSA6IChuKSUo ZCkpCisKK3VuaW9uIERhdGVEYXRhCit7CisgIHVuc2lnbmVkIGZsYWdzOwor ICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGZsYWdzOworICAgIFZBTFVFIGFq ZDsKKyAgICBWQUxVRSBvZjsKKyAgICBWQUxVRSBzZzsKKyAgICBWQUxVRSBj YXNoOworICB9IHI7CisgIHN0cnVjdCB7CisgICAgdW5zaWduZWQgZmxhZ3M7 CisgICAgbG9uZyBqZDsJCS8qIGFzIHV0YyAqLworICAgIGRvdWJsZSBzZzsK KyAgICAvKiBkZWNvZGVkIGFzIHV0Yz1sb2NhbCAqLworICAgIGludCB5ZWFy OworICAgIGludCBtb247CisgICAgaW50IG1kYXk7CisgIH0gbDsKK307CisK K3VuaW9uIERhdGVUaW1lRGF0YQoreworICB1bnNpZ25lZCBmbGFnczsKKyAg c3RydWN0IHsKKyAgICB1bnNpZ25lZCBmbGFnczsKKyAgICBWQUxVRSBhamQ7 CisgICAgVkFMVUUgb2Y7CisgICAgVkFMVUUgc2c7CisgICAgVkFMVUUgY2Fz aDsKKyAgfSByOworICBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIGZsYWdzOwor ICAgIGxvbmcgamQ7CQkvKiBhcyB1dGMgKi8KKyAgICBpbnQgZGY7CQkvKiBh cyB1dGMsIGluIHNlY3MgKi8KKyAgICBsb25nIGxvbmcgc2Y7CS8qIGluIG5h bm8gc2VjcyAqLworICAgIGludCBvZjsJCS8qIGluIHNlY3MgKi8KKyAgICBk b3VibGUgc2c7CisgICAgLyogZGVjb2RlZCBhcyBsb2NhbCAqLworICAgIGlu dCB5ZWFyOworICAgIGludCBtb247CisgICAgaW50IG1kYXk7CisgICAgaW50 IGhvdXI7CisgICAgaW50IG1pbjsKKyAgICBpbnQgc2VjOworICB9IGw7Cit9 OworCisjZGVmaW5lIGdldF9kMSh4KSBcCisgIHVuaW9uIERhdGVEYXRhICpk YXQ7XAorICBEYXRhX0dldF9TdHJ1Y3QoeCwgdW5pb24gRGF0ZURhdGEsIGRh dCkKKworI2RlZmluZSBnZXRfZDIoeCx5KSBcCisgIHVuaW9uIERhdGVEYXRh ICphZGF0LCAqYmRhdDtcCisgIERhdGFfR2V0X1N0cnVjdCh4LCB1bmlvbiBE YXRlRGF0YSwgYWRhdCk7XAorICBEYXRhX0dldF9TdHJ1Y3QoeSwgdW5pb24g RGF0ZURhdGEsIGJkYXQpCisKKyNkZWZpbmUgZ2V0X2QxX2R0MSh4LHkpIFwK KyAgdW5pb24gRGF0ZURhdGEgKmFkYXQ7XAorICB1bmlvbiBEYXRlVGltZURh dGEgKmJkYXQ7XAorICBEYXRhX0dldF9TdHJ1Y3QoeCwgdW5pb24gRGF0ZURh dGEsIGFkYXQpO1wKKyAgRGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVU aW1lRGF0YSwgYmRhdCkKKworI2RlZmluZSBnZXRfZHQxKHgpIFwKKyAgdW5p b24gRGF0ZVRpbWVEYXRhICpkYXQ7XAorICBEYXRhX0dldF9TdHJ1Y3QoeCwg dW5pb24gRGF0ZVRpbWVEYXRhLCBkYXQpCisKKyNkZWZpbmUgZ2V0X2R0Mih4 LHkpIFwKKyAgdW5pb24gRGF0ZVRpbWVEYXRhICphZGF0LCAqYmRhdDtcCisg IERhdGFfR2V0X1N0cnVjdCh4LCB1bmlvbiBEYXRlVGltZURhdGEsIGFkYXQp O1wKKyAgRGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVUaW1lRGF0YSwg YmRhdCkKKworI2RlZmluZSBnZXRfZHQxX2QxKHgseSkgXAorICB1bmlvbiBE YXRlVGltZURhdGEgKmFkYXQ7XAorICB1bmlvbiBEYXRlRGF0YSAqYmRhdDtc CisgIERhdGFfR2V0X1N0cnVjdCh4LCB1bmlvbiBEYXRlVGltZURhdGEsIGFk YXQpO1wKKyAgRGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVEYXRhLCBi ZGF0KQorCisjZGVmaW5lIGdldF9kdDJfY2FzdCh4LHkpIFwKKyAgdW5pb24g RGF0ZURhdGEgKmF0bXAsICpidG1wO1wKKyAgdW5pb24gRGF0ZVRpbWVEYXRh IGFidWYsIGJidWYsICphZGF0LCAqYmRhdDsJXAorICBpZiAoa19kYXRldGlt ZV9wKHgpKVwKKyAgICBEYXRhX0dldF9TdHJ1Y3QoeCwgdW5pb24gRGF0ZVRp bWVEYXRhLCBhZGF0KTtcCisgIGVsc2Uge1wKKyAgICBEYXRhX0dldF9TdHJ1 Y3QoeCwgdW5pb24gRGF0ZURhdGEsIGF0bXApO1wKKyAgICBhYnVmLmwuamQg PSBhdG1wLT5sLmpkO1wKKyAgICBhYnVmLmwuZGYgPSAwO1wKKyAgICBhYnVm Lmwuc2YgPSAwO1wKKyAgICBhYnVmLmwub2YgPSAwO1wKKyAgICBhYnVmLmwu c2cgPSBhdG1wLT5sLnNnO1wKKyAgICBhYnVmLmwueWVhciA9IGF0bXAtPmwu eWVhcjtcCisgICAgYWJ1Zi5sLm1vbiA9IGF0bXAtPmwubW9uO1wKKyAgICBh YnVmLmwubWRheSA9IGF0bXAtPmwubWRheTtcCisgICAgYWJ1Zi5sLmhvdXIg PSAwO1wKKyAgICBhYnVmLmwubWluID0gMDtcCisgICAgYWJ1Zi5sLnNlYyA9 IDA7XAorICAgIGFidWYuZmxhZ3MgPSBIQVZFX0RGIHwgSEFWRV9USU1FIHwg YXRtcC0+bC5mbGFncztcCisgICAgYWRhdCA9ICZhYnVmO1wKKyAgfVwKKyAg aWYgKGtfZGF0ZXRpbWVfcCh5KSlcCisgICAgRGF0YV9HZXRfU3RydWN0KHks IHVuaW9uIERhdGVUaW1lRGF0YSwgYmRhdCk7XAorICBlbHNlIHtcCisgICAg RGF0YV9HZXRfU3RydWN0KHksIHVuaW9uIERhdGVEYXRhLCBidG1wKTtcCisg ICAgYmJ1Zi5sLmpkID0gYnRtcC0+bC5qZDtcCisgICAgYmJ1Zi5sLmRmID0g MDtcCisgICAgYmJ1Zi5sLnNmID0gMDtcCisgICAgYmJ1Zi5sLm9mID0gMDtc CisgICAgYmJ1Zi5sLnNnID0gYnRtcC0+bC5zZztcCisgICAgYmJ1Zi5sLnll YXIgPSBidG1wLT5sLnllYXI7XAorICAgIGJidWYubC5tb24gPSBidG1wLT5s Lm1vbjtcCisgICAgYmJ1Zi5sLm1kYXkgPSBidG1wLT5sLm1kYXk7XAorICAg IGJidWYubC5ob3VyID0gMDtcCisgICAgYmJ1Zi5sLm1pbiA9IDA7XAorICAg IGJidWYubC5zZWMgPSAwO1wKKyAgICBiYnVmLmZsYWdzID0gSEFWRV9ERiB8 IEhBVkVfVElNRSB8IGJ0bXAtPmwuZmxhZ3M7XAorICAgIGJkYXQgPSAmYmJ1 ZjtcCisgIH0KKworI2RlZmluZSBmX2FkZCh4LHkpIHJiX2Z1bmNhbGwoeCwg JysnLCAxLCB5KQorI2RlZmluZSBmX3N1Yih4LHkpIHJiX2Z1bmNhbGwoeCwg Jy0nLCAxLCB5KQorI2RlZmluZSBmX211bCh4LHkpIHJiX2Z1bmNhbGwoeCwg JyonLCAxLCB5KQorI2RlZmluZSBmX2Rpdih4LHkpIHJiX2Z1bmNhbGwoeCwg Jy8nLCAxLCB5KQorCisjZGVmaW5lIGZvcndhcmQwKGssbSkgcmJfZnVuY2Fs bChrLCByYl9pbnRlcm4obSksIDApCisjZGVmaW5lIGNmb3J3YXJkMChtKSBm b3J3YXJkMChrbGFzcywgbSkKKyNkZWZpbmUgaWZvcndhcmQwKG0pIGZvcndh cmQwKHNlbGYsIG0pCisjZGVmaW5lIGZvcndhcmQxKGssbSxhKSByYl9mdW5j YWxsKGssIHJiX2ludGVybihtKSwgMSwgYSkKKyNkZWZpbmUgaWZvcndhcmQx KG0sYSkgZm9yd2FyZDEoc2VsZiwgbSwgYSkKKyNkZWZpbmUgZm9yd2FyZHYo ayxtKSByYl9mdW5jYWxsMihrLCByYl9pbnRlcm4obSksIGFyZ2MsIGFyZ3Yp CisjZGVmaW5lIGNmb3J3YXJkdihtKSBmb3J3YXJkdihrbGFzcywgbSkKKyNk ZWZpbmUgaWZvcndhcmR2KG0pIGZvcndhcmR2KHNlbGYsIG0pCisjZGVmaW5l IGZvcndhcmRvcChrLG0pIHJiX2Z1bmNhbGwoaywgcmJfaW50ZXJuKG0pLCAx LCBvdGhlcikKKyNkZWZpbmUgaWZvcndhcmRvcChtKSBmb3J3YXJkb3Aoc2Vs ZiwgbSkKKworc3RhdGljIFZBTFVFIGNEYXRlLCBjRGF0ZVRpbWU7CitzdGF0 aWMgVkFMVUUgcnplcm8sIHJoYWxmLCBkYXlfaW5fbmFub3NlY29uZHM7CisK K3N0YXRpYyBpbnQgdmFsaWRfY2l2aWxfcChpbnQgeSwgaW50IG0sIGludCBk LCBkb3VibGUgc2csCisJCQkgaW50ICpybSwgaW50ICpyZCwgbG9uZyAqcmpk LCBpbnQgKm5zKTsKKworc3RhdGljIGludAorZmluZF9mZG95KGludCB5LCBk b3VibGUgc2csIGxvbmcgKnJqZCwgaW50ICpucykKK3sKKyAgaW50IGQsIHJt LCByZDsKKworICBmb3IgKGQgPSAxOyBkIDwgMzE7IGQrKykKKyAgICBpZiAo dmFsaWRfY2l2aWxfcCh5LCAxLCBkLCBzZywgJnJtLCAmcmQsIHJqZCwgbnMp KQorICAgICAgcmV0dXJuIDE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50CitmaW5kX2xkb3koaW50IHksIGRvdWJsZSBzZywgbG9uZyAqcmpkLCBp bnQgKm5zKQoreworICBpbnQgaSwgcm0sIHJkOworCisgIGZvciAoaSA9IDA7 IGkgPCAzMDsgaSsrKQorICAgIGlmICh2YWxpZF9jaXZpbF9wKHksIDEyLCAz MSAtIGksIHNnLCAmcm0sICZyZCwgcmpkLCBucykpCisgICAgICByZXR1cm4g MTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfZmRvbShp bnQgeSwgaW50IG0sIGRvdWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQor eworICBpbnQgZCwgcm0sIHJkOworCisgIGZvciAoZCA9IDE7IGQgPCAzMTsg ZCsrKQorICAgIGlmICh2YWxpZF9jaXZpbF9wKHksIG0sIGQsIHNnLCAmcm0s ICZyZCwgcmpkLCBucykpCisgICAgICByZXR1cm4gMTsKKyAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQKK2ZpbmRfbGRvbShpbnQgeSwgaW50IG0sIGRv dWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQoreworICBpbnQgaSwgcm0s IHJkOworCisgIGZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKQorICAgIGlmICh2 YWxpZF9jaXZpbF9wKHksIG0sIDMxIC0gaSwgc2csICZybSwgJnJkLCByamQs IG5zKSkKKyAgICAgIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworc3Rh dGljIHZvaWQKK2NpdmlsX3RvX2pkKGludCB5LCBpbnQgbSwgaW50IGQsIGRv dWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5zKQoreworICBkb3VibGUgYSwg YiwgamQ7CisKKyAgaWYgKG0gPD0gMikgeworICAgIHkgLT0gMTsKKyAgICBt ICs9IDEyOworICB9CisgIGEgPSBmbG9vcih5IC8gMTAwLjApOworICBiID0g MiAtIGEgKyBmbG9vcihhIC8gNC4wKTsKKyAgamQgPSBmbG9vcigzNjUuMjUg KiAoeSArIDQ3MTYpKSArCisgICAgZmxvb3IoMzAuNjAwMSAqIChtICsgMSkp ICsKKyAgICBkICsgYiAtIDE1MjQ7CisgIGlmIChqZCA8IHNnKSB7CisgICAg amQgLT0gYjsKKyAgICAqbnMgPSAwOworICB9IGVsc2UKKyAgICAqbnMgPSAx OworCisgICpyamQgPSBqZDsKK30KKworc3RhdGljIHZvaWQKK2pkX3RvX2Np dmlsKGxvbmcgamQsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpybSwgaW50 ICpyZG9tKQoreworICBkb3VibGUgeCwgYSwgYiwgYywgZCwgZSwgeSwgbSwg ZG9tOworCisgIGlmIChqZCA8IHNnKQorICAgIGEgPSBqZDsKKyAgZWxzZSB7 CisgICAgeCA9IGZsb29yKChqZCAtIDE4NjcyMTYuMjUpIC8gMzY1MjQuMjUp OworICAgIGEgPSBqZCArIDEgKyB4IC0gZmxvb3IoeCAvIDQuMCk7CisgIH0K KyAgYiA9IGEgKyAxNTI0OworICBjID0gZmxvb3IoKGIgLSAxMjIuMSkgLyAz NjUuMjUpOworICBkID0gZmxvb3IoMzY1LjI1ICogYyk7CisgIGUgPSBmbG9v cigoYiAtIGQpIC8gMzAuNjAwMSk7CisgIGRvbSA9IGIgLSBkIC0gZmxvb3Io MzAuNjAwMSAqIGUpOworICBpZiAoZSA8PSAxMykgeworICAgIG0gPSBlIC0g MTsKKyAgICB5ID0gYyAtIDQ3MTY7CisgIH0gZWxzZSB7CisgICAgbSA9IGUg LSAxMzsKKyAgICB5ID0gYyAtIDQ3MTU7CisgIH0KKworICAqcnkgPSB5Owor ICAqcm0gPSBtOworICAqcmRvbSA9IGRvbTsKK30KKworc3RhdGljIHZvaWQK K29yZGluYWxfdG9famQoaW50IHksIGludCBkLCBkb3VibGUgc2csIGxvbmcg KnJqZCwgaW50ICpucykKK3sKKyAgaW50IG5zMjsKKworICBmaW5kX2Zkb3ko eSwgc2csIHJqZCwgJm5zMik7CisgICpyamQgKz0gZCAtIDE7CisgICpucyA9 ICgqcmpkIDwgc2cpID8gMCA6IDE7Cit9CisKK3N0YXRpYyB2b2lkCitqZF90 b19vcmRpbmFsKGxvbmcgamQsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpy ZCkKK3sKKyAgaW50IHJtMiwgcmQyLCBuczsKKyAgbG9uZyByamQ7CisKKyAg amRfdG9fY2l2aWwoamQsIHNnLCByeSwgJnJtMiwgJnJkMik7CisgIGZpbmRf ZmRveSgqcnksIHNnLCAmcmpkLCAmbnMpOworICAqcmQgPSBqZCAtIHJqZCAr IDE7Cit9CisKK3N0YXRpYyB2b2lkCitjb21tZXJjaWFsX3RvX2pkKGludCB5 LCBpbnQgdywgaW50IGQsIGRvdWJsZSBzZywgbG9uZyAqcmpkLCBpbnQgKm5z KQoreworICBsb25nIHJqZDI7CisgIGludCBuczI7CisKKyAgZmluZF9mZG95 KHksIHNnLCAmcmpkMiwgJm5zMik7CisgIHJqZDIgKz0gMzsKKyAgKnJqZCA9 CisgICAgKHJqZDIgLSBNT0QoKHJqZDIgLSAxKSArIDEsIDcpKSArCisgICAg NyAqICh3IC0gMSkgKworICAgIChkIC0gMSk7CisgICpucyA9ICgqcmpkIDwg c2cpID8gMCA6IDE7Cit9CisKK3N0YXRpYyB2b2lkCitqZF90b19jb21tZXJj aWFsKGxvbmcgamQsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpydywgaW50 ICpyZCkKK3sKKyAgaW50IHJ5Miwgcm0yLCByZDIsIGEsIG5zMjsKKyAgbG9u ZyByamQyOworCisgIGpkX3RvX2NpdmlsKGpkIC0gMywgc2csICZyeTIsICZy bTIsICZyZDIpOworICBhID0gcnkyOworICBjb21tZXJjaWFsX3RvX2pkKGEg KyAxLCAxLCAxLCBzZywgJnJqZDIsICZuczIpOworICBpZiAoamQgPj0gcmpk MikKKyAgICAqcnkgPSBhICsgMTsKKyAgZWxzZSB7CisgICAgY29tbWVyY2lh bF90b19qZChhLCAxLCAxLCBzZywgJnJqZDIsICZuczIpOworICAgICpyeSA9 IGE7CisgIH0KKyAgKnJ3ID0gMSArIERJVihqZCAtIHJqZDIsICA3KTsKKyAg KnJkID0gTU9EKGpkICsgMSwgNyk7CisgIGlmICgqcmQgPT0gMCkKKyAgICAq cmQgPSA3OworfQorCitzdGF0aWMgdm9pZAord2Vla251bV90b19qZChpbnQg eSwgaW50IHcsIGludCBkLCBpbnQgZiwgZG91YmxlIHNnLCBsb25nICpyamQs IGludCAqbnMpCit7CisgIGxvbmcgcmpkMjsKKyAgaW50IG5zMjsKKworICBm aW5kX2Zkb3koeSwgc2csICZyamQyLCAmbnMyKTsKKyAgcmpkMiArPSA2Owor ICAqcmpkID0gKHJqZDIgLSBNT0QoKChyamQyIC0gZikgKyAxKSwgNykgLSA3 KSArIDcgKiB3ICsgZDsKKyAgKm5zID0gKCpyamQgPCBzZykgPyAwIDogMTsK K30KKworc3RhdGljIHZvaWQKK2pkX3RvX3dlZWtudW0obG9uZyBqZCwgaW50 IGYsIGRvdWJsZSBzZywgaW50ICpyeSwgaW50ICpydywgaW50ICpyZCkKK3sK KyAgaW50IHJtLCByZDIsIG5zOworICBsb25nIHJqZCwgajsKKworICBqZF90 b19jaXZpbChqZCwgc2csIHJ5LCAmcm0sICZyZDIpOworICBmaW5kX2Zkb3ko KnJ5LCBzZywgJnJqZCwgJm5zKTsKKyAgcmpkICs9IDY7CisgIGogPSBqZCAt IChyamQgLSBNT0QoKHJqZCAtIGYpICsgMSwgNykpICsgNzsKKyAgKnJ3ID0g RElWKGosIDcpOworICAqcmQgPSBNT0QoaiwgNyk7Cit9CisKK3N0YXRpYyB2 b2lkCitudGhfa2RheV90b19qZChpbnQgeSwgaW50IG0sIGludCBuLCBpbnQg aywgZG91YmxlIHNnLCBsb25nICpyamQsIGludCAqbnMpCit7CisgIGxvbmcg cmpkMjsKKyAgaW50IG5zMjsKKworICBpZiAobiA+IDApIHsKKyAgICBmaW5k X2Zkb20oeSwgbSwgc2csICZyamQyLCAmbnMyKTsKKyAgICByamQyIC09IDE7 CisgIH0gZWxzZSB7CisgICAgZmluZF9sZG9tKHksIG0sIHNnLCAmcmpkMiwg Jm5zMik7CisgICAgcmpkMiArPSA3OworICB9CisgICpyamQgPSAocmpkMiAt IE1PRCgocmpkMiAtIGspICsgMSwgNykpICsgNyAqIG47CisgICpucyA9ICgq cmpkIDwgc2cpID8gMCA6IDE7Cit9CisKK2lubGluZSBzdGF0aWMgaW50IGpk X3RvX3dkYXkobG9uZyBqZCk7CisKK3N0YXRpYyB2b2lkCitqZF90b19udGhf a2RheShsb25nIGpkLCBkb3VibGUgc2csIGludCAqcnksIGludCAqcm0sIGlu dCAqcm4sIGludCAqcmspCit7CisgIGludCByZCwgbnMyOworICBsb25nIHJq ZDsKKworICBqZF90b19jaXZpbChqZCwgc2csIHJ5LCBybSwgJnJkKTsKKyAg ZmluZF9mZG9tKCpyeSwgKnJtLCBzZywgJnJqZCwgJm5zMik7CisgICpybiA9 IERJVihqZCAtIHJqZCwgNykgKyAxOworICAqcmsgPSBqZF90b193ZGF5KGpk KTsKK30KKworc3RhdGljIGludAordmFsaWRfb3JkaW5hbF9wKGludCB5LCBp bnQgZCwgZG91YmxlIHNnLAorCQlpbnQgKnJkLCBsb25nICpyamQsIGludCAq bnMpCit7CisgIGludCByeTIsIHJkMjsKKworICBpZiAoZCA8IDApIHsKKyAg ICBsb25nIHJqZDI7CisgICAgaW50IG5zMjsKKworICAgIGlmICghZmluZF9s ZG95KHksIHNnLCAmcmpkMiwgJm5zMikpCisgICAgICByZXR1cm4gMDsKKyAg ICBqZF90b19vcmRpbmFsKHJqZDIgKyBkICsgMSwgc2csICZyeTIsICZyZDIp OworICAgIGlmIChyeTIgIT0geSkKKyAgICAgIHJldHVybiAwOworICAgIGQg PSByZDI7CisgIH0KKyAgb3JkaW5hbF90b19qZCh5LCBkLCBzZywgcmpkLCBu cyk7CisgIGpkX3RvX29yZGluYWwoKnJqZCwgc2csICZyeTIsICZyZDIpOwor ICBpZiAocnkyICE9IHkgfHwgcmQyICE9IGQpCisgICAgcmV0dXJuIDA7Cisg IHJldHVybiAxOworfQorCitzdGF0aWMgY29uc3QgaW50IG1vbnRodGFiWzJd WzEzXSA9IHsKKyAgeyAwLCAzMSwgMjgsIDMxLCAzMCwgMzEsIDMwLCAzMSwg MzEsIDMwLCAzMSwgMzAsIDMxIH0sCisgIHsgMCwgMzEsIDI5LCAzMSwgMzAs IDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSB9Cit9OworCitpbmxp bmUgc3RhdGljIGludAorbGVhcF9wKGludCB5KQoreworICByZXR1cm4gTU9E KHksIDQpID09IDAgJiYgeSAlIDEwMCAhPSAwIHx8IE1PRCh5LCA0MDApID09 IDA7Cit9CisKK3N0YXRpYyBpbnQKK2xhc3RfZGF5X29mX21vbnRoKGludCB5 LCBpbnQgbSkKK3sKKyAgcmV0dXJuIG1vbnRodGFiW2xlYXBfcCh5KSA/IDEg OiAwXVttXTsKK30KKworc3RhdGljIGludAordmFsaWRfZ3JlZ29yaWFuX3Ao aW50IHksIGludCBtLCBpbnQgZCwgaW50ICpybSwgaW50ICpyZCkKK3sKKyAg aW50IGxhc3Q7CisKKyAgaWYgKG0gPCAwKQorICAgIG0gKz0gMTM7CisgIGxh c3QgPSBsYXN0X2RheV9vZl9tb250aCh5LCBtKTsKKyAgaWYgKGQgPCAwKQor ICAgIGQgPSBsYXN0ICsgZCArIDE7CisKKyAgKnJtID0gbTsKKyAgKnJkID0g ZDsKKworICByZXR1cm4gIShtIDwgMCB8fCBtID4gMTIgfHwKKwkgICBkIDwg MSB8fCBkID4gbGFzdCk7Cit9CisKK3N0YXRpYyBpbnQKK3ZhbGlkX2Npdmls X3AoaW50IHksIGludCBtLCBpbnQgZCwgZG91YmxlIHNnLAorCSAgICAgIGlu dCAqcm0sIGludCAqcmQsIGxvbmcgKnJqZCwgaW50ICpucykKK3sKKyAgaW50 IHJ5OworCisgIGlmIChtIDwgMCkKKyAgICBtICs9IDEzOworICBpZiAoZCA8 IDApIHsKKyAgICBpZiAoIWZpbmRfbGRvbSh5LCBtLCBzZywgcmpkLCBucykp CisgICAgICByZXR1cm4gMDsKKyAgICBqZF90b19jaXZpbCgqcmpkICsgZCAr IDEsIHNnLCAmcnksIHJtLCByZCk7CisgICAgaWYgKHJ5ICE9IHkgfHwgKnJt ICE9IG0pCisgICAgICByZXR1cm4gMDsKKyAgICBkID0gKnJkOworICB9Cisg IGNpdmlsX3RvX2pkKHksIG0sIGQsIHNnLCByamQsIG5zKTsKKyAgamRfdG9f Y2l2aWwoKnJqZCwgc2csICZyeSwgcm0sIHJkKTsKKyAgaWYgKHJ5ICE9IHkg fHwgKnJtICE9IG0gfHwgKnJkICE9IGQpCisgICAgcmV0dXJuIDA7CisgIHJl dHVybiAxOworfQorCitzdGF0aWMgaW50Cit2YWxpZF9jb21tZXJjaWFsX3Ao aW50IHksIGludCB3LCBpbnQgZCwgZG91YmxlIHNnLAorCQkgICBpbnQgKnJ3 LCBpbnQgKnJkLCBsb25nICpyamQsIGludCAqbnMpCit7CisgIGludCBuczIs IHJ5MiwgcncyLCByZDI7CisKKyAgaWYgKGQgPCAwKQorICAgIGQgKz0gODsK KyAgaWYgKHcgPCAwKSB7CisgICAgbG9uZyByamQyOworCisgICAgY29tbWVy Y2lhbF90b19qZCh5ICsgMSwgMSwgMSwgc2csICZyamQyLCAmbnMyKTsKKyAg ICBqZF90b19jb21tZXJjaWFsKHJqZDIgKyB3ICogNywgc2csICZyeTIsICZy dzIsICZyZDIpOworICAgIGlmIChyeTIgIT0geSkKKyAgICAgIHJldHVybiAw OworICAgIHcgPSBydzI7CisgIH0KKyAgY29tbWVyY2lhbF90b19qZCh5LCB3 LCBkLCBzZywgcmpkLCBucyk7CisgIGpkX3RvX2NvbW1lcmNpYWwoKnJqZCwg c2csICZyeTIsIHJ3LCByZCk7CisgIGlmICh5ICE9IHJ5MiB8fCB3ICE9ICpy dyB8fCBkICE9ICpyZCkKKyAgICByZXR1cm4gMDsKKyAgcmV0dXJuIDE7Cit9 CisKK3N0YXRpYyBpbnQKK3ZhbGlkX3RpbWVfcChpbnQgaCwgaW50IG1pbiwg aW50IHMsIGludCAqcmgsIGludCAqcm1pbiwgaW50ICpycykKK3sKKyAgaWYg KGggPCAwKQorICAgIGggKz0gMjQ7CisgIGlmIChtaW4gPCAwKQorICAgIG1p biArPSA2MDsKKyAgaWYgKHMgPCAwKQorICAgIHMgKz0gNjA7CisgICpyaCA9 IGg7CisgICpybWluID0gbWluOworICAqcnMgPSBzOworICByZXR1cm4gISho ICAgPCAwIHx8IGggICA+IDI0IHx8CisJICAgbWluIDwgMCB8fCBtaW4gPiA1 OSB8fAorCSAgIHMgICA8IDAgfHwgcyAgID4gNTkgfHwKKwkgICAoaCA9PSAy NCAmJiAobWluID4gMCB8fCBzID4gMCkpKTsKK30KKworaW5saW5lIHN0YXRp YyBpbnQKK2RmX2xvY2FsX3RvX3V0YyhpbnQgZGYsIGludCBvZikKK3sKKyAg ZGYgLT0gb2Y7CisgIGlmIChkZiA8IDApCisgICAgZGYgKz0gREFZX0lOX1NF Q09ORFM7CisgIGVsc2UgaWYgKGRmID49IERBWV9JTl9TRUNPTkRTKQorICAg IGRmIC09IERBWV9JTl9TRUNPTkRTOworICByZXR1cm4gZGY7Cit9CisKK2lu bGluZSBzdGF0aWMgaW50CitkZl91dGNfdG9fbG9jYWwoaW50IGRmLCBpbnQg b2YpCit7CisgIGRmICs9IG9mOworICBpZiAoZGYgPCAwKQorICAgIGRmICs9 IERBWV9JTl9TRUNPTkRTOworICBlbHNlIGlmIChkZiA+PSBEQVlfSU5fU0VD T05EUykKKyAgICBkZiAtPSBEQVlfSU5fU0VDT05EUzsKKyAgcmV0dXJuIGRm OworfQorCitpbmxpbmUgc3RhdGljIGxvbmcKK2pkX2xvY2FsX3RvX3V0Yyhs b25nIGpkLCBpbnQgZGYsIGludCBvZikKK3sKKyAgZGYgLT0gb2Y7CisgIGlm IChkZiA8IDApCisgICAgamQgLT0gMTsKKyAgZWxzZSBpZiAoZGYgPj0gREFZ X0lOX1NFQ09ORFMpCisgICAgamQgKz0gMTsKKyAgcmV0dXJuIGpkOworfQor CitpbmxpbmUgc3RhdGljIGxvbmcKK2pkX3V0Y190b19sb2NhbChsb25nIGpk LCBpbnQgZGYsIGludCBvZikKK3sKKyAgZGYgKz0gb2Y7CisgIGlmIChkZiA8 IDApCisgICAgamQgLT0gMTsKKyAgZWxzZSBpZiAoZGYgPj0gREFZX0lOX1NF Q09ORFMpCisgICAgamQgKz0gMTsKKyAgcmV0dXJuIGpkOworfQorCitpbmxp bmUgc3RhdGljIGludAordGltZV90b19kZihpbnQgaCwgaW50IG1pbiwgaW50 IHMpCit7CisgIHJldHVybiBoICogMzYwMCArIG1pbiAqIDYwICsgczsKK30K KworaW5saW5lIHN0YXRpYyBpbnQKK2pkX3RvX3dkYXkobG9uZyBqZCkKK3sK KyAgcmV0dXJuIE1PRChqZCArIDEsIDcpOworfQorCitzdGF0aWMgaW50Citk YXlkaWZmX3RvX3NlYyhWQUxVRSB2b2YsIGludCAqcm9mKQoreworICBzd2l0 Y2ggKFRZUEUodm9mKSkgeworICBjYXNlIFRfRklYTlVNOgorICAgIHsKKyAg ICAgIGludCBuOworCisgICAgICBuID0gRklYMklOVCh2b2YpOworICAgICAg aWYgKG4gIT0gLTEgJiYgbiAhPSAwICYmIG4gIT0gMSkKKwlyZXR1cm4gMDsK KyAgICAgICpyb2YgPSBuICogREFZX0lOX1NFQ09ORFM7CisgICAgICByZXR1 cm4gMTsKKyAgICB9CisgIGNhc2UgVF9GTE9BVDoKKyAgICB7CisgICAgICBk b3VibGUgbjsKKworICAgICAgbiA9IE5VTTJEQkwodm9mKTsKKyAgICAgIGlm IChuIDwgLURBWV9JTl9TRUNPTkRTIHx8IG4gPiBEQVlfSU5fU0VDT05EUykK KwlyZXR1cm4gMDsKKyAgICAgICpyb2YgPSByb3VuZChuICogREFZX0lOX1NF Q09ORFMpOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICBjYXNlIFRfUkFU SU9OQUw6CisgICAgeworICAgICAgVkFMVUUgdnMgPSBmX211bCh2b2YsIElO VDJGSVgoREFZX0lOX1NFQ09ORFMpKTsKKyAgICAgIFZBTFVFIHZuID0gUlJB VElPTkFMKHZzKS0+bnVtOworICAgICAgVkFMVUUgdmQgPSBSUkFUSU9OQUwo dnMpLT5kZW47CisgICAgICBpbnQgbiwgZDsKKworICAgICAgaWYgKCFGSVhO VU1fUCh2bikgfHwgIUZJWE5VTV9QKHZkKSkKKwlyZXR1cm4gMDsKKyAgICAg IG4gPSBGSVgySU5UKHZuKTsKKyAgICAgIGQgPSBGSVgySU5UKHZkKTsKKyAg ICAgIGlmIChkICE9IDEpCisJcmV0dXJuIDA7CisgICAgICBpZiAobiA8IC1E QVlfSU5fU0VDT05EUyB8fCBuID4gREFZX0lOX1NFQ09ORFMpCisJcmV0dXJu IDA7CisgICAgICAqcm9mID0gbjsKKyAgICAgIHJldHVybiAxOworICAgIH0K KyAgY2FzZSBUX1NUUklORzoKKyAgICB7CisgICAgICBWQUxVRSB2cyA9IHJi X2Z1bmNhbGwoY0RhdGUsIHJiX2ludGVybigiem9uZV90b19kaWZmIiksIDEs IHZvZik7CisgICAgICBpbnQgbjsKKworICAgICAgaWYgKCFGSVhOVU1fUCh2 cykpCisJcmV0dXJuIDA7CisgICAgICBuID0gRklYMklOVCh2cyk7CisgICAg ICBpZiAobiA8IC1EQVlfSU5fU0VDT05EUyB8fCBuID4gREFZX0lOX1NFQ09O RFMpCisJcmV0dXJuIDA7CisgICAgICAqcm9mID0gbjsKKyAgICAgIHJldHVy biAxOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworaW5saW5lIHN0 YXRpYyB2b2lkCitnZXRfZF9qZCh1bmlvbiBEYXRlRGF0YSAqeCkKK3sKKyAg aWYgKCFoYXZlX2pkX3AoeCkpIHsKKyAgICBsb25nIGpkOworICAgIGludCBu czsKKworICAgIGFzc2VydChoYXZlX2NpdmlsX3AoeCkpOworCisgICAgY2l2 aWxfdG9famQoeC0+bC55ZWFyLCB4LT5sLm1vbiwgeC0+bC5tZGF5LCB4LT5s LnNnLCAmamQsICZucyk7CisgICAgeC0+bC5qZCA9IGpkOworICAgIHgtPmwu ZmxhZ3MgfD0gSEFWRV9KRDsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIHZv aWQKK2dldF9kX2NpdmlsKHVuaW9uIERhdGVEYXRhICp4KQoreworICBpZiAo IWhhdmVfY2l2aWxfcCh4KSkgeworICAgIGludCB5LCBtLCBkOworCisgICAg YXNzZXJ0KGhhdmVfamRfcCh4KSk7CisKKyAgICBqZF90b19jaXZpbCh4LT5s LmpkLCB4LT5sLnNnLCAmeSwgJm0sICZkKTsKKyAgICB4LT5sLnllYXIgPSB5 OworICAgIHgtPmwubW9uID0gbTsKKyAgICB4LT5sLm1kYXkgPSBkOworICAg IHgtPmwuZmxhZ3MgfD0gSEFWRV9DSVZJTDsKKyAgfQorfQorCitpbmxpbmUg c3RhdGljIHZvaWQKK2dldF9kdF9kZih1bmlvbiBEYXRlVGltZURhdGEgKngp Cit7CisgIGlmICghaGF2ZV9kZl9wKHgpKSB7CisgICAgYXNzZXJ0KGhhdmVf dGltZV9wKHgpKTsKKworICAgIHgtPmwuZGYgPSBkZl9sb2NhbF90b191dGMo dGltZV90b19kZih4LT5sLmhvdXIsIHgtPmwubWluLCB4LT5sLnNlYyksCisJ CQkgICAgICB4LT5sLm9mKTsKKyAgICB4LT5sLmZsYWdzIHw9IEhBVkVfREY7 CisgIH0KK30KKworaW5saW5lIHN0YXRpYyB2b2lkCitnZXRfZHRfdGltZSh1 bmlvbiBEYXRlVGltZURhdGEgKngpCit7CisgIGludCByOworCisgIGlmICgh aGF2ZV90aW1lX3AoeCkpIHsKKyAgICBhc3NlcnQoaGF2ZV9kZl9wKHgpKTsK KworICAgIHIgPSBkZl91dGNfdG9fbG9jYWwoeC0+bC5kZiwgeC0+bC5vZik7 CisgICAgeC0+bC5ob3VyID0gciAvIDM2MDA7CisgICAgciAlPSAzNjAwOwor ICAgIHgtPmwubWluID0gciAvIDYwOworICAgIHgtPmwuc2VjID0gciAlIDYw OworICAgIHgtPmwuZmxhZ3MgfD0gSEFWRV9USU1FOworICB9Cit9CisKK2lu bGluZSBzdGF0aWMgdm9pZAorZ2V0X2R0X2pkKHVuaW9uIERhdGVUaW1lRGF0 YSAqeCkKK3sKKyAgaWYgKCFoYXZlX2pkX3AoeCkpIHsKKyAgICBsb25nIGpk OworICAgIGludCBuczsKKworICAgIGFzc2VydChoYXZlX2NpdmlsX3AoeCkp OworCisgICAgY2l2aWxfdG9famQoeC0+bC55ZWFyLCB4LT5sLm1vbiwgeC0+ bC5tZGF5LCB4LT5sLnNnLCAmamQsICZucyk7CisKKyAgICBnZXRfZHRfdGlt ZSh4KTsKKyAgICB4LT5sLmpkID0gamRfbG9jYWxfdG9fdXRjKGpkLAorCQkJ ICAgIHRpbWVfdG9fZGYoeC0+bC5ob3VyLCB4LT5sLm1pbiwgeC0+bC5zZWMp LAorCQkJICAgIHgtPmwub2YpOworICAgIHgtPmwuZmxhZ3MgfD0gSEFWRV9K RDsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIHZvaWQKK2dldF9kdF9jaXZp bCh1bmlvbiBEYXRlVGltZURhdGEgKngpCit7CisgIGlmICghaGF2ZV9jaXZp bF9wKHgpKSB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgeSwgbSwgZDsKKwor ICAgIGFzc2VydChoYXZlX2pkX3AoeCkpOworCisgICAgZ2V0X2R0X2RmKHgp OworICAgIGpkID0gamRfdXRjX3RvX2xvY2FsKHgtPmwuamQsIHgtPmwuZGYs IHgtPmwub2YpOworICAgIGpkX3RvX2NpdmlsKGpkLCB4LT5sLnNnLCAmeSwg Jm0sICZkKTsKKyAgICB4LT5sLnllYXIgPSB5OworICAgIHgtPmwubW9uID0g bTsKKyAgICB4LT5sLm1kYXkgPSBkOworICAgIHgtPmwuZmxhZ3MgfD0gSEFW RV9DSVZJTDsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIGxvbmcKK2xvY2Fs X2pkKHVuaW9uIERhdGVUaW1lRGF0YSAqeCkKK3sKKyAgYXNzZXJ0KGhhdmVf amRfcCh4KSk7CisgIGFzc2VydChoYXZlX2RmX3AoeCkpOworICByZXR1cm4g amRfdXRjX3RvX2xvY2FsKHgtPmwuamQsIHgtPmwuZGYsIHgtPmwub2YpOwor fQorCitpbmxpbmUgc3RhdGljIGludAorbG9jYWxfZGYodW5pb24gRGF0ZVRp bWVEYXRhICp4KQoreworICBhc3NlcnQoaGF2ZV9kZl9wKHgpKTsKKyAgcmV0 dXJuIGRmX3V0Y190b19sb2NhbCh4LT5sLmRmLCB4LT5sLm9mKTsKK30KKwor aW5saW5lIHN0YXRpYyBWQUxVRQorZl9raW5kX29mX3AoVkFMVUUgeCwgVkFM VUUgYykKK3sKKyAgcmV0dXJuIHJiX29ial9pc19raW5kX29mKHgsIGMpOwor fQorCitpbmxpbmUgc3RhdGljIFZBTFVFCitrX2RhdGVfcChWQUxVRSB4KQor eworICByZXR1cm4gZl9raW5kX29mX3AoeCwgY0RhdGUpOworfQorCitpbmxp bmUgc3RhdGljIFZBTFVFCitrX2RhdGV0aW1lX3AoVkFMVUUgeCkKK3sKKyAg cmV0dXJuIGZfa2luZF9vZl9wKHgsIGNEYXRlVGltZSk7Cit9CisKK2lubGlu ZSBzdGF0aWMgVkFMVUUKK2tfbnVtZXJpY19wKFZBTFVFIHgpCit7CisgIHJl dHVybiBmX2tpbmRfb2ZfcCh4LCByYl9jTnVtZXJpYyk7Cit9CisKK3N0YXRp YyBWQUxVRQorZGF0ZV9zX3ZhbGlkX2pkX3AoaW50IGFyZ2MsIFZBTFVFICph cmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUgdmpkLCB2c2c7CisKKyAg cmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIxMSIsICZ2amQsICZ2c2cpOwor CisgIHJldHVybiBRdHJ1ZTsKK30KKworc3RhdGljIFZBTFVFCitkYXRlX3Nf dmFsaWRfY2l2aWxfcChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGts YXNzKQoreworICBWQUxVRSB2eSwgdm0sIHZkLCB2c2c7CisgIGludCB5LCBt LCBkLCBybSwgcmQ7CisgIGRvdWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3Mo YXJnYywgYXJndiwgIjMxIiwgJnZ5LCAmdm0sICZ2ZCwgJnZzZyk7CisKKyAg aWYgKCEoRklYTlVNX1AodnkpICYmCisJRklYTlVNX1Aodm0pICYmCisJRklY TlVNX1AodmQpKSkKKyAgICByZXR1cm4gY2ZvcndhcmR2KCJ2YWxpZF9jaXZp bF9yPyIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5VTTJE QkwodnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9IC00 NzEyOworICBtID0gMTsKKyAgZCA9IDE7CisKKyAgc3dpdGNoIChhcmdjKSB7 CisgIGNhc2UgNDoKKyAgY2FzZSAzOgorICAgIGQgPSBOVU0yTE9ORyh2ZCk7 CisgIGNhc2UgMjoKKyAgICBtID0gTlVNMkxPTkcodm0pOworICBjYXNlIDE6 CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJMRV9Z RUFSKHkpKQorICAgICAgcmV0dXJuIGNmb3J3YXJkdigidmFsaWRfY2l2aWxf cj8iKTsKKyAgfQorCisgIGlmIChpc2luZihzZykgJiYgc2cgPCAwKSB7Cisg ICAgaWYgKCF2YWxpZF9ncmVnb3JpYW5fcCh5LCBtLCBkLCAmcm0sICZyZCkp CisgICAgICByZXR1cm4gUWZhbHNlOworICAgIHJldHVybiBRdHJ1ZTsKKyAg fSBlbHNlIHsKKyAgICBsb25nIGpkOworICAgIGludCBuczsKKworICAgIGlm ICghdmFsaWRfY2l2aWxfcCh5LCBtLCBkLCBzZywgJnJtLCAmcmQsICZqZCwg Jm5zKSkKKyAgICAgIHJldHVybiBRZmFsc2U7CisgICAgcmV0dXJuIFF0cnVl OworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX3ZhbGlkX29yZGlu YWxfcChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQorewor ICBWQUxVRSB2eSwgdmQsIHZzZzsKKyAgaW50IHksIGQsIHJkOworICBkb3Vi bGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIyMSIsICZ2 eSwgJnZkLCAmdnNnKTsKKworICBpZiAoIShGSVhOVU1fUCh2eSkgJiYKKwlG SVhOVU1fUCh2ZCkpKQorICAgIHJldHVybiBjZm9yd2FyZHYoInZhbGlkX29y ZGluYWxfcj8iKTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBO VU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIHkg PSAtNDcxMjsKKyAgZCA9IDE7CisKKyAgc3dpdGNoIChhcmdjKSB7CisgIGNh c2UgMzoKKyAgY2FzZSAyOgorICAgIGQgPSBOVU0yTE9ORyh2ZCk7CisgIGNh c2UgMToKKyAgICB5ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRB QkxFX1lFQVIoeSkpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJ2YWxpZF9v cmRpbmFsX3I/Iik7CisgIH0KKworICB7CisgICAgbG9uZyBqZDsKKyAgICBp bnQgbnM7CisKKyAgICBpZiAoIXZhbGlkX29yZGluYWxfcCh5LCBkLCBzZywg JnJkLCAmamQsICZucykpCisgICAgICByZXR1cm4gUWZhbHNlOworICAgIHJl dHVybiBRdHJ1ZTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RhdGVfc192 YWxpZF9jb21tZXJjaWFsX3AoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxV RSBrbGFzcykKK3sKKyAgVkFMVUUgdnksIHZ3LCB2ZCwgdnNnOworICBpbnQg eSwgdywgZCwgcncsIHJkOworICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9h cmdzKGFyZ2MsIGFyZ3YsICIzMSIsICZ2eSwgJnZ3LCAmdmQsICZ2c2cpOwor CisgIGlmICghKEZJWE5VTV9QKHZ5KSAmJgorCUZJWE5VTV9QKHZ3KSAmJgor CUZJWE5VTV9QKHZkKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigidmFsaWRf Y29tbWVyY2lhbF9yPyIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBz ZyA9IE5VTTJEQkwodnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisK KyAgeSA9IC00NzEyOworICB3ID0gMTsKKyAgZCA9IDE7CisKKyAgc3dpdGNo IChhcmdjKSB7CisgIGNhc2UgNDoKKyAgY2FzZSAzOgorICAgIGQgPSBOVU0y TE9ORyh2ZCk7CisgIGNhc2UgMjoKKyAgICB3ID0gTlVNMkxPTkcodncpOwor ICBjYXNlIDE6CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJ R0hUQUJMRV9DV1lFQVIoeSkpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJ2 YWxpZF9jb21tZXJjaWFsX3I/Iik7CisgIH0KKworICB7CisgICAgbG9uZyBq ZDsKKyAgICBpbnQgbnM7CisKKyAgICBpZiAoIXZhbGlkX2NvbW1lcmNpYWxf cCh5LCB3LCBkLCBzZywgJnJ3LCAmcmQsICZqZCwgJm5zKSkKKyAgICAgIHJl dHVybiBRZmFsc2U7CisgICAgcmV0dXJuIFF0cnVlOworICB9Cit9CisKK3N0 YXRpYyB2b2lkCitkX3JpZ2h0X2djX21hcmsodW5pb24gRGF0ZURhdGEgKmRh dCkKK3sKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkgeworICAgIHJiX2dj X21hcmsoZGF0LT5yLmFqZCk7CisgICAgcmJfZ2NfbWFyayhkYXQtPnIub2Yp OworICAgIHJiX2djX21hcmsoZGF0LT5yLnNnKTsKKyAgICByYl9nY19tYXJr KGRhdC0+ci5jYXNoKTsKKyAgfQorfQorCitpbmxpbmUgc3RhdGljIFZBTFVF CitkX3JpZ2h0X3NfbmV3X2ludGVybmFsKFZBTFVFIGtsYXNzLCBWQUxVRSBh amQsIFZBTFVFIG9mLCBWQUxVRSBzZywKKwkJICAgICAgIHVuc2lnbmVkIGZs YWdzKQoreworICB1bmlvbiBEYXRlRGF0YSAqZGF0OworICBWQUxVRSBvYmo7 CisKKyAgb2JqID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgdW5pb24gRGF0 ZURhdGEsIGRfcmlnaHRfZ2NfbWFyaywgLTEsIGRhdCk7CisKKyAgZGF0LT5y LmFqZCA9IGFqZDsKKyAgZGF0LT5yLm9mID0gb2Y7CisgIGRhdC0+ci5zZyA9 IHNnOworICBkYXQtPnIuY2FzaCA9IHJiX2hhc2hfbmV3KCk7CisgIGRhdC0+ ci5mbGFncyA9IGZsYWdzOworCisgIHJldHVybiBvYmo7Cit9CisKK2lubGlu ZSBzdGF0aWMgVkFMVUUKK2RfbGl0ZV9zX25ld19pbnRlcm5hbChWQUxVRSBr bGFzcywgbG9uZyBqZCwgZG91YmxlIHNnLAorCQkgICAgICBpbnQgeSwgaW50 IG0sIGludCBkLCB1bnNpZ25lZCBmbGFncykKK3sKKyAgdW5pb24gRGF0ZURh dGEgKmRhdDsKKyAgVkFMVUUgb2JqOworCisgIG9iaiA9IERhdGFfTWFrZV9T dHJ1Y3Qoa2xhc3MsIHVuaW9uIERhdGVEYXRhLCBkX3JpZ2h0X2djX21hcmss IC0xLCBkYXQpOworCisgIGRhdC0+bC5qZCA9IGpkOworICBkYXQtPmwuc2cg PSBzZzsKKyAgZGF0LT5sLnllYXIgPSB5OworICBkYXQtPmwubW9uID0gbTsK KyAgZGF0LT5sLm1kYXkgPSBkOworICBkYXQtPmwuZmxhZ3MgPSBmbGFnczsK KworICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9z X25ld19pbnRlcm5hbF93b19jaXZpbChWQUxVRSBrbGFzcywgbG9uZyBqZCwg ZG91YmxlIHNnLAorCQkJICAgICAgIHVuc2lnbmVkIGZsYWdzKQoreworICBy ZXR1cm4gZF9saXRlX3NfbmV3X2ludGVybmFsKGtsYXNzLCBqZCwgc2csIDAs IDAsIDAsIGZsYWdzKTsKK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfc19h bGxvYyhWQUxVRSBrbGFzcykKK3sKKyAgcmV0dXJuIGRfbGl0ZV9zX25ld19p bnRlcm5hbF93b19jaXZpbChrbGFzcywgMCwgMCwgMCk7Cit9CisKK3N0YXRp YyBWQUxVRQorZF9yaWdodF9zX25ld19yX2JhbmcoaW50IGFyZ2MsIFZBTFVF ICphcmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUgdmFqZCwgdm9mLCB2 c2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIwMyIsICZ2YWpk LCAmdm9mLCAmdnNnKTsKKworICBpZiAoYXJnYyA8IDEpCisgICAgdmFqZCA9 IElOVDJGSVgoMCk7CisgIGlmIChhcmdjIDwgMikKKyAgICB2b2YgPSBJTlQy RklYKDApOworICBpZiAoYXJnYyA8IDMpCisgICAgdnNnID0gREJMMk5VTShJ VEFMWSk7CisKKyAgcmV0dXJuIGRfcmlnaHRfc19uZXdfaW50ZXJuYWwoa2xh c3MsIHZhamQsIHZvZiwgdnNnLCAwKTsKK30KKworc3RhdGljIFZBTFVFCitk X2xpdGVfc19uZXdfbF9iYW5nKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFM VUUga2xhc3MpCit7CisgIFZBTFVFIHZqZCwgdnNnOworICBsb25nIGpkOwor ICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIw MiIsICZ2amQsICZ2c2cpOworCisgIGlmIChhcmdjIDwgMSkKKyAgICBqZCA9 IDA7CisgIGVsc2UgeworICAgIGlmICghRklYTlVNX1AodmpkKSkKKyAgICAg IHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgImNhbm5vdCBjcmVhdGUiKTsKKyAg ICBqZCA9IE5VTTJMT05HKHZqZCk7CisgICAgaWYgKCFMSUdIVEFCTEVfSkQo amQpKQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiY2Fubm90IGNy ZWF0ZSIpOworICB9CisgIGlmIChhcmdjIDwgMikKKyAgICBzZyA9IDA7Cisg IGVsc2UKKyAgICBzZyA9IE5VTTJEQkwodnNnKTsKKworICByZXR1cm4gZF9s aXRlX3NfbmV3X2ludGVybmFsX3dvX2NpdmlsKGtsYXNzLAorCQkJCQlqZCwK KwkJCQkJc2csCisJCQkJCUxJR0hUX01PREUgfCBIQVZFX0pEKTsKK30KKwor c3RhdGljIFZBTFVFCitkYXRlX3NfbmV3X3JfYmFuZyhpbnQgYXJnYywgVkFM VUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICByZXR1cm4gZF9yaWdodF9z X25ld19yX2JhbmcoYXJnYywgYXJndiwga2xhc3MpOworfQorCitzdGF0aWMg VkFMVUUKK2RhdGVfc19uZXdfbF9iYW5nKGludCBhcmdjLCBWQUxVRSAqYXJn diwgVkFMVUUga2xhc3MpCit7CisgIHJldHVybiBkX2xpdGVfc19uZXdfbF9i YW5nKGFyZ2MsIGFyZ3YsIGtsYXNzKTsKK30KKworc3RhdGljIFZBTFVFCitk YXRlX3NfamQoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykK K3sKKyAgVkFMVUUgdmpkLCB2c2c7CisgIGxvbmcgamQ7CisgIGRvdWJsZSBz ZzsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjAyIiwgJnZqZCwg JnZzZyk7CisKKyAgaWYgKCFGSVhOVU1fUCh2amQpKQorICAgIHJldHVybiBj Zm9yd2FyZHYoImpkX3IiKTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAg c2cgPSBOVU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOwor CisgIGlmIChhcmdjID49IDEpIHsKKyAgICBqZCA9IE5VTTJMT05HKHZqZCk7 CisgICAgaWYgKCFMSUdIVEFCTEVfSkQoamQpKQorICAgICAgcmV0dXJuIGNm b3J3YXJkdigiamRfciIpOworICB9IGVsc2UKKyAgICBqZCA9IDA7CisKKyAg aWYgKGpkIDwgc2cpCisgICAgcmV0dXJuIGNmb3J3YXJkdigiamRfciIpOwor CisgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2aWwoa2xh c3MsIGpkLCBzZywgTElHSFRfTU9ERSB8IEhBVkVfSkQpOworfQorCitzdGF0 aWMgVkFMVUUKK2RhdGVfc19vcmRpbmFsKGludCBhcmdjLCBWQUxVRSAqYXJn diwgVkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2ZCwgdnNnOworICBp bnQgeSwgZCwgcmQ7CisgIGRvdWJsZSBzZzsKKworICByYl9zY2FuX2FyZ3Mo YXJnYywgYXJndiwgIjAzIiwgJnZ5LCAmdmQsICZ2c2cpOworCisgIGlmICgh KChOSUxfUCh2eSkgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2ZCkg fHwgRklYTlVNX1AodmQpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigib3Jk aW5hbF9yIik7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0gTlVN MkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworICB5ID0g LTQ3MTI7CisgIGQgPSAxOworCisgIHN3aXRjaCAoYXJnYykgeworICBjYXNl IDM6CisgIGNhc2UgMjoKKyAgICBkID0gTlVNMkxPTkcodmQpOworICBjYXNl IDE6CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBpZiAoIUxJR0hUQUJM RV9ZRUFSKHkpKQorICAgICAgcmV0dXJuIGNmb3J3YXJkdigib3JkaW5hbF9y Iik7CisgIH0KKworICB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisK KyAgICBpZiAoIXZhbGlkX29yZGluYWxfcCh5LCBkLCBzZywgJnJkLCAmamQs ICZucykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZhbGlk IGRhdGUiKTsKKworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSB8fCAhbnMp CisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJvcmRpbmFsX3IiKTsKKworICAg IHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2aWwoa2xhc3Ms IGpkLCBzZywgTElHSFRfTU9ERSB8IEhBVkVfSkQpOworICB9Cit9CisKK3N0 YXRpYyBWQUxVRQorZGF0ZV9zX2NpdmlsKGludCBhcmdjLCBWQUxVRSAqYXJn diwgVkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2bSwgdmQsIHZzZzsK KyAgaW50IHksIG0sIGQsIHJtLCByZDsKKyAgZG91YmxlIHNnOworCisgIHJi X3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDQiLCAmdnksICZ2bSwgJnZkLCAm dnNnKTsKKworICBpZiAoISgoTklMX1AodnkpIHx8IEZJWE5VTV9QKHZ5KSkg JiYKKwkoTklMX1Aodm0pIHx8IEZJWE5VTV9QKHZtKSkgJiYKKwkoTklMX1Ao dmQpIHx8IEZJWE5VTV9QKHZkKSkpKQorICAgIHJldHVybiBjZm9yd2FyZHYo ImNpdmlsX3IiKTsKKworICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBO VU0yREJMKHZzZyk7CisgIGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIHkg PSAtNDcxMjsKKyAgbSA9IDE7CisgIGQgPSAxOworCisgIHN3aXRjaCAoYXJn YykgeworICBjYXNlIDQ6CisgIGNhc2UgMzoKKyAgICBkID0gTlVNMkxPTkco dmQpOworICBjYXNlIDI6CisgICAgbSA9IE5VTTJMT05HKHZtKTsKKyAgY2Fz ZSAxOgorICAgIHkgPSBOVU0yTE9ORyh2eSk7CisgICAgaWYgKCFMSUdIVEFC TEVfWUVBUih5KSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNpdmlsX3Ii KTsKKyAgfQorCisgIGlmIChpc2luZihzZykgJiYgc2cgPCAwKSB7CisgICAg aWYgKCF2YWxpZF9ncmVnb3JpYW5fcCh5LCBtLCBkLCAmcm0sICZyZCkpCisg ICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJpbnZhbGlkIGRhdGUiKTsK KworICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsIDAs IHNnLCB5LCBybSwgcmQsCisJCQkJIExJR0hUX01PREUgfCBIQVZFX0NJVklM KTsKKyAgfSBlbHNlIHsKKyAgICBsb25nIGpkOworICAgIGludCBuczsKKwor ICAgIGlmICghdmFsaWRfY2l2aWxfcCh5LCBtLCBkLCBzZywgJnJtLCAmcmQs ICZqZCwgJm5zKSkKKyAgICAgIHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgImlu dmFsaWQgZGF0ZSIpOworCisgICAgaWYgKCFMSUdIVEFCTEVfSkQoamQpIHx8 ICFucykKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNpdmlsX3IiKTsKKwor ICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsIGpkLCBz ZywgeSwgcm0sIHJkLAorCQkJCSBMSUdIVF9NT0RFIHwgSEFWRV9KRCB8IEhB VkVfQ0lWSUwpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX2Nv bW1lcmNpYWwoaW50IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykK K3sKKyAgVkFMVUUgdnksIHZ3LCB2ZCwgdnNnOworICBpbnQgeSwgdywgZCwg cncsIHJkOworICBkb3VibGUgc2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2Ms IGFyZ3YsICIwNCIsICZ2eSwgJnZ3LCAmdmQsICZ2c2cpOworCisgIGlmICgh KChOSUxfUCh2eSkgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2dykg fHwgRklYTlVNX1AodncpKSAmJgorCShOSUxfUCh2ZCkgfHwgRklYTlVNX1Ao dmQpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigiY29tbWVyY2lhbF9yIik7 CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0gTlVNMkRCTCh2c2cp OworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworICB5ID0gLTQ3MTI7Cisg IHcgPSAxOworICBkID0gMTsKKworICBzd2l0Y2ggKGFyZ2MpIHsKKyAgY2Fz ZSA0OgorICBjYXNlIDM6CisgICAgZCA9IE5VTTJMT05HKHZkKTsKKyAgY2Fz ZSAyOgorICAgIHcgPSBOVU0yTE9ORyh2dyk7CisgIGNhc2UgMToKKyAgICB5 ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRBQkxFX0NXWUVBUih5 KSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNvbW1lcmNpYWxfciIpOwor ICB9CisKKyAgeworICAgIGxvbmcgamQ7CisgICAgaW50IG5zOworCisgICAg aWYgKCF2YWxpZF9jb21tZXJjaWFsX3AoeSwgdywgZCwgc2csICZydywgJnJk LCAmamQsICZucykpCisgICAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJp bnZhbGlkIGRhdGUiKTsKKworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSB8 fCAhbnMpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJjb21tZXJjaWFsX3Ii KTsKKworICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29fY2l2 aWwoa2xhc3MsIGpkLCBzZywgTElHSFRfTU9ERSB8IEhBVkVfSkQpOworICB9 Cit9CisKKyNpZiAhZGVmaW5lZChIQVZFX0dNVElNRV9SKQorc3RhdGljIHN0 cnVjdCB0bSoKK2xvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdCwgc3RydWN0 IHRtICp0bSkKK3sKKyAgYXV0byBzdHJ1Y3QgdG0gKnRtcCA9IGxvY2FsdGlt ZSh0KTsKKyAgaWYgKHRtcCkKKyAgICAqdG0gPSAqdG1wOworICByZXR1cm4g dG1wOworfQorI2VuZGlmCisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX3RvZGF5 KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3MpCit7CisgIFZB TFVFIHZzZzsKKyAgZG91YmxlIHNnOworICB0aW1lX3QgdDsKKyAgc3RydWN0 IHRtIHRtOworICBpbnQgeSwgbSwgZDsKKworICByYl9zY2FuX2FyZ3MoYXJn YywgYXJndiwgIjAxIiwgJnZzZyk7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQor ICAgIHNnID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFM WTsKKworICBpZiAodGltZSgmdCkgPT0gLTEpCisgICAgcmJfc3lzX2ZhaWwo InRpbWUiKTsKKyAgbG9jYWx0aW1lX3IoJnQsICZ0bSk7CisKKyAgeSA9IHRt LnRtX3llYXIgKyAxOTAwOworICBtID0gdG0udG1fbW9uICsgMTsKKyAgZCA9 IHRtLnRtX21kYXk7CisKKyAgaWYgKGlzaW5mKHNnKSAmJiBzZyA8IDApCisg ICAgcmV0dXJuIGRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywgMCwgc2cs IHksIG0sIGQsCisJCQkJIExJR0hUX01PREUgfCBIQVZFX0NJVklMKTsKKyAg ZWxzZSB7CisgICAgbG9uZyBqZDsKKyAgICBpbnQgbnM7CisKKyAgICBjaXZp bF90b19qZCh5LCBtLCBkLCBzZywgJmpkLCAmbnMpOworCisgICAgcmV0dXJu IGRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywgamQsIHNnLCB5LCBtLCBk LAorCQkJCSBMSUdIVF9NT0RFIHwgSEFWRV9KRCB8IEhBVkVfQ0lWSUwpOwor ICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2FqZChWQUxVRSBzZWxm KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh dCkpCisgICAgcmV0dXJuIGRhdC0+ci5hamQ7CisgIHsKKyAgICBnZXRfZF9q ZChkYXQpOworICAgIHJldHVybiBmX3N1YihJTlQyRklYKGRhdC0+bC5qZCks IHJoYWxmKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9hbWpk KFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdo dF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJhbWpkX3Ii KTsKKyAgeworICAgIGdldF9kX2pkKGRhdCk7CisgICAgcmV0dXJuIHJiX3Jh dGlvbmFsX25ldzEoTE9ORzJOVU0oZGF0LT5sLmpkIC0gMjQwMDAwMUwpKTsK KyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9qZChWQUxVRSBzZWxm KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiamRfciIpOworICB7CisgICAg Z2V0X2RfamQoZGF0KTsKKyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwuamQp OworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX21qZChWQUxVRSBz ZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9w KGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgibWpkX3IiKTsKKyAgewor ICAgIGdldF9kX2pkKGRhdCk7CisgICAgcmV0dXJuIExPTkcyTlVNKGRhdC0+ bC5qZCAtIDI0MDAwMDFMKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2Rf bGl0ZV9sZChWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlm ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgi bGRfciIpOworICB7CisgICAgZ2V0X2RfamQoZGF0KTsKKyAgICByZXR1cm4g TE9ORzJOVU0oZGF0LT5sLmpkIC0gMjI5OTE2MEwpOworICB9Cit9CisKK3N0 YXRpYyBWQUxVRQorZF9saXRlX3llYXIoVkFMVUUgc2VsZikKK3sKKyAgZ2V0 X2QxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJl dHVybiBpZm9yd2FyZDAoInllYXJfciIpOworICB7CisgICAgZ2V0X2RfY2l2 aWwoZGF0KTsKKyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwueWVhcik7Cisg IH0KK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfeWRheShWQUxVRSBzZWxm KQoreworICBpbnQgcnksIHJkOworCisgIGdldF9kMShzZWxmKTsKKyAgaWYg KCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJ5 ZGF5X3IiKTsKKyAgeworICAgIGdldF9kX2pkKGRhdCk7CisgICAgamRfdG9f b3JkaW5hbChkYXQtPmwuamQsIGRhdC0+bC5zZywgJnJ5LCAmcmQpOworICAg IHJldHVybiBJTlQyRklYKHJkKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUK K2RfbGl0ZV9tb24oVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOwor ICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2Fy ZDAoIm1vbl9yIik7CisgIHsKKyAgICBnZXRfZF9jaXZpbChkYXQpOworICAg IHJldHVybiBJTlQyRklYKGRhdC0+bC5tb24pOworICB9Cit9CisKK3N0YXRp YyBWQUxVRQorZF9saXRlX21kYXkoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2Qx KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy biBpZm9yd2FyZDAoIm1kYXlfciIpOworICB7CisgICAgZ2V0X2RfY2l2aWwo ZGF0KTsKKyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwubWRheSk7CisgIH0K K30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfZGF5X2ZyYWN0aW9uKFZBTFVF IHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2Rl X3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJkYXlfZnJhY3Rpb25f ciIpOworICByZXR1cm4gSU5UMkZJWCgwKTsKK30KKworc3RhdGljIFZBTFVF CitkX2xpdGVfd251bTAoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywg cmQ7CisKKyAgZ2V0X2QxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChk YXQpKQorICAgIHJldHVybiBpZm9yd2FyZDAoIndudW0wX3IiKTsKKyAgewor ICAgIGdldF9kX2pkKGRhdCk7CisgICAgamRfdG9fd2Vla251bShkYXQtPmwu amQsIDAsIGRhdC0+bC5zZywgJnJ5LCAmcncsICZyZCk7CisgICAgcmV0dXJu IElOVDJGSVgocncpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRl X3dudW0xKFZBTFVFIHNlbGYpCit7CisgIGludCByeSwgcncsIHJkOworCisg IGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAg ICByZXR1cm4gaWZvcndhcmQwKCJ3bnVtMV9yIik7CisgIHsKKyAgICBnZXRf ZF9qZChkYXQpOworICAgIGpkX3RvX3dlZWtudW0oZGF0LT5sLmpkLCAxLCBk YXQtPmwuc2csICZyeSwgJnJ3LCAmcmQpOworICAgIHJldHVybiBJTlQyRklY KHJ3KTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9ob3VyKFZB TFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYgKCFsaWdodF9t b2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJob3VyX3IiKTsK KyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9s aXRlX21pbihWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlm ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgi bWluX3IiKTsKKyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBW QUxVRQorZF9saXRlX3NlYyhWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2Vs Zik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlm b3J3YXJkMCgic2VjX3IiKTsKKyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisK K3N0YXRpYyBWQUxVRQorZF9saXRlX3NlY19mcmFjdGlvbihWQUxVRSBzZWxm KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgic2VjX2ZyYWN0aW9uX3IiKTsK KyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9s aXRlX29mZnNldChWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7Cisg IGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGRhdC0+ci5v ZjsKKyAgcmV0dXJuIElOVDJGSVgoMCk7Cit9CisKK3N0YXRpYyBWQUxVRQor ZF9saXRlX3pvbmUoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2QxKHNlbGYpOwor ICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2Fy ZDAoInpvbmVfciIpOworICByZXR1cm4gcmJfdXNhc2NpaV9zdHJfbmV3Migi KzAwOjAwIik7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2N3eWVhcihW QUxVRSBzZWxmKQoreworICBpbnQgcnksIHJ3LCByZDsKKworICBnZXRfZDEo c2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJu IGlmb3J3YXJkMCgiY3d5ZWFyX3IiKTsKKyAgeworICAgIGdldF9kX2pkKGRh dCk7CisgICAgamRfdG9fY29tbWVyY2lhbChkYXQtPmwuamQsIGRhdC0+bC5z ZywgJnJ5LCAmcncsICZyZCk7CisgICAgcmV0dXJuIElOVDJGSVgocnkpOwor ICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2N3ZWVrKFZBTFVFIHNl bGYpCit7CisgIGludCByeSwgcncsIHJkOworCisgIGdldF9kMShzZWxmKTsK KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh cmQwKCJjd2Vla19yIik7CisgIHsKKyAgICBnZXRfZF9qZChkYXQpOworICAg IGpkX3RvX2NvbW1lcmNpYWwoZGF0LT5sLmpkLCBkYXQtPmwuc2csICZyeSwg JnJ3LCAmcmQpOworICAgIHJldHVybiBJTlQyRklYKHJ3KTsKKyAgfQorfQor CitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9jd2RheShWQUxVRSBzZWxmKQorewor ICBpbnQgdzsKKworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9k ZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiY3dkYXlfciIpOwor ICB7CisgICAgZ2V0X2RfamQoZGF0KTsKKyAgICB3ID0gamRfdG9fd2RheShk YXQtPmwuamQpOworICAgIGlmICh3ID09IDApCisgICAgICB3ID0gNzsKKyAg ICByZXR1cm4gSU5UMkZJWCh3KTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUK K2RfbGl0ZV93ZGF5KFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsK KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh cmQwKCJ3ZGF5X3IiKTsKKyAgeworICAgIGdldF9kX2pkKGRhdCk7CisgICAg cmV0dXJuIElOVDJGSVgoamRfdG9fd2RheShkYXQtPmwuamQpKTsKKyAgfQor fQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9qdWxpYW5fcChWQUxVRSBzZWxm KQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgianVsaWFuX3I/Iik7CisgIHJl dHVybiBRZmFsc2U7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2dyZWdv cmlhbl9wKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAgaWYg KCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJn cmVnb3JpYW5fcj8iKTsKKyAgcmV0dXJuIFF0cnVlOworfQorCitzdGF0aWMg VkFMVUUKK2RfbGl0ZV9sZWFwX3AoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2Qx KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy biBpZm9yd2FyZDAoImxlYXBfcj8iKTsKKyAgeworICAgIGdldF9kX2Npdmls KGRhdCk7CisgICAgcmV0dXJuIGxlYXBfcChkYXQtPmwueWVhcikgPyBRdHJ1 ZSA6IFFmYWxzZTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9z dGFydChWQUxVRSBzZWxmKQoreworICBnZXRfZDEoc2VsZik7CisgIGlmICgh bGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGRhdC0+ci5zZzsKKyAg cmV0dXJuIERCTDJOVU0oZGF0LT5sLnNnKTsKK30KKworc3RhdGljIFZBTFVF CitkX2xpdGVfbmV3X3N0YXJ0KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFM VUUgc2VsZikKK3sKKyAgVkFMVUUgdnNnOworICBkb3VibGUgc2c7CisKKyAg Z2V0X2QxKHNlbGYpOworCisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisg ICAgcmV0dXJuIGlmb3J3YXJkdigibmV3X3N0YXJ0X3IiKTsKKworICByYl9z Y2FuX2FyZ3MoYXJnYywgYXJndiwgIjAxIiwgJnZzZyk7CisKKyAgaWYgKCFO SUxfUCh2c2cpKQorICAgIHNnID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisg ICAgc2cgPSBJVEFMWTsKKworICB7CisgICAgZ2V0X2RfamQoZGF0KTsKKwor ICAgIGlmIChkYXQtPmwuamQgPCBzZykKKyAgICAgIHJldHVybiBpZm9yd2Fy ZHYoIm5ld19zdGFydF9yIik7CisKKyAgICByZXR1cm4gZF9saXRlX3NfbmV3 X2ludGVybmFsX3dvX2NpdmlsKENMQVNTX09GKHNlbGYpLAorCQkJCQkgIGRh dC0+bC5qZCwKKwkJCQkJICBzZywKKwkJCQkJICBMSUdIVF9NT0RFIHwgSEFW RV9KRCk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfbmV3X29m ZnNldChpbnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIHNlbGYpCit7Cisg IFZBTFVFIHZvZjsKKyAgaW50IHJvZjsKKworICBnZXRfZDEoc2VsZik7CisK KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh cmR2KCJuZXdfb2Zmc2V0X3IiKTsKKworICByYl9zY2FuX2FyZ3MoYXJnYywg YXJndiwgIjAxIiwgJnZvZik7CisKKyAgaWYgKE5JTF9QKHZvZikpCisgICAg cm9mID0gMDsKKyAgZWxzZSB7CisgICAgaWYgKCFkYXlkaWZmX3RvX3NlYyh2 b2YsICZyb2YpIHx8IHJvZiAhPSAwKQorICAgICAgcmV0dXJuIGlmb3J3YXJk digibmV3X29mZnNldF9yIik7CisgIH0KKworICB7CisgICAgZ2V0X2RfamQo ZGF0KTsKKworICAgIHJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJuYWxfd29f Y2l2aWwoQ0xBU1NfT0Yoc2VsZiksCisJCQkJCSAgZGF0LT5sLmpkLAorCQkJ CQkgIGRhdC0+bC5zZywKKwkJCQkJICBMSUdIVF9NT0RFIHwgSEFWRV9KRCk7 CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkX2xpdGVfcGx1cyhWQUxVRSBz ZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgZ2V0X2QxKHNlbGYpOworCisgIGlm ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkb3Ao InBsdXNfciIpOworCisgIHN3aXRjaCAoVFlQRShvdGhlcikpIHsKKyAgY2Fz ZSBUX0ZJWE5VTToKKyAgICB7CisgICAgICBsb25nIGpkOworCisgICAgICBn ZXRfZF9qZChkYXQpOworCisgICAgICBqZCA9IGRhdC0+bC5qZCArIEZJWDJM T05HKG90aGVyKTsKKworICAgICAgaWYgKExJR0hUQUJMRV9KRChqZCkgJiYg amQgPj0gZGF0LT5sLnNnKQorCXJldHVybiBkX2xpdGVfc19uZXdfaW50ZXJu YWwoQ0xBU1NfT0Yoc2VsZiksCisJCQkJICAgICBqZCwgZGF0LT5sLnNnLAor CQkJCSAgICAgMCwgMCwgMCwKKwkJCQkgICAgIGRhdC0+bC5mbGFncyAmIH5I QVZFX0NJVklMKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgVF9GTE9B VDoKKyAgICB7CisgICAgICBkb3VibGUgZCA9IE5VTTJEQkwob3RoZXIpOwor ICAgICAgbG9uZyBsID0gcm91bmQoZCk7CisgICAgICBpZiAobCA9PSBkICYm IExJR0hUQUJMRV9KRChsKSkKKwlyZXR1cm4gZF9saXRlX3BsdXMoc2VsZiwg SU5UMkZJWChsKSk7CisgICAgfQorICAgIGJyZWFrOworICB9CisgIHJldHVy biBpZm9yd2FyZG9wKCJwbHVzX3IiKTsKK30KKworc3RhdGljIFZBTFVFCitt aW51c19kZChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgZ2V0X2R0 Ml9jYXN0KHNlbGYsIG90aGVyKTsKKworICBpZiAobGlnaHRfbW9kZV9wKGFk YXQpICYmCisgICAgICBsaWdodF9tb2RlX3AoYmRhdCkpIHsKKyAgICBsb25n IGQ7CisgICAgaW50IGRmLCBzZjsKKyAgICBWQUxVRSByOworICAgICAgCisg ICAgZ2V0X2R0X2pkKGFkYXQpOworICAgIGdldF9kdF9qZChiZGF0KTsKKyAg ICBnZXRfZHRfZGYoYWRhdCk7CisgICAgZ2V0X2R0X2RmKGJkYXQpOworCisg ICAgZCA9IGFkYXQtPmwuamQgLSBiZGF0LT5sLmpkOworICAgIGRmID0gYWRh dC0+bC5kZiAtIGJkYXQtPmwuZGY7CisgICAgc2YgPSBhZGF0LT5sLnNmIC0g YmRhdC0+bC5zZjsKKyAgICBpZiAoZGYgPCAwKSB7CisgICAgICBkIC09IDE7 CisgICAgICBkZiArPSBEQVlfSU5fU0VDT05EUzsKKyAgICB9IGVsc2UgaWYg KGRmID49IERBWV9JTl9TRUNPTkRTKSB7CisgICAgICBkICs9IDE7CisgICAg ICBkZiAtPSBEQVlfSU5fU0VDT05EUzsKKyAgICB9CisgICAgaWYgKHNmIDwg MCkgeworICAgICAgZGYgLT0gMTsKKyAgICAgIHNmICs9IFNFQ09ORF9JTl9O QU5PU0VDT05EUzsKKyAgICB9IGVsc2UgaWYgKHNmID49IFNFQ09ORF9JTl9O QU5PU0VDT05EUykgeworICAgICAgZGYgKz0gMTsKKyAgICAgIHNmIC09IFNF Q09ORF9JTl9OQU5PU0VDT05EUzsKKyAgICB9CisgICAgciA9IHJiX3JhdGlv bmFsX25ldzEoTE9ORzJOVU0oZCkpOworICAgIGlmIChkZikKKyAgICAgIHIg PSBmX2FkZChyLCByYl9yYXRpb25hbF9uZXcyKElOVDJGSVgoZGYpLCBJTlQy RklYKERBWV9JTl9TRUNPTkRTKSkpOworICAgIGlmIChzZikKKyAgICAgIHIg PSBmX2FkZChyLCByYl9yYXRpb25hbF9uZXcyKElOVDJGSVgoc2YpLCBkYXlf aW5fbmFub3NlY29uZHMpKTsKKyAgICByZXR1cm4gcjsKKyAgfQorICByZXR1 cm4gaWZvcndhcmRvcCgibWludXNfciIpOworfQorCitzdGF0aWMgVkFMVUUK K2RfbGl0ZV9taW51cyhWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAg aWYgKGtfZGF0ZXRpbWVfcChvdGhlcikpCisgICAgcmV0dXJuIG1pbnVzX2Rk KHNlbGYsIG90aGVyKTsKKworICBhc3NlcnQoIWtfZGF0ZXRpbWVfcChvdGhl cikpOworICBpZiAoa19kYXRlX3Aob3RoZXIpKSB7CisgICAgZ2V0X2QyKHNl bGYsIG90aGVyKTsKKworICAgIGlmIChsaWdodF9tb2RlX3AoYWRhdCkgJiYK KwlsaWdodF9tb2RlX3AoYmRhdCkpIHsKKyAgICAgIGxvbmcgZDsKKyAgICAg IAorICAgICAgZ2V0X2RfamQoYWRhdCk7CisgICAgICBnZXRfZF9qZChiZGF0 KTsKKworICAgICAgZCA9IGFkYXQtPmwuamQgLSBiZGF0LT5sLmpkOworICAg ICAgcmV0dXJuIHJiX3JhdGlvbmFsX25ldzEoTE9ORzJOVU0oZCkpOworICAg IH0KKyAgfQorCisgIHN3aXRjaCAoVFlQRShvdGhlcikpIHsKKyAgY2FzZSBU X0ZJWE5VTToKKyAgICByZXR1cm4gZF9saXRlX3BsdXMoc2VsZiwgTE9ORzJO VU0oLUZJWDJMT05HKG90aGVyKSkpOworICBjYXNlIFRfRkxPQVQ6CisgICAg cmV0dXJuIGRfbGl0ZV9wbHVzKHNlbGYsIERCTDJOVU0oLU5VTTJEQkwob3Ro ZXIpKSk7CisgIH0KKyAgcmV0dXJuIGlmb3J3YXJkb3AoIm1pbnVzX3IiKTsK K30KKworc3RhdGljIFZBTFVFCitjbXBfZGQoVkFMVUUgc2VsZiwgVkFMVUUg b3RoZXIpCit7CisgIGdldF9kdDJfY2FzdChzZWxmLCBvdGhlcik7CisKKyAg aWYgKGxpZ2h0X21vZGVfcChhZGF0KSAmJgorICAgICAgbGlnaHRfbW9kZV9w KGJkYXQpKSB7CisgICAgZ2V0X2R0X2pkKGFkYXQpOworICAgIGdldF9kdF9q ZChiZGF0KTsKKyAgICBnZXRfZHRfZGYoYWRhdCk7CisgICAgZ2V0X2R0X2Rm KGJkYXQpOworCisgICAgaWYgKGFkYXQtPmwuamQgPT0gYmRhdC0+bC5qZCkg eworICAgICAgaWYgKGFkYXQtPmwuZGYgPT0gYmRhdC0+bC5kZikgeworCWlm IChhZGF0LT5sLnNmID09IGJkYXQtPmwuc2YpIHsKKwkgIHJldHVybiBJTlQy RklYKDApOworCX0gZWxzZSBpZiAoYWRhdC0+bC5zZiA8IGJkYXQtPmwuc2Yp IHsKKwkgIHJldHVybiBJTlQyRklYKC0xKTsKKwl9IGVsc2UgeworCSAgcmV0 dXJuIElOVDJGSVgoMSk7CisJfQorICAgICAgfSBlbHNlIGlmIChhZGF0LT5s LmRmIDwgYmRhdC0+bC5kZikgeworCXJldHVybiBJTlQyRklYKC0xKTsKKyAg ICAgIH0gZWxzZSB7CisJcmV0dXJuIElOVDJGSVgoMSk7CisgICAgICB9Cisg ICAgfSBlbHNlIGlmIChhZGF0LT5sLmpkIDwgYmRhdC0+bC5qZCkgeworICAg ICAgcmV0dXJuIElOVDJGSVgoLTEpOworICAgIH0gZWxzZSB7CisgICAgICBy ZXR1cm4gSU5UMkZJWCgxKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGlmb3J3 YXJkb3AoImNtcF9yIik7Cit9CisKK3N0YXRpYyBWQUxVRQorZF9saXRlX2Nt cChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgaWYgKGtfZGF0ZXRp bWVfcChvdGhlcikpCisgICAgcmV0dXJuIGNtcF9kZChzZWxmLCBvdGhlcik7 CisKKyAgYXNzZXJ0KCFrX2RhdGV0aW1lX3Aob3RoZXIpKTsKKyAgaWYgKGtf ZGF0ZV9wKG90aGVyKSkgeworICAgIGdldF9kMihzZWxmLCBvdGhlcik7CisK KyAgICBpZiAobGlnaHRfbW9kZV9wKGFkYXQpICYmCisJbGlnaHRfbW9kZV9w KGJkYXQpKSB7CisgICAgICBpZiAoaGF2ZV9qZF9wKGFkYXQpICYmCisJICBo YXZlX2pkX3AoYmRhdCkpIHsKKwlpZiAoYWRhdC0+bC5qZCA9PSBiZGF0LT5s LmpkKQorCSAgcmV0dXJuIElOVDJGSVgoMCk7CisJaWYgKGFkYXQtPmwuamQg PCBiZGF0LT5sLmpkKQorCSAgcmV0dXJuIElOVDJGSVgoLTEpOworCXJldHVy biBJTlQyRklYKDEpOworICAgICAgfSBlbHNlIHsKKwlnZXRfZF9jaXZpbChh ZGF0KTsKKwlnZXRfZF9jaXZpbChiZGF0KTsKKworCWlmIChhZGF0LT5sLnll YXIgPT0gYmRhdC0+bC55ZWFyKSB7CisJICBpZiAoYWRhdC0+bC5tb24gPT0g YmRhdC0+bC5tb24pIHsKKwkgICAgaWYgKGFkYXQtPmwubWRheSA9PSBiZGF0 LT5sLm1kYXkpIHsKKwkgICAgICByZXR1cm4gSU5UMkZJWCgwKTsKKwkgICAg fSBlbHNlIGlmIChhZGF0LT5sLm1kYXkgPCBiZGF0LT5sLm1kYXkpIHsKKwkg ICAgICByZXR1cm4gSU5UMkZJWCgtMSk7CisJICAgIH0gZWxzZSB7CisJICAg ICAgcmV0dXJuIElOVDJGSVgoMSk7CisJICAgIH0KKwkgIH0gZWxzZSBpZiAo YWRhdC0+bC5tb24gPCBiZGF0LT5sLm1vbikgeworCSAgICByZXR1cm4gSU5U MkZJWCgtMSk7CisJICB9IGVsc2UgeworCSAgICByZXR1cm4gSU5UMkZJWCgx KTsKKwkgIH0KKwl9IGVsc2UgaWYgKGFkYXQtPmwueWVhciA8IGJkYXQtPmwu eWVhcikgeworCSAgcmV0dXJuIElOVDJGSVgoLTEpOworCX0gZWxzZSB7CisJ ICByZXR1cm4gSU5UMkZJWCgxKTsKKwl9CisgICAgICB9CisgICAgfQorICB9 CisgIHJldHVybiBpZm9yd2FyZG9wKCJjbXBfciIpOworfQorCitzdGF0aWMg VkFMVUUKK2VxdWFsX2RkKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVyKQorewor ICBnZXRfZHQyX2Nhc3Qoc2VsZiwgb3RoZXIpOworCisgIGlmIChsaWdodF9t b2RlX3AoYWRhdCkgJiYKKyAgICAgIGxpZ2h0X21vZGVfcChiZGF0KSkgewor ICAgIGdldF9kdF9qZChhZGF0KTsKKyAgICBnZXRfZHRfamQoYmRhdCk7Cisg ICAgZ2V0X2R0X2RmKGFkYXQpOworICAgIGdldF9kdF9kZihiZGF0KTsKKwor ICAgIGlmIChsb2NhbF9qZChhZGF0KSA9PSBsb2NhbF9qZChiZGF0KSkKKyAg ICAgIHJldHVybiBRdHJ1ZTsKKyAgICByZXR1cm4gUWZhbHNlOworICB9Cisg IHJldHVybiBpZm9yd2FyZG9wKCJlcXVhbF9yIik7Cit9CisKK3N0YXRpYyBW QUxVRQorZF9saXRlX2VxdWFsKFZBTFVFIHNlbGYsIFZBTFVFIG90aGVyKQor eworICBpZiAoa19kYXRldGltZV9wKG90aGVyKSkKKyAgICByZXR1cm4gZXF1 YWxfZGQoc2VsZiwgb3RoZXIpOworCisgIGFzc2VydCgha19kYXRldGltZV9w KG90aGVyKSk7CisgIGlmIChrX2RhdGVfcChvdGhlcikpIHsKKyAgICBnZXRf ZDIoc2VsZiwgb3RoZXIpOworCisgICAgaWYgKGxpZ2h0X21vZGVfcChhZGF0 KSAmJgorCWxpZ2h0X21vZGVfcChiZGF0KSkgeworICAgICAgaWYgKGhhdmVf amRfcChhZGF0KSAmJgorCSAgaGF2ZV9qZF9wKGJkYXQpKSB7CisJaWYgKGFk YXQtPmwuamQgPT0gYmRhdC0+bC5qZCkKKwkgIHJldHVybiBRdHJ1ZTsKKwly ZXR1cm4gUWZhbHNlOworICAgICAgfSBlbHNlIHsKKwlnZXRfZF9jaXZpbChh ZGF0KTsKKwlnZXRfZF9jaXZpbChiZGF0KTsKKworCWlmIChhZGF0LT5sLnll YXIgPT0gYmRhdC0+bC55ZWFyKQorCSAgaWYgKGFkYXQtPmwubW9uID09IGJk YXQtPmwubW9uKQorCSAgICBpZiAoYWRhdC0+bC5tZGF5ID09IGJkYXQtPmwu bWRheSkKKwkgICAgICByZXR1cm4gUXRydWU7CisJcmV0dXJuIFFmYWxzZTsK KyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGlmb3J3YXJkb3AoImVx dWFsX3IiKTsKK30KKworc3RhdGljIFZBTFVFCitlcWxfcF9kZChWQUxVRSBz ZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgZ2V0X2R0Ml9jYXN0KHNlbGYsIG90 aGVyKTsKKworICBpZiAobGlnaHRfbW9kZV9wKGFkYXQpICYmCisgICAgICBs aWdodF9tb2RlX3AoYmRhdCkpIHsKKyAgICBnZXRfZHRfamQoYWRhdCk7Cisg ICAgZ2V0X2R0X2pkKGJkYXQpOworICAgIGdldF9kdF9kZihhZGF0KTsKKyAg ICBnZXRfZHRfZGYoYmRhdCk7CisKKyAgICBpZiAoYWRhdC0+bC5qZCA9PSBi ZGF0LT5sLmpkKQorICAgICAgaWYgKGFkYXQtPmwuZGYgPT0gYmRhdC0+bC5k ZikKKwlpZiAoYWRhdC0+bC5zZiA9PSBiZGF0LT5sLnNmKQorCSAgcmV0dXJu IFF0cnVlOworICAgIHJldHVybiBRZmFsc2U7CisgIH0KKyAgcmV0dXJuIGlm b3J3YXJkb3AoImVxbF9yPyIpOworfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0 ZV9lcWxfcChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAgaWYgKGtf ZGF0ZXRpbWVfcChvdGhlcikpCisgICAgcmV0dXJuIGVxbF9wX2RkKHNlbGYs IG90aGVyKTsKKworICBhc3NlcnQoIWtfZGF0ZXRpbWVfcChvdGhlcikpOwor ICBpZiAoa19kYXRlX3Aob3RoZXIpKSB7CisgICAgZ2V0X2QyKHNlbGYsIG90 aGVyKTsKKworICAgIGlmIChsaWdodF9tb2RlX3AoYWRhdCkgJiYKKwlsaWdo dF9tb2RlX3AoYmRhdCkpIHsKKyAgICAgIGlmIChoYXZlX2pkX3AoYWRhdCkg JiYKKwkgIGhhdmVfamRfcChiZGF0KSkgeworCWlmIChhZGF0LT5sLmpkID09 IGJkYXQtPmwuamQpCisJICByZXR1cm4gUXRydWU7CisJcmV0dXJuIFFmYWxz ZTsKKyAgICAgIH0gZWxzZSB7CisJZ2V0X2RfY2l2aWwoYWRhdCk7CisJZ2V0 X2RfY2l2aWwoYmRhdCk7CisKKwlpZiAoYWRhdC0+bC55ZWFyID09IGJkYXQt PmwueWVhcikKKwkgIGlmIChhZGF0LT5sLm1vbiA9PSBiZGF0LT5sLm1vbikK KwkgICAgaWYgKGFkYXQtPmwubWRheSA9PSBiZGF0LT5sLm1kYXkpCisJICAg ICAgcmV0dXJuIFF0cnVlOworCXJldHVybiBRZmFsc2U7CisgICAgICB9Cisg ICAgfQorICB9CisgIHJldHVybiBpZm9yd2FyZG9wKCJlcWxfcj8iKTsKK30K Kworc3RhdGljIFZBTFVFCitkX2xpdGVfaGFzaChWQUxVRSBzZWxmKQorewor ICBnZXRfZDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisg ICAgcmV0dXJuIGlmb3J3YXJkMCgiaGFzaF9yIik7CisgIHJldHVybiByYl9o YXNoKGRfbGl0ZV9hamQoc2VsZikpOworfQorCitzdGF0aWMgVkFMVUUKK2Rf bGl0ZV90b19zKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShzZWxmKTsKKyAg aWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQw KCJ0b19zX3IiKTsKKyAgeworICAgIGdldF9kX2NpdmlsKGRhdCk7CisgICAg cmV0dXJuIHJiX2VuY19zcHJpbnRmKHJiX3VzYXNjaWlfZW5jb2RpbmcoKSwK KwkJCSAgIiUuNGQtJTAyZC0lMDJkIiwKKwkJCSAgZGF0LT5sLnllYXIsIGRh dC0+bC5tb24sIGRhdC0+bC5tZGF5KTsKKyAgfQorfQorCitzdGF0aWMgVkFM VUUKK2RfbGl0ZV9pbnNwZWN0KFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShz ZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4g aWZvcndhcmQwKCJpbnNwZWN0X3IiKTsKKyAgeworICAgIGdldF9kX2Npdmls KGRhdCk7CisgICAgZ2V0X2RfamQoZGF0KTsKKyAgICByZXR1cm4gcmJfZW5j X3NwcmludGYocmJfdXNhc2NpaV9lbmNvZGluZygpLAorCQkJICAiIzwlc1tM XTogJS40ZC0lMDJkLSUwMmQgKCVsZGosMCwlLjBmKT4iLAorCQkJICByYl9v YmpfY2xhc3NuYW1lKHNlbGYpLAorCQkJICBkYXQtPmwueWVhciwgZGF0LT5s Lm1vbiwgZGF0LT5sLm1kYXksCisJCQkgIGRhdC0+bC5qZCwgZGF0LT5sLnNn KTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9tYXJzaGFsX2R1 bXAoVkFMVUUgc2VsZikKK3sKKyAgVkFMVUUgYTsKKworICBnZXRfZDEoc2Vs Zik7CisKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICBhID0gcmJf YXJ5X25ldzMoMywgZGF0LT5yLmFqZCwgZGF0LT5yLm9mLCBkYXQtPnIuc2cp OworICBlbHNlIHsKKyAgICBnZXRfZF9qZChkYXQpOworICAgIGEgPSByYl9h c3NvY19uZXcoTE9ORzJOVU0oZGF0LT5sLmpkKSwgREJMMk5VTShkYXQtPmwu c2cpKTsKKyAgfQorCisgIGlmIChGTF9URVNUKHNlbGYsIEZMX0VYSVZBUikp IHsKKyAgICByYl9jb3B5X2dlbmVyaWNfaXZhcihhLCBzZWxmKTsKKyAgICBG TF9TRVQoYSwgRkxfRVhJVkFSKTsKKyAgfQorCisgIHJldHVybiBhOworfQor CitzdGF0aWMgVkFMVUUKK2RfbGl0ZV9tYXJzaGFsX2xvYWQoVkFMVUUgc2Vs ZiwgVkFMVUUgYSkKK3sKKyAgZ2V0X2QxKHNlbGYpOworCisgIGlmICghRklY TlVNX1AoUkFSUkFZX1BUUihhKVswXSkpIHsKKyAgICBkYXQtPnIuYWpkID0g UkFSUkFZX1BUUihhKVswXTsKKyAgICBkYXQtPnIub2YgPSBSQVJSQVlfUFRS KGEpWzFdOworICAgIGRhdC0+ci5zZyA9IFJBUlJBWV9QVFIoYSlbMl07Cisg ICAgZGF0LT5yLmNhc2ggPSByYl9oYXNoX25ldygpOworICAgIGRhdC0+ci5m bGFncyA9IDA7CisgIH0gZWxzZSB7CisgICAgZGF0LT5sLmpkID0gTlVNMkxP TkcoUkFSUkFZX1BUUihhKVswXSk7CisgICAgZGF0LT5sLnNnID0gTlVNMkRC TChSQVJSQVlfUFRSKGEpWzFdKTsKKyAgICBkYXQtPmwueWVhciA9IDA7Cisg ICAgZGF0LT5sLm1vbiA9IDA7CisgICAgZGF0LT5sLm1kYXkgPSAwOworICAg IGRhdC0+bC5mbGFncyA9IExJR0hUX01PREUgfCBIQVZFX0pEOworICB9CisK KyAgaWYgKEZMX1RFU1QoYSwgRkxfRVhJVkFSKSkgeworICAgIHJiX2NvcHlf Z2VuZXJpY19pdmFyKHNlbGYsIGEpOworICAgIEZMX1NFVChzZWxmLCBGTF9F WElWQVIpOworICB9CisKKyAgcmV0dXJuIHNlbGY7Cit9CisKK3N0YXRpYyBW QUxVRQorZF9yaWdodF9jYXNoKFZBTFVFIHNlbGYpCit7CisgIGdldF9kMShz ZWxmKTsKKyAgaWYgKGxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBR bmlsOworICByZXR1cm4gZGF0LT5yLmNhc2g7Cit9CisKKy8qIGRhdGV0aW1l IGxpZ2h0ICovCisKK2lubGluZSBzdGF0aWMgVkFMVUUKK2R0X2xpdGVfc19u ZXdfaW50ZXJuYWwoVkFMVUUga2xhc3MsIGxvbmcgamQsIGludCBkZiwKKwkJ ICAgICAgIGxvbmcgbG9uZyBzZiwgaW50IG9mLCBkb3VibGUgc2csCisJCSAg ICAgICBpbnQgeSwgaW50IG0sIGludCBkLAorCQkgICAgICAgaW50IGgsIGlu dCBtaW4sIGludCBzLAorCQkgICAgICAgdW5zaWduZWQgZmxhZ3MpCit7Cisg IHVuaW9uIERhdGVUaW1lRGF0YSAqZGF0OworICBWQUxVRSBvYmo7CisKKyAg b2JqID0gRGF0YV9NYWtlX1N0cnVjdChrbGFzcywgdW5pb24gRGF0ZVRpbWVE YXRhLCAwLCAtMSwgZGF0KTsKKworICBkYXQtPmwuamQgPSBqZDsKKyAgZGF0 LT5sLmRmID0gZGY7CisgIGRhdC0+bC5zZiA9IHNmOworICBkYXQtPmwub2Yg PSBvZjsKKyAgZGF0LT5sLnNnID0gc2c7CisgIGRhdC0+bC55ZWFyID0geTsK KyAgZGF0LT5sLm1vbiA9IG07CisgIGRhdC0+bC5tZGF5ID0gZDsKKyAgZGF0 LT5sLmhvdXIgPSBoOworICBkYXQtPmwubWluID0gbWluOworICBkYXQtPmwu c2VjID0gczsKKyAgZGF0LT5sLmZsYWdzID0gZmxhZ3M7CisKKyAgcmV0dXJu IG9iajsKK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX3NfbmV3X2ludGVy bmFsX3dvX2NpdmlsKFZBTFVFIGtsYXNzLCBsb25nIGpkLCBpbnQgZGYsCisJ CQkJbG9uZyBsb25nIHNmLCBpbnQgb2YsIGRvdWJsZSBzZywKKwkJCQl1bnNp Z25lZCBmbGFncykKK3sKKyAgcmV0dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJu YWwoa2xhc3MsIGpkLCBkZiwgc2YsIG9mLCBzZywKKwkJCQkwLCAwLCAwLCAw LCAwLCAwLCBmbGFncyk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9z X2FsbG9jKFZBTFVFIGtsYXNzKQoreworICByZXR1cm4gZHRfbGl0ZV9zX25l d19pbnRlcm5hbF93b19jaXZpbChrbGFzcywgMCwgMCwgMCwgMCwgMCwgMCk7 Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9zX25ld19sX2JhbmcoaW50 IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBrbGFzcykKK3sKKyAgVkFMVUUg dmpkLCB2ZGYsIHZzZiwgdm9mLCB2c2c7CisgIGxvbmcgamQ7CisKKyAgcmJf c2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIwNSIsICZ2amQsICZ2ZGYsICZ2c2Ys ICZ2b2YsICZ2c2cpOworCisgIGlmIChhcmdjIDwgMSkKKyAgICB2amQgPSBJ TlQyRklYKDApOworICBpZiAoYXJnYyA8IDIpCisgICAgdmRmID0gSU5UMkZJ WCgwKTsKKyAgaWYgKGFyZ2MgPCAzKQorICAgIHZzZiA9IElOVDJGSVgoMCk7 CisgIGlmIChhcmdjIDwgNCkKKyAgICB2b2YgPSBJTlQyRklYKDApOworICBp ZiAoYXJnYyA8IDUpCisgICAgdnNnID0gSU5UMkZJWCgwKTsKKworICBpZiAo IUZJWE5VTV9QKHZqZCkgfHwKKyAgICAgICFGSVhOVU1fUCh2ZGYpIHx8Cisg ICAgICAhRklYTlVNX1AodnNmKSB8fAorICAgICAgIUZJWE5VTV9QKHZvZikp CisgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiY2Fubm90IGNyZWF0ZSIp OworICBqZCA9IE5VTTJMT05HKHZqZCk7CisgIGlmICghTElHSFRBQkxFX0pE KGpkKSkKKyAgICByYl9yYWlzZShyYl9lQXJnRXJyb3IsICJjYW5ub3QgY3Jl YXRlIik7CisKKyAgcmV0dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWxfd29f Y2l2aWwoa2xhc3MsCisJCQkJCSBqZCwKKwkJCQkJIEZJWDJJTlQodmRmKSwK KwkJCQkJIEZJWDJJTlQodnNmKSwKKwkJCQkJIEZJWDJJTlQodm9mKSwKKwkJ CQkJIE5VTTJEQkwodnNnKSwKKwkJCQkJIExJR0hUX01PREUgfCBIQVZFX0pE IHwgSEFWRV9ERik7Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZXRpbWVfc19u ZXdfbF9iYW5nKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xhc3Mp Cit7CisgIHJldHVybiBkdF9saXRlX3NfbmV3X2xfYmFuZyhhcmdjLCBhcmd2 LCBrbGFzcyk7Cit9CisKK3N0YXRpYyBWQUxVRQorZGF0ZXRpbWVfc19qZChp bnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICBWQUxV RSB2amQsIHZoLCB2bWluLCB2cywgdm9mLCB2c2c7CisgIGxvbmcgamQ7Cisg IGludCBoLCBtaW4sIHMsIHJoLCBybWluLCBycywgcm9mOworICBkb3VibGUg c2c7CisKKyAgcmJfc2Nhbl9hcmdzKGFyZ2MsIGFyZ3YsICIwNiIsICZ2amQs ICZ2aCwgJnZtaW4sICZ2cywgJnZvZiwgJnZzZyk7CisKKyAgaWYgKCFGSVhO VU1fUCh2amQpKQorICAgIHJldHVybiBjZm9yd2FyZHYoImpkX3IiKTsKKwor ICBpZiAoIU5JTF9QKHZzZykpCisgICAgc2cgPSBOVU0yREJMKHZzZyk7Cisg IGVsc2UKKyAgICBzZyA9IElUQUxZOworCisgIGpkID0gaCA9IG1pbiA9IHMg PSAwOworICByb2YgPSAwOworCisgIHN3aXRjaCAoYXJnYykgeworICBjYXNl IDY6CisgIGNhc2UgNToKKyAgICBpZiAoIWRheWRpZmZfdG9fc2VjKHZvZiwg JnJvZikpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJqZF9yIik7CisgIGNh c2UgNDoKKyAgICBzID0gTlVNMkxPTkcodnMpOworICBjYXNlIDM6CisgICAg bWluID0gTlVNMkxPTkcodm1pbik7CisgIGNhc2UgMjoKKyAgICBoID0gTlVN MkxPTkcodmgpOworICBjYXNlIDE6CisgICAgamQgPSBOVU0yTE9ORyh2amQp OworICAgIGlmICghTElHSFRBQkxFX0pEKGpkKSkKKyAgICAgIHJldHVybiBj Zm9yd2FyZHYoImpkX3IiKTsKKyAgfQorCisgIGlmIChqZCA8IHNnKQorICAg IHJldHVybiBjZm9yd2FyZHYoImpkX3IiKTsKKworICBpZiAoIXZhbGlkX3Rp bWVfcChoLCBtaW4sIHMsICZyaCwgJnJtaW4sICZycykpCisgICAgcmJfcmFp c2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisKKyAgcmV0dXJu IGR0X2xpdGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsCisJCQkJamRfbG9jYWxf dG9fdXRjKGpkLAorCQkJCQkJdGltZV90b19kZihyaCwgcm1pbiwgcnMpLAor CQkJCQkJcm9mKSwKKwkJCQkwLCAwLCByb2YsIHNnLCAwLCAwLCAwLCByaCwg cm1pbiwgcnMsCisJCQkJTElHSFRfTU9ERSB8IEhBVkVfSkQgfCBIQVZFX1RJ TUUpOworfQorCitzdGF0aWMgVkFMVUUKK2RhdGV0aW1lX3Nfb3JkaW5hbChp bnQgYXJnYywgVkFMVUUgKmFyZ3YsIFZBTFVFIGtsYXNzKQoreworICBWQUxV RSB2eSwgdmQsIHZoLCB2bWluLCB2cywgdm9mLCB2c2c7CisgIGludCB5LCBk LCByZCwgaCwgbWluLCBzLCByaCwgcm1pbiwgcnMsIHJvZjsKKyAgZG91Ymxl IHNnOworCisgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDciLCAmdnks ICZ2ZCwgJnZoLCAmdm1pbiwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAo ISgoTklMX1AodnkpICAgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2 ZCkgICB8fCBGSVhOVU1fUCh2ZCkpICYmCisJKE5JTF9QKHZoKSAgIHx8IEZJ WE5VTV9QKHZoKSkgJiYKKwkoTklMX1Aodm1pbikgfHwgRklYTlVNX1Aodm1p bikpICYmCisJKE5JTF9QKHZzKSAgIHx8IEZJWE5VTV9QKHZzKSkpKQorICAg IHJldHVybiBjZm9yd2FyZHYoIm9yZGluYWxfciIpOworCisgIGlmICghTklM X1AodnNnKSkKKyAgICBzZyA9IE5VTTJEQkwodnNnKTsKKyAgZWxzZQorICAg IHNnID0gSVRBTFk7CisKKyAgeSA9IC00NzEyOworICBkID0gMTsKKworICBo ID0gbWluID0gcyA9IDA7CisgIHJvZiA9IDA7CisKKyAgc3dpdGNoIChhcmdj KSB7CisgIGNhc2UgNzoKKyAgY2FzZSA2OgorICAgIGlmICghZGF5ZGlmZl90 b19zZWModm9mLCAmcm9mKSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoIm9y ZGluYWxfciIpOworICBjYXNlIDU6CisgICAgcyA9IE5VTTJMT05HKHZzKTsK KyAgY2FzZSA0OgorICAgIG1pbiA9IE5VTTJMT05HKHZtaW4pOworICBjYXNl IDM6CisgICAgaCA9IE5VTTJMT05HKHZoKTsKKyAgY2FzZSAyOgorICAgIGQg PSBOVU0yTE9ORyh2ZCk7CisgIGNhc2UgMToKKyAgICB5ID0gTlVNMkxPTkco dnkpOworICAgIGlmICghTElHSFRBQkxFX1lFQVIoeSkpCisgICAgICByZXR1 cm4gY2ZvcndhcmR2KCJvcmRpbmFsX3IiKTsKKyAgfQorCisgIHsKKyAgICBs b25nIGpkOworICAgIGludCBuczsKKworICAgIGlmICghdmFsaWRfb3JkaW5h bF9wKHksIGQsIHNnLCAmcmQsICZqZCwgJm5zKSkKKyAgICAgIHJiX3JhaXNl KHJiX2VBcmdFcnJvciwgImludmFsaWQgZGF0ZSIpOworICAgIGlmICghdmFs aWRfdGltZV9wKGgsIG1pbiwgcywgJnJoLCAmcm1pbiwgJnJzKSkKKyAgICAg IHJiX3JhaXNlKHJiX2VBcmdFcnJvciwgImludmFsaWQgZGF0ZSIpOworCisg ICAgaWYgKCFMSUdIVEFCTEVfSkQoamQpIHx8ICFucykKKyAgICAgIHJldHVy biBjZm9yd2FyZHYoIm9yZGluYWxfciIpOworCisgICAgcmV0dXJuIGR0X2xp dGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsCisJCQkJICBqZF9sb2NhbF90b191 dGMoamQsCisJCQkJCQkgIHRpbWVfdG9fZGYocmgsIHJtaW4sIHJzKSwKKwkJ CQkJCSAgcm9mKSwKKwkJCQkgIDAsIDAsIHJvZiwgc2csCisJCQkJICAwLCAw LCAwLCByaCwgcm1pbiwgcnMsCisJCQkJICBMSUdIVF9NT0RFIHwgSEFWRV9K RCB8IEhBVkVfVElNRSk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkYXRl dGltZV9zX2NpdmlsKGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFMVUUga2xh c3MpCit7CisgIFZBTFVFIHZ5LCB2bSwgdmQsIHZoLCB2bWluLCB2cywgdm9m LCB2c2c7CisgIGludCB5LCBtLCBkLCBybSwgcmQsIGgsIG1pbiwgcywgcmgs IHJtaW4sIHJzLCByb2Y7CisgIGRvdWJsZSBzZzsKKworICByYl9zY2FuX2Fy Z3MoYXJnYywgYXJndiwgIjA4IiwgJnZ5LCAmdm0sICZ2ZCwgJnZoLCAmdm1p biwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAoISgoTklMX1AodnkpICAg fHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2bSkgICB8fCBGSVhOVU1f UCh2bSkpICYmCisJKE5JTF9QKHZkKSAgIHx8IEZJWE5VTV9QKHZkKSkgJiYK KwkoTklMX1AodmgpICAgfHwgRklYTlVNX1AodmgpKSAmJgorCShOSUxfUCh2 bWluKSB8fCBGSVhOVU1fUCh2bWluKSkgJiYKKwkoTklMX1AodnMpICAgfHwg RklYTlVNX1AodnMpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJkdigiY2l2aWxf ciIpOworCisgIGlmICghTklMX1AodnNnKSkKKyAgICBzZyA9IE5VTTJEQkwo dnNnKTsKKyAgZWxzZQorICAgIHNnID0gSVRBTFk7CisKKyAgeSA9IC00NzEy OworICBtID0gMTsKKyAgZCA9IDE7CisKKyAgaCA9IG1pbiA9IHMgPSAwOwor ICByb2YgPSAwOworCisgIHN3aXRjaCAoYXJnYykgeworICBjYXNlIDg6Cisg IGNhc2UgNzoKKyAgICBpZiAoIWRheWRpZmZfdG9fc2VjKHZvZiwgJnJvZikp CisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJjaXZpbF9yIik7CisgIGNhc2Ug NjoKKyAgICBzID0gTlVNMkxPTkcodnMpOworICBjYXNlIDU6CisgICAgbWlu ID0gTlVNMkxPTkcodm1pbik7CisgIGNhc2UgNDoKKyAgICBoID0gTlVNMkxP TkcodmgpOworICBjYXNlIDM6CisgICAgZCA9IE5VTTJMT05HKHZkKTsKKyAg Y2FzZSAyOgorICAgIG0gPSBOVU0yTE9ORyh2bSk7CisgIGNhc2UgMToKKyAg ICB5ID0gTlVNMkxPTkcodnkpOworICAgIGlmICghTElHSFRBQkxFX1lFQVIo eSkpCisgICAgICByZXR1cm4gY2ZvcndhcmR2KCJjaXZpbF9yIik7CisgIH0K KworICBpZiAoaXNpbmYoc2cpICYmIHNnIDwgMCkgeworICAgIGlmICghdmFs aWRfZ3JlZ29yaWFuX3AoeSwgbSwgZCwgJnJtLCAmcmQpKQorICAgICAgcmJf cmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisgICAgaWYg KCF2YWxpZF90aW1lX3AoaCwgbWluLCBzLCAmcmgsICZybWluLCAmcnMpKQor ICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7 CisKKyAgICByZXR1cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywg MCwgMCwgMCwgcm9mLCBzZywKKwkJCQkgIHksIHJtLCByZCwgcmgsIHJtaW4s IHJzLAorCQkJCSAgTElHSFRfTU9ERSB8IEhBVkVfQ0lWSUwgfCBIQVZFX1RJ TUUpOworICB9IGVsc2UgeworICAgIGxvbmcgamQ7CisgICAgaW50IG5zOwor CisgICAgaWYgKCF2YWxpZF9jaXZpbF9wKHksIG0sIGQsIHNnLCAmcm0sICZy ZCwgJmpkLCAmbnMpKQorICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAi aW52YWxpZCBkYXRlIik7CisgICAgaWYgKCF2YWxpZF90aW1lX3AoaCwgbWlu LCBzLCAmcmgsICZybWluLCAmcnMpKQorICAgICAgcmJfcmFpc2UocmJfZUFy Z0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisKKyAgICBpZiAoIUxJR0hUQUJM RV9KRChqZCkgfHwgIW5zKQorICAgICAgcmV0dXJuIGNmb3J3YXJkdigiY2l2 aWxfciIpOworCisgICAgcmV0dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWwo a2xhc3MsCisJCQkJICBqZF9sb2NhbF90b191dGMoamQsCisJCQkJCQkgIHRp bWVfdG9fZGYocmgsIHJtaW4sIHJzKSwKKwkJCQkJCSAgcm9mKSwKKwkJCQkg IDAsIDAsIHJvZiwgc2csCisJCQkJICB5LCBybSwgcmQsIHJoLCBybWluLCBy cywKKwkJCQkgIExJR0hUX01PREUgfCBIQVZFX0pEIHwKKwkJCQkgIEhBVkVf Q0lWSUwgfCBIQVZFX1RJTUUpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQor ZGF0ZXRpbWVfc19jb21tZXJjaWFsKGludCBhcmdjLCBWQUxVRSAqYXJndiwg VkFMVUUga2xhc3MpCit7CisgIFZBTFVFIHZ5LCB2dywgdmQsIHZoLCB2bWlu LCB2cywgdm9mLCB2c2c7CisgIGludCB5LCB3LCBkLCBydywgcmQsIGgsIG1p biwgcywgcmgsIHJtaW4sIHJzLCByb2Y7CisgIGRvdWJsZSBzZzsKKworICBy Yl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjA4IiwgJnZ5LCAmdncsICZ2ZCwg JnZoLCAmdm1pbiwgJnZzLCAmdm9mLCAmdnNnKTsKKworICBpZiAoISgoTklM X1AodnkpICAgfHwgRklYTlVNX1AodnkpKSAmJgorCShOSUxfUCh2dykgICB8 fCBGSVhOVU1fUCh2dykpICYmCisJKE5JTF9QKHZkKSAgIHx8IEZJWE5VTV9Q KHZkKSkgJiYKKwkoTklMX1AodmgpICAgfHwgRklYTlVNX1AodmgpKSAmJgor CShOSUxfUCh2bWluKSB8fCBGSVhOVU1fUCh2bWluKSkgJiYKKwkoTklMX1Ao dnMpICAgfHwgRklYTlVNX1AodnMpKSkpCisgICAgcmV0dXJuIGNmb3J3YXJk digiY29tbWVyY2lhbF9yIik7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAg IHNnID0gTlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsK KworICB5ID0gLTQ3MTI7CisgIHcgPSAxOworICBkID0gMTsKKworICBoID0g bWluID0gcyA9IDA7CisgIHJvZiA9IDA7CisKKyAgc3dpdGNoIChhcmdjKSB7 CisgIGNhc2UgODoKKyAgY2FzZSA3OgorICAgIGlmICghZGF5ZGlmZl90b19z ZWModm9mLCAmcm9mKSkKKyAgICAgIHJldHVybiBjZm9yd2FyZHYoImNvbW1l cmNpYWxfciIpOworICBjYXNlIDY6CisgICAgcyA9IE5VTTJMT05HKHZzKTsK KyAgY2FzZSA1OgorICAgIG1pbiA9IE5VTTJMT05HKHZtaW4pOworICBjYXNl IDQ6CisgICAgaCA9IE5VTTJMT05HKHZoKTsKKyAgY2FzZSAzOgorICAgIGQg PSBOVU0yTE9ORyh2ZCk7CisgIGNhc2UgMjoKKyAgICB3ID0gTlVNMkxPTkco dncpOworICBjYXNlIDE6CisgICAgeSA9IE5VTTJMT05HKHZ5KTsKKyAgICBp ZiAoIUxJR0hUQUJMRV9DV1lFQVIoeSkpCisgICAgICByZXR1cm4gY2Zvcndh cmR2KCJjb21tZXJjaWFsX3IiKTsKKyAgfQorCisgIHsKKyAgICBsb25nIGpk OworICAgIGludCBuczsKKworICAgIGlmICghdmFsaWRfY29tbWVyY2lhbF9w KHksIHcsIGQsIHNnLCAmcncsICZyZCwgJmpkLCAmbnMpKQorICAgICAgcmJf cmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7CisgICAgaWYg KCF2YWxpZF90aW1lX3AoaCwgbWluLCBzLCAmcmgsICZybWluLCAmcnMpKQor ICAgICAgcmJfcmFpc2UocmJfZUFyZ0Vycm9yLCAiaW52YWxpZCBkYXRlIik7 CisKKyAgICBpZiAoIUxJR0hUQUJMRV9KRChqZCkgfHwgIW5zKQorICAgICAg cmV0dXJuIGNmb3J3YXJkdigiY29tbWVyY2lhbF9yIik7CisKKyAgICByZXR1 cm4gZHRfbGl0ZV9zX25ld19pbnRlcm5hbChrbGFzcywKKwkJCQkgIGpkX2xv Y2FsX3RvX3V0YyhqZCwKKwkJCQkJCSAgdGltZV90b19kZihyaCwgcm1pbiwg cnMpLAorCQkJCQkJICByb2YpLAorCQkJCSAgMCwgMCwgcm9mLCBzZywKKwkJ CQkgIDAsIDAsIDAsIHJoLCBybWluLCBycywKKwkJCQkgIExJR0hUX01PREUg fCBIQVZFX0pEIHwgSEFWRV9USU1FKTsKKyAgfQorfQorCitzdGF0aWMgVkFM VUUKK2RhdGV0aW1lX3Nfbm93KGludCBhcmdjLCBWQUxVRSAqYXJndiwgVkFM VUUga2xhc3MpCit7CisgIFZBTFVFIHZzZzsKKyAgZG91YmxlIHNnOworI2lm ZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorICBzdHJ1Y3QgdGltZXNwZWMgdHM7 CisjZWxzZQorICBzdHJ1Y3QgdGltZXZhbCB0djsKKyNlbmRpZgorICBzdHJ1 Y3QgdG0gdG07CisgIGludCB5LCBtLCBkLCBoLCBtaW4sIHMsIG9mLCBzZjsK KworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwgIjAxIiwgJnZzZyk7CisK KyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0gTlVNMkRCTCh2c2cpOwor ICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworI2lmZGVmIEhBVkVfQ0xPQ0tf R0VUVElNRQorICBpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwg JnRzKSA9PSAtMSkKKyAgICByYl9zeXNfZmFpbCgiY2xvY2tfZ2V0dGltZSIp OworICBsb2NhbHRpbWVfcigmdHMudHZfc2VjLCAmdG0pOworI2Vsc2UKKyAg aWYgKGdldHRpbWVvZmRheSgmdHYsIE5VTEwpID09IC0xKQorICAgIHJiX3N5 c19mYWlsKCJnZXR0aW1lb2ZkYXkiKTsKKyAgbG9jYWx0aW1lX3IoJnR2LnR2 X3NlYywgJnRtKTsKKyNlbmRpZgorCisgIHkgPSB0bS50bV95ZWFyICsgMTkw MDsKKyAgbSA9IHRtLnRtX21vbiArIDE7CisgIGQgPSB0bS50bV9tZGF5Owor ICBoID0gdG0udG1faG91cjsKKyAgbWluID0gdG0udG1fbWluOworICBzID0g dG0udG1fc2VjOworICBpZiAocyA9PSA2MCkKKyAgICBzID0gNTk7CisjaWZk ZWYgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCisgIG9mID0gdG0udG1fZ210 b2ZmOworI2Vsc2UKKyAgb2YgPSAoaW50KS10aW1lem9uZTsKKyNlbmRpZgor I2lmZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorICBzZiA9IHRzLnR2X25zZWM7 CisjZWxzZQorICBzZiA9IHR2LnR2X3VzZWMgKiAxMDAwOworI2VuZGlmCisK KyAgaWYgKGlzaW5mKHNnKSAmJiBzZyA8IDApCisgICAgcmV0dXJuIGR0X2xp dGVfc19uZXdfaW50ZXJuYWwoa2xhc3MsIDAsIDAsIHNmLCBvZiwgc2csCisJ CQkJICB5LCBtLCBkLCBoLCBtaW4sIHMsCisJCQkJICBMSUdIVF9NT0RFIHwg SEFWRV9DSVZJTCB8IEhBVkVfVElNRSk7CisgIGVsc2UgeworICAgIGxvbmcg amQ7CisgICAgaW50IG5zOworCisgICAgY2l2aWxfdG9famQoeSwgbSwgZCwg c2csICZqZCwgJm5zKTsKKworICAgIHJldHVybiBkdF9saXRlX3NfbmV3X2lu dGVybmFsKGtsYXNzLAorCQkJCSAgamRfbG9jYWxfdG9fdXRjKGpkLAorCQkJ CQkJICB0aW1lX3RvX2RmKGgsIG1pbiwgcyksCisJCQkJCQkgIG9mKSwKKwkJ CQkgIDAsIHNmLCBvZiwgc2csCisJCQkJICB5LCBtLCBkLCBoLCBtaW4sIHMs CisJCQkJICBMSUdIVF9NT0RFIHwgSEFWRV9KRCB8CisJCQkJICBIQVZFX0NJ VklMIHwgSEFWRV9USU1FKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2R0 X2xpdGVfYWpkKFZBTFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7Cisg IGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGRhdC0+ci5h amQ7CisgIHsKKyAgICBWQUxVRSByOworCisgICAgZ2V0X2R0X2pkKGRhdCk7 CisgICAgZ2V0X2R0X2RmKGRhdCk7CisgICAgciA9IGZfc3ViKElOVDJGSVgo ZGF0LT5sLmpkKSwgcmhhbGYpOworICAgIGlmIChkYXQtPmwuZGYpCisgICAg ICByID0gZl9hZGQociwgcmJfcmF0aW9uYWxfbmV3MihJTlQyRklYKGRhdC0+ bC5kZiksCisJCQkJICAgIElOVDJGSVgoREFZX0lOX1NFQ09ORFMpKSk7Cisg ICAgaWYgKGRhdC0+bC5zZikKKyAgICAgIHIgPSBmX2FkZChyLCByYl9yYXRp b25hbF9uZXcyKElOVDJGSVgoZGF0LT5sLnNmKSwgZGF5X2luX25hbm9zZWNv bmRzKSk7CisgICAgcmV0dXJuIHI7CisgIH0KK30KKworc3RhdGljIFZBTFVF CitkdF9saXRlX2FtamQoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxm KTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZv cndhcmQwKCJhbWpkX3IiKTsKKyAgeworICAgIFZBTFVFIHI7CisKKyAgICBn ZXRfZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICByID0g cmJfcmF0aW9uYWxfbmV3MShMT05HMk5VTShkYXQtPmwuamQgLSAyNDAwMDAx TCkpOworICAgIGlmIChkYXQtPmwuZGYpCisgICAgICByID0gZl9hZGQociwg cmJfcmF0aW9uYWxfbmV3MihJTlQyRklYKGRhdC0+bC5kZiksCisJCQkJICAg IElOVDJGSVgoREFZX0lOX1NFQ09ORFMpKSk7CisgICAgaWYgKGRhdC0+bC5z ZikKKyAgICAgIHIgPSBmX2FkZChyLCByYl9yYXRpb25hbF9uZXcyKElOVDJG SVgoZGF0LT5sLnNmKSwgZGF5X2luX25hbm9zZWNvbmRzKSk7CisgICAgcmV0 dXJuIHI7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX2pkKFZB TFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRf bW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiamRfciIpOwor ICB7CisgICAgZ2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7 CisgICAgcmV0dXJuIElOVDJGSVgobG9jYWxfamQoZGF0KSk7CisgIH0KK30K Kworc3RhdGljIFZBTFVFCitkdF9saXRlX21qZChWQUxVRSBzZWxmKQorewor ICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQor ICAgIHJldHVybiBpZm9yd2FyZDAoIm1qZF9yIik7CisgIHsKKyAgICBnZXRf ZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICByZXR1cm4g TE9ORzJOVU0obG9jYWxfamQoZGF0KSAtIDI0MDAwMDFMKTsKKyAgfQorfQor CitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfbGQoVkFMVUUgc2VsZikKK3sKKyAg Z2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAg ICByZXR1cm4gaWZvcndhcmQwKCJsZF9yIik7CisgIHsKKyAgICBnZXRfZHRf amQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICByZXR1cm4gTE9O RzJOVU0obG9jYWxfamQoZGF0KSAtIDIyOTkxNjBMKTsKKyAgfQorfQorCitz dGF0aWMgVkFMVUUKK2R0X2xpdGVfeWVhcihWQUxVRSBzZWxmKQoreworICBn ZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAg IHJldHVybiBpZm9yd2FyZDAoInllYXJfciIpOworICB7CisgICAgZ2V0X2R0 X2NpdmlsKGRhdCk7CisgICAgcmV0dXJuIElOVDJGSVgoZGF0LT5sLnllYXIp OworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV95ZGF5KFZBTFVF IHNlbGYpCit7CisgIGludCByeSwgcmQ7CisKKyAgZ2V0X2R0MShzZWxmKTsK KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh cmQwKCJ5ZGF5X3IiKTsKKyAgeworICAgIGdldF9kdF9qZChkYXQpOworICAg IGdldF9kdF9kZihkYXQpOworICAgIGpkX3RvX29yZGluYWwobG9jYWxfamQo ZGF0KSwgZGF0LT5sLnNnLCAmcnksICZyZCk7CisgICAgcmV0dXJuIElOVDJG SVgocmQpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9tb24o VkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdo dF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJtb25fciIp OworICB7CisgICAgZ2V0X2R0X2NpdmlsKGRhdCk7CisgICAgcmV0dXJuIElO VDJGSVgoZGF0LT5sLm1vbik7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitk dF9saXRlX21kYXkoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsK KyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndh cmQwKCJtZGF5X3IiKTsKKyAgeworICAgIGdldF9kdF9jaXZpbChkYXQpOwor ICAgIHJldHVybiBJTlQyRklYKGRhdC0+bC5tZGF5KTsKKyAgfQorfQorCitz dGF0aWMgVkFMVUUKK2R0X2xpdGVfZGF5X2ZyYWN0aW9uKFZBTFVFIHNlbGYp Cit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRh dCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiZGF5X2ZyYWN0aW9uX3IiKTsK KyAgeworICAgIGdldF9kdF9kZihkYXQpOworICAgIHJldHVybiByYl9yYXRp b25hbF9uZXcyKElOVDJGSVgobG9jYWxfZGYoZGF0KSksIElOVDJGSVgoREFZ X0lOX1NFQ09ORFMpKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUKK2R0X2xp dGVfd251bTAoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywgcmQ7CisK KyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkK KyAgICByZXR1cm4gaWZvcndhcmQwKCJ3bnVtMF9yIik7CisgIHsKKyAgICBn ZXRfZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0KTsKKyAgICBqZF90 b193ZWVrbnVtKGxvY2FsX2pkKGRhdCksIDAsIGRhdC0+bC5zZywgJnJ5LCAm cncsICZyZCk7CisgICAgcmV0dXJuIElOVDJGSVgocncpOworICB9Cit9CisK K3N0YXRpYyBWQUxVRQorZHRfbGl0ZV93bnVtMShWQUxVRSBzZWxmKQorewor ICBpbnQgcnksIHJ3LCByZDsKKworICBnZXRfZHQxKHNlbGYpOworICBpZiAo IWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2FyZDAoIndu dW0xX3IiKTsKKyAgeworICAgIGdldF9kdF9qZChkYXQpOworICAgIGdldF9k dF9kZihkYXQpOworICAgIGpkX3RvX3dlZWtudW0obG9jYWxfamQoZGF0KSwg MSwgZGF0LT5sLnNnLCAmcnksICZydywgJnJkKTsKKyAgICByZXR1cm4gSU5U MkZJWChydyk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX2hv dXIoVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFs aWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJob3Vy X3IiKTsKKyAgeworICAgIGdldF9kdF90aW1lKGRhdCk7CisgICAgcmV0dXJu IElOVDJGSVgoZGF0LT5sLmhvdXIpOworICB9Cit9CisKK3N0YXRpYyBWQUxV RQorZHRfbGl0ZV9taW4oVkFMVUUgc2VsZikKK3sKKyAgZ2V0X2R0MShzZWxm KTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZv cndhcmQwKCJtaW5fciIpOworICB7CisgICAgZ2V0X2R0X3RpbWUoZGF0KTsK KyAgICByZXR1cm4gSU5UMkZJWChkYXQtPmwubWluKTsKKyAgfQorfQorCitz dGF0aWMgVkFMVUUKK2R0X2xpdGVfc2VjKFZBTFVFIHNlbGYpCit7CisgIGdl dF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAg cmV0dXJuIGlmb3J3YXJkMCgic2VjX3IiKTsKKyAgeworICAgIGdldF9kdF90 aW1lKGRhdCk7CisgICAgcmV0dXJuIElOVDJGSVgoZGF0LT5sLnNlYyk7Cisg IH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX3NlY19mcmFjdGlvbihW QUxVRSBzZWxmKQoreworICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0 X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2FyZDAoInNlY19mcmFj dGlvbl9yIik7CisgIHJldHVybiByYl9yYXRpb25hbF9uZXcyKElOVDJGSVgo ZGF0LT5sLnNmKSwgSU5UMkZJWChTRUNPTkRfSU5fTkFOT1NFQ09ORFMpKTsK K30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX29mZnNldChWQUxVRSBzZWxm KQoreworICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChk YXQpKQorICAgIHJldHVybiBkYXQtPnIub2Y7CisgIHJldHVybiByYl9yYXRp b25hbF9uZXcyKElOVDJGSVgoZGF0LT5sLm9mKSwgSU5UMkZJWChEQVlfSU5f U0VDT05EUykpOworfQorCisjZGVmaW5lIGRlY29kZV9vZmZzZXQob2Yscyxo LG0pIFwKK3sgXAorICBpbnQgYTsgXAorICBzID0gKG9mIDwgMCkgPyAnLScg OiAnKyc7IFwKKyAgYSA9IChvZiA8IDApID8gLW9mIDogb2Y7IFwKKyAgaCA9 IGEgLyAzNjAwOyBcCisgIG0gPSBhICUgMzYwMCAvIDYwOyBcCit9CisKK3N0 YXRpYyBWQUxVRQorZHRfbGl0ZV96b25lKFZBTFVFIHNlbGYpCit7CisgIGlu dCBzLCBoLCBtOworCisgIGdldF9kdDEoc2VsZik7CisgIGlmICghbGlnaHRf bW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgiem9uZV9yIik7 CisgIGRlY29kZV9vZmZzZXQoZGF0LT5sLm9mLCBzLCBoLCBtKTsKKyAgcmV0 dXJuIHJiX2VuY19zcHJpbnRmKHJiX3VzYXNjaWlfZW5jb2RpbmcoKSwgIiVj JTAyZDolMDJkIiwgcywgaCwgbSk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRf bGl0ZV9jd3llYXIoVkFMVUUgc2VsZikKK3sKKyAgaW50IHJ5LCBydywgcmQ7 CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2RlX3AoZGF0 KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJjd3llYXJfciIpOworICB7Cisg ICAgZ2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7CisgICAg amRfdG9fY29tbWVyY2lhbChsb2NhbF9qZChkYXQpLCBkYXQtPmwuc2csICZy eSwgJnJ3LCAmcmQpOworICAgIHJldHVybiBJTlQyRklYKHJ5KTsKKyAgfQor fQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfY3dlZWsoVkFMVUUgc2VsZikK K3sKKyAgaW50IHJ5LCBydywgcmQ7CisKKyAgZ2V0X2R0MShzZWxmKTsKKyAg aWYgKCFsaWdodF9tb2RlX3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQw KCJjd2Vla19yIik7CisgIHsKKyAgICBnZXRfZHRfamQoZGF0KTsKKyAgICBn ZXRfZHRfZGYoZGF0KTsKKyAgICBqZF90b19jb21tZXJjaWFsKGxvY2FsX2pk KGRhdCksIGRhdC0+bC5zZywgJnJ5LCAmcncsICZyZCk7CisgICAgcmV0dXJu IElOVDJGSVgocncpOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0 ZV9jd2RheShWQUxVRSBzZWxmKQoreworICBpbnQgdzsKKworICBnZXRfZHQx KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy biBpZm9yd2FyZDAoImN3ZGF5X3IiKTsKKyAgeworICAgIGdldF9kdF9qZChk YXQpOworICAgIGdldF9kdF9kZihkYXQpOworICAgIHcgPSBqZF90b193ZGF5 KGxvY2FsX2pkKGRhdCkpOworICAgIGlmICh3ID09IDApCisgICAgICB3ID0g NzsKKyAgICByZXR1cm4gSU5UMkZJWCh3KTsKKyAgfQorfQorCitzdGF0aWMg VkFMVUUKK2R0X2xpdGVfd2RheShWQUxVRSBzZWxmKQoreworICBpbnQgdzsK KworICBnZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQp KQorICAgIHJldHVybiBpZm9yd2FyZDAoIndkYXlfciIpOworICB7CisgICAg Z2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7CisgICAgdyA9 IGpkX3RvX3dkYXkobG9jYWxfamQoZGF0KSk7CisgICAgcmV0dXJuIElOVDJG SVgodyk7CisgIH0KK30KKworc3RhdGljIFZBTFVFCitkdF9saXRlX2p1bGlh bl9wKFZBTFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmICgh bGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkMCgianVs aWFuX3I/Iik7CisgIHJldHVybiBRZmFsc2U7Cit9CisKK3N0YXRpYyBWQUxV RQorZHRfbGl0ZV9ncmVnb3JpYW5fcChWQUxVRSBzZWxmKQoreworICBnZXRf ZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJl dHVybiBpZm9yd2FyZDAoImdyZWdvcmlhbl9yPyIpOworICByZXR1cm4gUXRy dWU7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9sZWFwX3AoVkFMVUUg c2VsZikKK3sKKyAgZ2V0X2R0MShzZWxmKTsKKyAgaWYgKCFsaWdodF9tb2Rl X3AoZGF0KSkKKyAgICByZXR1cm4gaWZvcndhcmQwKCJsZWFwX3I/Iik7Cisg IHsKKyAgICBnZXRfZHRfY2l2aWwoZGF0KTsKKyAgICByZXR1cm4gbGVhcF9w KGRhdC0+bC55ZWFyKSA/IFF0cnVlIDogUWZhbHNlOworICB9Cit9CisKK3N0 YXRpYyBWQUxVRQorZHRfbGl0ZV9zdGFydChWQUxVRSBzZWxmKQoreworICBn ZXRfZHQxKHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAg IHJldHVybiBkYXQtPnIuc2c7CisgIHJldHVybiBEQkwyTlVNKGRhdC0+bC5z Zyk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9uZXdfc3RhcnQoaW50 IGFyZ2MsIFZBTFVFICphcmd2LCBWQUxVRSBzZWxmKQoreworICBWQUxVRSB2 c2c7CisgIGRvdWJsZSBzZzsKKworICBnZXRfZHQxKHNlbGYpOworCisgIGlm ICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJuIGlmb3J3YXJkdigi bmV3X3N0YXJ0X3IiKTsKKworICByYl9zY2FuX2FyZ3MoYXJnYywgYXJndiwg IjAxIiwgJnZzZyk7CisKKyAgaWYgKCFOSUxfUCh2c2cpKQorICAgIHNnID0g TlVNMkRCTCh2c2cpOworICBlbHNlCisgICAgc2cgPSBJVEFMWTsKKworICB7 CisgICAgZ2V0X2R0X2pkKGRhdCk7CisgICAgZ2V0X2R0X2RmKGRhdCk7CisK KyAgICBpZiAoZGF0LT5sLmpkIDwgc2cpCisgICAgICByZXR1cm4gaWZvcndh cmR2KCJuZXdfc3RhcnRfciIpOworCisgICAgcmV0dXJuIGR0X2xpdGVfc19u ZXdfaW50ZXJuYWxfd29fY2l2aWwoQ0xBU1NfT0Yoc2VsZiksCisJCQkJCSAg IGRhdC0+bC5qZCwKKwkJCQkJICAgZGF0LT5sLmRmLAorCQkJCQkgICBkYXQt Pmwuc2YsCisJCQkJCSAgIGRhdC0+bC5vZiwKKwkJCQkJICAgc2csCisJCQkJ CSAgIExJR0hUX01PREUgfCBIQVZFX0pEIHwgSEFWRV9ERik7CisgIH0KK30K Kworc3RhdGljIFZBTFVFCitkdF9saXRlX25ld19vZmZzZXQoaW50IGFyZ2Ms IFZBTFVFICphcmd2LCBWQUxVRSBzZWxmKQoreworICBWQUxVRSB2b2Y7Cisg IGludCByb2Y7CisKKyAgZ2V0X2R0MShzZWxmKTsKKworICBpZiAoIWxpZ2h0 X21vZGVfcChkYXQpKQorICAgIHJldHVybiBpZm9yd2FyZHYoIm5ld19vZmZz ZXRfciIpOworCisgIHJiX3NjYW5fYXJncyhhcmdjLCBhcmd2LCAiMDEiLCAm dm9mKTsKKworICBpZiAoTklMX1Aodm9mKSkKKyAgICByb2YgPSAwOworICBl bHNlIHsKKyAgICBpZiAoIWRheWRpZmZfdG9fc2VjKHZvZiwgJnJvZikpCisg ICAgICByZXR1cm4gaWZvcndhcmR2KCJuZXdfb2Zmc2V0X3IiKTsKKyAgfQor CisgIHsKKyAgICBnZXRfZHRfamQoZGF0KTsKKyAgICBnZXRfZHRfZGYoZGF0 KTsKKworICAgIHJldHVybiBkdF9saXRlX3NfbmV3X2ludGVybmFsX3dvX2Np dmlsKENMQVNTX09GKHNlbGYpLAorCQkJCQkgICBkYXQtPmwuamQsCisJCQkJ CSAgIGRhdC0+bC5kZiwKKwkJCQkJICAgZGF0LT5sLnNmLAorCQkJCQkgICBy b2YsCisJCQkJCSAgIGRhdC0+bC5zZywKKwkJCQkJICAgTElHSFRfTU9ERSB8 IEhBVkVfSkQgfCBIQVZFX0RGKTsKKyAgfQorfQorCitzdGF0aWMgVkFMVUUK K2R0X2xpdGVfcGx1cyhWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAg Z2V0X2R0MShzZWxmKTsKKworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQor ICAgIHJldHVybiBpZm9yd2FyZG9wKCJwbHVzX3IiKTsKKworICBzd2l0Y2gg KFRZUEUob3RoZXIpKSB7CisgIGNhc2UgVF9GSVhOVU06CisgICAgeworICAg ICAgbG9uZyBqZDsKKworICAgICAgZ2V0X2R0MShzZWxmKTsKKyAgICAgIGdl dF9kdF9qZChkYXQpOworICAgICAgZ2V0X2R0X2RmKGRhdCk7CisKKyAgICAg IGpkID0gZGF0LT5sLmpkICsgRklYMkxPTkcob3RoZXIpOworCisgICAgICBp ZiAoTElHSFRBQkxFX0pEKGpkKSAmJiBqZCA+PSBkYXQtPmwuc2cpCisJcmV0 dXJuIGR0X2xpdGVfc19uZXdfaW50ZXJuYWwoQ0xBU1NfT0Yoc2VsZiksCisJ CQkJICAgICAgamQsCisJCQkJICAgICAgZGF0LT5sLmRmLAorCQkJCSAgICAg IGRhdC0+bC5zZiwKKwkJCQkgICAgICBkYXQtPmwub2YsCisJCQkJICAgICAg ZGF0LT5sLnNnLAorCQkJCSAgICAgIDAsIDAsIDAsCisJCQkJICAgICAgZGF0 LT5sLmhvdXIsCisJCQkJICAgICAgZGF0LT5sLm1pbiwKKwkJCQkgICAgICBk YXQtPmwuc2VjLAorCQkJCSAgICAgIGRhdC0+bC5mbGFncyAmIH5IQVZFX0NJ VklMKTsKKyAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgVF9GTE9BVDoKKyAg ICB7CisgICAgICBsb25nIGpkLCBkZjsKKyAgICAgIGxvbmcgbG9uZyBzZjsK KyAgICAgIGxvbmcgZG91YmxlIG87CisgICAgICBpbnQgczsKKworICAgICAg Z2V0X2R0MShzZWxmKTsKKyAgICAgIGdldF9kdF9qZChkYXQpOworICAgICAg Z2V0X2R0X2RmKGRhdCk7CisKKyAgICAgIGpkID0gZGF0LT5sLmpkOworICAg ICAgbyA9IE5VTTJEQkwob3RoZXIpOworCisgICAgICBpZiAobyA8IDApIHsK KwlzID0gLTE7CisJbyA9IC1vOworICAgICAgfSBlbHNlCisJcyA9ICsxOwor CisgICAgICBqZCA9IChsb25nKWZsb29ybChvKTsKKyAgICAgIG8gPSBvIC0g amQ7CisgICAgICBvICo9IERBWV9JTl9TRUNPTkRTOworICAgICAgZGYgPSAo bG9uZylmbG9vcmwobyk7CisgICAgICBvID0gbyAtIGRmOworICAgICAgbyAq PSBTRUNPTkRfSU5fTkFOT1NFQ09ORFM7CisgICAgICBzZiA9IChsb25nKXJv dW5kbChvKTsKKworICAgICAgaWYgKHMgPCAwKSB7CisJamQgPSAtamQ7CisJ ZGYgPSAtZGY7CisJc2YgPSAtc2Y7CisgICAgICB9CisKKyAgICAgIHNmID0g ZGF0LT5sLnNmICsgc2Y7CisgICAgICBpZiAoc2YgPCAwKSB7CisJZGYgLT0g MTsKKwlzZiArPSBTRUNPTkRfSU5fTkFOT1NFQ09ORFM7CisgICAgICB9IGVs c2UgaWYgKHNmID49IFNFQ09ORF9JTl9OQU5PU0VDT05EUykgeworCWRmICs9 IDE7CisJc2YgLT0gU0VDT05EX0lOX05BTk9TRUNPTkRTOworICAgICAgfQor CisgICAgICBkZiA9IGRhdC0+bC5kZiArIGRmOworICAgICAgaWYgKGRmIDwg MCkgeworCWpkIC09IDE7CisJZGYgKz0gREFZX0lOX1NFQ09ORFM7CisgICAg ICB9IGVsc2UgaWYgKGRmID49IERBWV9JTl9TRUNPTkRTKSB7CisJamQgKz0g MTsKKwlkZiAtPSBEQVlfSU5fU0VDT05EUzsKKyAgICAgIH0KKworICAgICAg amQgPSBkYXQtPmwuamQgKyBqZDsKKworICAgICAgaWYgKExJR0hUQUJMRV9K RChqZCkgJiYgamQgPj0gZGF0LT5sLnNnKQorCXJldHVybiBkdF9saXRlX3Nf bmV3X2ludGVybmFsKENMQVNTX09GKHNlbGYpLAorCQkJCSAgICAgIGpkLAor CQkJCSAgICAgIGRmLAorCQkJCSAgICAgIHNmLAorCQkJCSAgICAgIGRhdC0+ bC5vZiwKKwkJCQkgICAgICBkYXQtPmwuc2csCisJCQkJICAgICAgMCwgMCwg MCwKKwkJCQkgICAgICBkYXQtPmwuaG91ciwKKwkJCQkgICAgICBkYXQtPmwu bWluLAorCQkJCSAgICAgIGRhdC0+bC5zZWMsCisJCQkJICAgICAgZGF0LT5s LmZsYWdzICYgfkhBVkVfQ0lWSUwgJiB+SEFWRV9USU1FKTsKKyAgICB9Cisg ICAgYnJlYWs7CisgIH0KKyAgcmV0dXJuIGlmb3J3YXJkb3AoInBsdXNfciIp OworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfbWludXMoVkFMVUUgc2Vs ZiwgVkFMVUUgb3RoZXIpCit7CisgIGlmIChrX2RhdGVfcChvdGhlcikpCisg ICAgcmV0dXJuIG1pbnVzX2RkKHNlbGYsIG90aGVyKTsKKworICBzd2l0Y2gg KFRZUEUob3RoZXIpKSB7CisgIGNhc2UgVF9GSVhOVU06CisgICAgcmV0dXJu IGR0X2xpdGVfcGx1cyhzZWxmLCBMT05HMk5VTSgtRklYMkxPTkcob3RoZXIp KSk7CisgIGNhc2UgVF9GTE9BVDoKKyAgICByZXR1cm4gZHRfbGl0ZV9wbHVz KHNlbGYsIERCTDJOVU0oLU5VTTJEQkwob3RoZXIpKSk7CisgIH0KKyAgcmV0 dXJuIGlmb3J3YXJkb3AoIm1pbnVzX3IiKTsKK30KKworc3RhdGljIFZBTFVF CitkdF9saXRlX2NtcChWQUxVRSBzZWxmLCBWQUxVRSBvdGhlcikKK3sKKyAg aWYgKGtfZGF0ZV9wKG90aGVyKSkKKyAgICByZXR1cm4gY21wX2RkKHNlbGYs IG90aGVyKTsKKyAgcmV0dXJuIGlmb3J3YXJkb3AoImNtcF9yIik7Cit9CisK K3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9lcXVhbChWQUxVRSBzZWxmLCBWQUxV RSBvdGhlcikKK3sKKyAgaWYgKGtfZGF0ZV9wKG90aGVyKSkKKyAgICByZXR1 cm4gZXF1YWxfZGQoc2VsZiwgb3RoZXIpOworICByZXR1cm4gaWZvcndhcmRv cCgiZXF1YWxfciIpOworfQorCitzdGF0aWMgVkFMVUUKK2R0X2xpdGVfZXFs X3AoVkFMVUUgc2VsZiwgVkFMVUUgb3RoZXIpCit7CisgIGlmIChrX2RhdGVf cChvdGhlcikpCisgICAgcmV0dXJuIGVxbF9wX2RkKHNlbGYsIG90aGVyKTsK KyAgcmV0dXJuIGlmb3J3YXJkb3AoImVxbF9yPyIpOworfQorCitzdGF0aWMg VkFMVUUKK2R0X2xpdGVfaGFzaChWQUxVRSBzZWxmKQoreworICBnZXRfZHQx KHNlbGYpOworICBpZiAoIWxpZ2h0X21vZGVfcChkYXQpKQorICAgIHJldHVy biBpZm9yd2FyZDAoImhhc2hfciIpOworICByZXR1cm4gcmJfaGFzaChkdF9s aXRlX2FqZChzZWxmKSk7Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV90 b19zKFZBTFVFIHNlbGYpCit7CisgIGludCBzLCBoLCBtOworCisgIGdldF9k dDEoc2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0 dXJuIGlmb3J3YXJkMCgidG9fc19yIik7CisgIHsKKyAgICBnZXRfZHRfY2l2 aWwoZGF0KTsKKyAgICBnZXRfZHRfdGltZShkYXQpOworICAgIGRlY29kZV9v ZmZzZXQoZGF0LT5sLm9mLCBzLCBoLCBtKTsKKyAgICByZXR1cm4gcmJfZW5j X3NwcmludGYocmJfdXNhc2NpaV9lbmNvZGluZygpLAorCQkJICAiJS40ZC0l MDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlYyUwMmQ6JTAyZCIsCisJCQkgIGRh dC0+bC55ZWFyLCBkYXQtPmwubW9uLCBkYXQtPmwubWRheSwKKwkJCSAgZGF0 LT5sLmhvdXIsIGRhdC0+bC5taW4sIGRhdC0+bC5zZWMsCisJCQkgIHMsIGgs IG0pOworICB9Cit9CisKK3N0YXRpYyBWQUxVRQorZHRfbGl0ZV9pbnNwZWN0 KFZBTFVFIHNlbGYpCit7CisgIGludCBzLCBoLCBtOworCisgIGdldF9kdDEo c2VsZik7CisgIGlmICghbGlnaHRfbW9kZV9wKGRhdCkpCisgICAgcmV0dXJu IGlmb3J3YXJkMCgiaW5zcGVjdF9yIik7CisgIHsKKyAgICBnZXRfZHRfY2l2 aWwoZGF0KTsKKyAgICBnZXRfZHRfdGltZShkYXQpOworICAgIGdldF9kdF9q ZChkYXQpOworICAgIGdldF9kdF9kZihkYXQpOworICAgIGRlY29kZV9vZmZz ZXQoZGF0LT5sLm9mLCBzLCBoLCBtKTsKKyAgICByZXR1cm4gcmJfZW5jX3Nw cmludGYocmJfdXNhc2NpaV9lbmNvZGluZygpLAorCQkJICAiIzwlc1tMXTog IgorCQkJICAiJS40ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmQlYyUwMmQ6 JTAyZCAiCisJCQkgICIoKCVsZGosJWRzLCUuMGZuKSwlZC84NjQwMCwlLjBm KT4iLAorCQkJICByYl9vYmpfY2xhc3NuYW1lKHNlbGYpLAorCQkJICBkYXQt PmwueWVhciwgZGF0LT5sLm1vbiwgZGF0LT5sLm1kYXksCisJCQkgIGRhdC0+ bC5ob3VyLCBkYXQtPmwubWluLCBkYXQtPmwuc2VjLAorCQkJICBzLCBoLCBt LAorCQkJICBkYXQtPmwuamQsIGRhdC0+bC5kZiwgKGRvdWJsZSlkYXQtPmwu c2YsIGRhdC0+bC5vZiwKKwkJCSAgZGF0LT5sLnNnKTsKKyAgfQorfQorCitz dGF0aWMgVkFMVUUKK2R0X2xpdGVfbWFyc2hhbF9kdW1wKFZBTFVFIHNlbGYp Cit7CisgIFZBTFVFIGE7CisKKyAgZ2V0X2R0MShzZWxmKTsKKworICBpZiAo IWxpZ2h0X21vZGVfcChkYXQpKQorICAgIGEgPSByYl9hcnlfbmV3MygzLCBk YXQtPnIuYWpkLCBkYXQtPnIub2YsIGRhdC0+ci5zZyk7CisgIGVsc2Ugewor ICAgIGdldF9kdF9qZChkYXQpOworICAgIGdldF9kdF9kZihkYXQpOworICAg IGEgPSByYl9hcnlfbmV3Myg1LAorCQkgICAgTE9ORzJOVU0oZGF0LT5sLmpk KSwgSU5UMkZJWChkYXQtPmwuZGYpLCBJTlQyRklYKGRhdC0+bC5zZiksCisJ CSAgICBJTlQyRklYKGRhdC0+bC5vZiksIERCTDJOVU0oZGF0LT5sLnNnKSk7 CisgIH0KKworICBpZiAoRkxfVEVTVChzZWxmLCBGTF9FWElWQVIpKSB7Cisg ICAgcmJfY29weV9nZW5lcmljX2l2YXIoYSwgc2VsZik7CisgICAgRkxfU0VU KGEsIEZMX0VYSVZBUik7CisgIH0KKworICByZXR1cm4gYTsKK30KKworc3Rh dGljIFZBTFVFCitkdF9saXRlX21hcnNoYWxfbG9hZChWQUxVRSBzZWxmLCBW QUxVRSBhKQoreworICBnZXRfZHQxKHNlbGYpOworCisgIGlmICghRklYTlVN X1AoUkFSUkFZX1BUUihhKVswXSkpIHsKKyAgICBkYXQtPnIuYWpkID0gUkFS UkFZX1BUUihhKVswXTsKKyAgICBkYXQtPnIub2YgPSBSQVJSQVlfUFRSKGEp WzFdOworICAgIGRhdC0+ci5zZyA9IFJBUlJBWV9QVFIoYSlbMl07CisgICAg ZGF0LT5yLmNhc2ggPSByYl9oYXNoX25ldygpOworICAgIGRhdC0+ci5mbGFn cyA9IDA7CisgIH0gZWxzZSB7CisgICAgZGF0LT5sLmpkID0gTlVNMkxPTkco UkFSUkFZX1BUUihhKVswXSk7CisgICAgZGF0LT5sLmRmID0gRklYMklOVChS QVJSQVlfUFRSKGEpWzFdKTsKKyAgICBkYXQtPmwuc2YgPSBGSVgySU5UKFJB UlJBWV9QVFIoYSlbMl0pOworICAgIGRhdC0+bC5vZiA9IEZJWDJJTlQoUkFS UkFZX1BUUihhKVszXSk7CisgICAgZGF0LT5sLnNnID0gTlVNMkRCTChSQVJS QVlfUFRSKGEpWzRdKTsKKyAgICBkYXQtPmwueWVhciA9IDA7CisgICAgZGF0 LT5sLm1vbiA9IDA7CisgICAgZGF0LT5sLm1kYXkgPSAwOworICAgIGRhdC0+ bC5ob3VyID0gMDsKKyAgICBkYXQtPmwubWluID0gMDsKKyAgICBkYXQtPmwu c2VjID0gMDsKKyAgICBkYXQtPmwuZmxhZ3MgPSBMSUdIVF9NT0RFIHwgSEFW RV9KRCB8IEhBVkVfREY7CisgIH0KKworICBpZiAoRkxfVEVTVChhLCBGTF9F WElWQVIpKSB7CisgICAgcmJfY29weV9nZW5lcmljX2l2YXIoc2VsZiwgYSk7 CisgICAgRkxfU0VUKHNlbGYsIEZMX0VYSVZBUik7CisgIH0KKworICByZXR1 cm4gc2VsZjsKK30KKworc3RhdGljIFZBTFVFCitkdF9yaWdodF9jYXNoKFZB TFVFIHNlbGYpCit7CisgIGdldF9kdDEoc2VsZik7CisgIGlmIChsaWdodF9t b2RlX3AoZGF0KSkKKyAgICByZXR1cm4gUW5pbDsKKyAgcmV0dXJuIGRhdC0+ ci5jYXNoOworfQorCisjaWZuZGVmIE5ERUJVRworc3RhdGljIGludAordGVz dF9jaXZpbChsb25nIGZyb20sIGxvbmcgdG8sIGRvdWJsZSBzZykKK3sKKyAg bG9uZyBqOworCisgIGZwcmludGYoc3RkZXJyLCAiJWxkLi4uJWxkICglbGQp IC0gJS4wZlxuIiwgZnJvbSwgdG8sIHRvIC0gZnJvbSwgc2cpOworICBmb3Ig KGogPSBmcm9tOyBqIDw9IHRvOyBqKyspIHsKKyAgICBpbnQgeSwgbSwgZCwg bnM7CisgICAgbG9uZyByajsKKworICAgIGpkX3RvX2NpdmlsKGosIHNnLCAm eSwgJm0sICZkKTsKKyAgICBjaXZpbF90b19qZCh5LCBtLCBkLCBzZywgJnJq LCAmbnMpOworICAgIGlmIChqICE9IHJqKSB7CisgICAgICBmcHJpbnRmKHN0 ZGVyciwgIiVsZCAhPSAlbGRcbiIsIGosIHJqKTsKKyAgICAgIHJldHVybiAw OworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIFZBTFVF CitkYXRlX3NfdGVzdF9jaXZpbChWQUxVRSBrbGFzcykKK3sKKyAgZG91Ymxl IGdyZWcgPSAtTlVNMkRCTChyYl9jb25zdF9nZXQocmJfY0Zsb2F0LCByYl9p bnRlcm4oIklORklOSVRZIikpKTsKKworICBpZiAoIXRlc3RfY2l2aWwoTUlO X0pELCBNSU5fSkQgKyAzNjYsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7 CisgIGlmICghdGVzdF9jaXZpbCgyMzA1ODE0LCAyNTk4MDA3LCBncmVnKSkK KyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3RfY2l2aWwoTUFYX0pE IC0gMzY2LCBNQVhfSkQsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7CisK KyAgaWYgKCF0ZXN0X2NpdmlsKE1JTl9KRCwgTUlOX0pEICsgMzY2LCBJVEFM WSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKCF0ZXN0X2NpdmlsKDIz MDU4MTQsIDI1OTgwMDcsIElUQUxZKSkKKyAgICByZXR1cm4gUWZhbHNlOwor ICBpZiAoIXRlc3RfY2l2aWwoTUFYX0pEIC0gMzY2LCBNQVhfSkQsIElUQUxZ KSkKKyAgICByZXR1cm4gUWZhbHNlOworCisgIHJldHVybiBRdHJ1ZTsKK30K Kworc3RhdGljIGludAordGVzdF9vcmRpbmFsKGxvbmcgZnJvbSwgbG9uZyB0 bywgZG91YmxlIHNnKQoreworICBsb25nIGo7CisKKyAgZnByaW50ZihzdGRl cnIsICIlbGQuLi4lbGQgKCVsZCkgLSAlLjBmXG4iLCBmcm9tLCB0bywgdG8g LSBmcm9tLCBzZyk7CisgIGZvciAoaiA9IGZyb207IGogPD0gdG87IGorKykg eworICAgIGludCB5LCBkLCBuczsKKyAgICBsb25nIHJqOworCisgICAgamRf dG9fb3JkaW5hbChqLCBzZywgJnksICZkKTsKKyAgICBvcmRpbmFsX3RvX2pk KHksIGQsIHNnLCAmcmosICZucyk7CisgICAgaWYgKGogIT0gcmopIHsKKyAg ICAgIGZwcmludGYoc3RkZXJyLCAiJWxkICE9ICVsZFxuIiwgaiwgcmopOwor ICAgICAgcmV0dXJuIDA7CisgICAgfQorICB9CisgIHJldHVybiAxOworfQor CitzdGF0aWMgVkFMVUUKK2RhdGVfc190ZXN0X29yZGluYWwoVkFMVUUga2xh c3MpCit7CisgIGRvdWJsZSBncmVnID0gLU5VTTJEQkwocmJfY29uc3RfZ2V0 KHJiX2NGbG9hdCwgcmJfaW50ZXJuKCJJTkZJTklUWSIpKSk7CisKKyAgaWYg KCF0ZXN0X29yZGluYWwoTUlOX0pELCBNSU5fSkQgKyAzNjYsIGdyZWcpKQor ICAgIHJldHVybiBRZmFsc2U7CisgIGlmICghdGVzdF9vcmRpbmFsKDIzMDU4 MTQsIDI1OTgwMDcsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7CisgIGlm ICghdGVzdF9vcmRpbmFsKE1BWF9KRCAtIDM2NiwgTUFYX0pELCBncmVnKSkK KyAgICByZXR1cm4gUWZhbHNlOworCisgIGlmICghdGVzdF9vcmRpbmFsKE1J Tl9KRCwgTUlOX0pEICsgMzY2LCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxz ZTsKKyAgaWYgKCF0ZXN0X29yZGluYWwoMjMwNTgxNCwgMjU5ODAwNywgSVRB TFkpKQorICAgIHJldHVybiBRZmFsc2U7CisgIGlmICghdGVzdF9vcmRpbmFs KE1BWF9KRCAtIDM2NiwgTUFYX0pELCBJVEFMWSkpCisgICAgcmV0dXJuIFFm YWxzZTsKKworICByZXR1cm4gUXRydWU7Cit9CisKK3N0YXRpYyBpbnQKK3Rl c3RfY29tbWVyY2lhbChsb25nIGZyb20sIGxvbmcgdG8sIGRvdWJsZSBzZykK K3sKKyAgbG9uZyBqOworCisgIGZwcmludGYoc3RkZXJyLCAiJWxkLi4uJWxk ICglbGQpIC0gJS4wZlxuIiwgZnJvbSwgdG8sIHRvIC0gZnJvbSwgc2cpOwor ICBmb3IgKGogPSBmcm9tOyBqIDw9IHRvOyBqKyspIHsKKyAgICBpbnQgeSwg dywgZCwgbnM7CisgICAgbG9uZyByajsKKworICAgIGpkX3RvX2NvbW1lcmNp YWwoaiwgc2csICZ5LCAmdywgJmQpOworICAgIGNvbW1lcmNpYWxfdG9famQo eSwgdywgZCwgc2csICZyaiwgJm5zKTsKKyAgICBpZiAoaiAhPSByaikgewor ICAgICAgZnByaW50ZihzdGRlcnIsICIlbGQgIT0gJWxkXG4iLCBqLCByaik7 CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9 CisKK3N0YXRpYyBWQUxVRQorZGF0ZV9zX3Rlc3RfY29tbWVyY2lhbChWQUxV RSBrbGFzcykKK3sKKyAgZG91YmxlIGdyZWcgPSAtTlVNMkRCTChyYl9jb25z dF9nZXQocmJfY0Zsb2F0LCByYl9pbnRlcm4oIklORklOSVRZIikpKTsKKwor ICBpZiAoIXRlc3RfY29tbWVyY2lhbChNSU5fSkQsIE1JTl9KRCArIDM2Niwg Z3JlZykpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKCF0ZXN0X2NvbW1l cmNpYWwoMjMwNTgxNCwgMjU5ODAwNywgZ3JlZykpCisgICAgcmV0dXJuIFFm YWxzZTsKKyAgaWYgKCF0ZXN0X2NvbW1lcmNpYWwoTUFYX0pEIC0gMzY2LCBN QVhfSkQsIGdyZWcpKQorICAgIHJldHVybiBRZmFsc2U7CisKKyAgaWYgKCF0 ZXN0X2NvbW1lcmNpYWwoTUlOX0pELCBNSU5fSkQgKyAzNjYsIElUQUxZKSkK KyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3RfY29tbWVyY2lhbCgy MzA1ODE0LCAyNTk4MDA3LCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsK KyAgaWYgKCF0ZXN0X2NvbW1lcmNpYWwoTUFYX0pEIC0gMzY2LCBNQVhfSkQs IElUQUxZKSkKKyAgICByZXR1cm4gUWZhbHNlOworCisgIHJldHVybiBRdHJ1 ZTsKK30KKworc3RhdGljIGludAordGVzdF93ZWVrbnVtKGxvbmcgZnJvbSwg bG9uZyB0bywgaW50IGYsIGRvdWJsZSBzZykKK3sKKyAgbG9uZyBqOworCisg IGZwcmludGYoc3RkZXJyLCAiJWxkLi4uJWxkICglbGQpIC0gJS4wZlxuIiwg ZnJvbSwgdG8sIHRvIC0gZnJvbSwgc2cpOworICBmb3IgKGogPSBmcm9tOyBq IDw9IHRvOyBqKyspIHsKKyAgICBpbnQgeSwgdywgZCwgbnM7CisgICAgbG9u ZyByajsKKworICAgIGpkX3RvX3dlZWtudW0oaiwgZiwgc2csICZ5LCAmdywg JmQpOworICAgIHdlZWtudW1fdG9famQoeSwgdywgZCwgZiwgc2csICZyaiwg Jm5zKTsKKyAgICBpZiAoaiAhPSByaikgeworICAgICAgZnByaW50ZihzdGRl cnIsICIlbGQgIT0gJWxkXG4iLCBqLCByaik7CisgICAgICByZXR1cm4gMDsK KyAgICB9CisgIH0KKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBWQUxVRQor ZGF0ZV9zX3Rlc3Rfd2Vla251bShWQUxVRSBrbGFzcykKK3sKKyAgZG91Ymxl IGdyZWcgPSAtTlVNMkRCTChyYl9jb25zdF9nZXQocmJfY0Zsb2F0LCByYl9p bnRlcm4oIklORklOSVRZIikpKTsKKyAgaW50IGY7CisKKyAgZm9yIChmID0g MDsgZiA8PSAxOyBmKyspIHsKKyAgICBpZiAoIXRlc3Rfd2Vla251bShNSU5f SkQsIE1JTl9KRCArIDM2NiwgZiwgZ3JlZykpCisgICAgICByZXR1cm4gUWZh bHNlOworICAgIGlmICghdGVzdF93ZWVrbnVtKDIzMDU4MTQsIDI1OTgwMDcs IGYsIGdyZWcpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKyAgICBpZiAoIXRl c3Rfd2Vla251bShNQVhfSkQgLSAzNjYsIE1BWF9KRCwgZiwgZ3JlZykpCisg ICAgICByZXR1cm4gUWZhbHNlOworCisgICAgaWYgKCF0ZXN0X3dlZWtudW0o TUlOX0pELCBNSU5fSkQgKyAzNjYsIGYsIElUQUxZKSkKKyAgICAgIHJldHVy biBRZmFsc2U7CisgICAgaWYgKCF0ZXN0X3dlZWtudW0oMjMwNTgxNCwgMjU5 ODAwNywgZiwgSVRBTFkpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKyAgICBp ZiAoIXRlc3Rfd2Vla251bShNQVhfSkQgLSAzNjYsIE1BWF9KRCwgZiwgSVRB TFkpKQorICAgICAgcmV0dXJuIFFmYWxzZTsKKyAgfQorCisgIHJldHVybiBR dHJ1ZTsKK30KKworCitzdGF0aWMgaW50Cit0ZXN0X250aF9rZGF5KGxvbmcg ZnJvbSwgbG9uZyB0bywgZG91YmxlIHNnKQoreworICBsb25nIGo7CisKKyAg ZnByaW50ZihzdGRlcnIsICIlbGQuLi4lbGQgKCVsZCkgLSAlLjBmXG4iLCBm cm9tLCB0bywgdG8gLSBmcm9tLCBzZyk7CisgIGZvciAoaiA9IGZyb207IGog PD0gdG87IGorKykgeworICAgIGludCB5LCBtLCBuLCBrLCBuczsKKyAgICBs b25nIHJqOworCisgICAgamRfdG9fbnRoX2tkYXkoaiwgc2csICZ5LCAmbSwg Jm4sICZrKTsKKyAgICBudGhfa2RheV90b19qZCh5LCBtLCBuLCBrLCBzZywg JnJqLCAmbnMpOworICAgIGlmIChqICE9IHJqKSB7CisgICAgICBmcHJpbnRm KHN0ZGVyciwgIiVsZCAhPSAlbGRcbiIsIGosIHJqKTsKKyAgICAgIHJldHVy biAwOworICAgIH0KKyAgfQorICByZXR1cm4gMTsKK30KKworc3RhdGljIFZB TFVFCitkYXRlX3NfdGVzdF9udGhfa2RheShWQUxVRSBrbGFzcykKK3sKKyAg ZG91YmxlIGdyZWcgPSAtTlVNMkRCTChyYl9jb25zdF9nZXQocmJfY0Zsb2F0 LCByYl9pbnRlcm4oIklORklOSVRZIikpKTsKKworICBpZiAoIXRlc3RfbnRo X2tkYXkoTUlOX0pELCBNSU5fSkQgKyAzNjYsIGdyZWcpKQorICAgIHJldHVy biBRZmFsc2U7CisgIGlmICghdGVzdF9udGhfa2RheSgyMzA1ODE0LCAyNTk4 MDA3LCBncmVnKSkKKyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3Rf bnRoX2tkYXkoTUFYX0pEIC0gMzY2LCBNQVhfSkQsIGdyZWcpKQorICAgIHJl dHVybiBRZmFsc2U7CisKKyAgaWYgKCF0ZXN0X250aF9rZGF5KE1JTl9KRCwg TUlOX0pEICsgMzY2LCBJVEFMWSkpCisgICAgcmV0dXJuIFFmYWxzZTsKKyAg aWYgKCF0ZXN0X250aF9rZGF5KDIzMDU4MTQsIDI1OTgwMDcsIElUQUxZKSkK KyAgICByZXR1cm4gUWZhbHNlOworICBpZiAoIXRlc3RfbnRoX2tkYXkoTUFY X0pEIC0gMzY2LCBNQVhfSkQsIElUQUxZKSkKKyAgICByZXR1cm4gUWZhbHNl OworCisgIHJldHVybiBRdHJ1ZTsKK30KKworc3RhdGljIFZBTFVFCitkYXRl X3NfdGVzdF9hbGwoVkFMVUUga2xhc3MpCit7CisgIGlmIChkYXRlX3NfdGVz dF9jaXZpbChrbGFzcykgPT0gUWZhbHNlKQorICAgIHJldHVybiBRZmFsc2U7 CisgIGlmIChkYXRlX3NfdGVzdF9vcmRpbmFsKGtsYXNzKSA9PSBRZmFsc2Up CisgICAgcmV0dXJuIFFmYWxzZTsKKyAgaWYgKGRhdGVfc190ZXN0X2NvbW1l cmNpYWwoa2xhc3MpID09IFFmYWxzZSkKKyAgICByZXR1cm4gUWZhbHNlOwor ICBpZiAoZGF0ZV9zX3Rlc3Rfd2Vla251bShrbGFzcykgPT0gUWZhbHNlKQor ICAgIHJldHVybiBRZmFsc2U7CisgIGlmIChkYXRlX3NfdGVzdF9udGhfa2Rh eShrbGFzcykgPT0gUWZhbHNlKQorICAgIHJldHVybiBRZmFsc2U7CisgIHJl dHVybiBRdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkCitJbml0X2RhdGVfY29y ZSh2b2lkKQoreworICBhc3NlcnQoZnByaW50ZihzdGRlcnIsICJhc3NlcnQo KSBpcyBub3cgYWN0aXZlXG4iKSk7CisKKyAgcnplcm8gPSByYl9yYXRpb25h bF9uZXcxKElOVDJGSVgoMCkpOworICByaGFsZiA9IHJiX3JhdGlvbmFsX25l dzIoSU5UMkZJWCgxKSwgSU5UMkZJWCgyKSk7CisgIGRheV9pbl9uYW5vc2Vj b25kcyA9IHJiX2xsMmludW0oREFZX0lOX05BTk9TRUNPTkRTKTsKKworICBy Yl9nY19yZWdpc3Rlcl9tYXJrX29iamVjdChyemVybyk7CisgIHJiX2djX3Jl Z2lzdGVyX21hcmtfb2JqZWN0KHJoYWxmKTsKKyAgcmJfZ2NfcmVnaXN0ZXJf bWFya19vYmplY3QoZGF5X2luX25hbm9zZWNvbmRzKTsKKworICAvKiBkYXRl ICovCisKKyAgY0RhdGUgPSByYl9kZWZpbmVfY2xhc3MoIkRhdGUiLCByYl9j T2JqZWN0KTsKKworICByYl9kZWZpbmVfYWxsb2NfZnVuYyhjRGF0ZSwgZF9s aXRlX3NfYWxsb2MpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj RGF0ZSwgIm5ld19yISIsIGRhdGVfc19uZXdfcl9iYW5nLCAtMSk7CisgIHJi X2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAibmV3X2whIiwgZGF0 ZV9zX25ld19sX2JhbmcsIC0xKTsKKworICByYl9kZWZpbmVfc2luZ2xldG9u X21ldGhvZChjRGF0ZSwgInZhbGlkX2pkPyIsIGRhdGVfc192YWxpZF9qZF9w LCAtMSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAi dmFsaWRfb3JkaW5hbD8iLAorCQkJICAgICBkYXRlX3NfdmFsaWRfb3JkaW5h bF9wLCAtMSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRl LCAidmFsaWRfY2l2aWw/IiwgZGF0ZV9zX3ZhbGlkX2NpdmlsX3AsIC0xKTsK KyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0RhdGUsICJ2YWxpZF9k YXRlPyIsIGRhdGVfc192YWxpZF9jaXZpbF9wLCAtMSk7CisgIHJiX2RlZmlu ZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAidmFsaWRfY29tbWVyY2lhbD8i LAorCQkJICAgICBkYXRlX3NfdmFsaWRfY29tbWVyY2lhbF9wLCAtMSk7Cisg IHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlLCAiamQiLCBkYXRl X3NfamQsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0Rh dGUsICJvcmRpbmFsIiwgZGF0ZV9zX29yZGluYWwsIC0xKTsKKyAgcmJfZGVm aW5lX3NpbmdsZXRvbl9tZXRob2QoY0RhdGUsICJjaXZpbCIsIGRhdGVfc19j aXZpbCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0 ZSwgIm5ldyIsIGRhdGVfc19jaXZpbCwgLTEpOworICByYl9kZWZpbmVfc2lu Z2xldG9uX21ldGhvZChjRGF0ZSwgImNvbW1lcmNpYWwiLCBkYXRlX3NfY29t bWVyY2lhbCwgLTEpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj RGF0ZSwgInRvZGF5IiwgZGF0ZV9zX3RvZGF5LCAtMSk7CisKKyAgcmJfZGVm aW5lX21ldGhvZChjRGF0ZSwgImFqZCIsIGRfbGl0ZV9hamQsIDApOworICBy Yl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAiYW1qZCIsIGRfbGl0ZV9hbWpkLCAw KTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgImpkIiwgZF9saXRlX2pk LCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIm1qZCIsIGRfbGl0 ZV9tamQsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAibGQiLCBk X2xpdGVfbGQsIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJ5 ZWFyIiwgZF9saXRlX3llYXIsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNE YXRlLCAieWRheSIsIGRfbGl0ZV95ZGF5LCAwKTsKKyAgcmJfZGVmaW5lX21l dGhvZChjRGF0ZSwgIm1vbiIsIGRfbGl0ZV9tb24sIDApOworICByYl9kZWZp bmVfbWV0aG9kKGNEYXRlLCAibW9udGgiLCBkX2xpdGVfbW9uLCAwKTsKKyAg cmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIm1kYXkiLCBkX2xpdGVfbWRheSwg MCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJkYXkiLCBkX2xpdGVf bWRheSwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJkYXlfZnJh Y3Rpb24iLCBkX2xpdGVfZGF5X2ZyYWN0aW9uLCAwKTsKKworICByYl9kZWZp bmVfcHJpdmF0ZV9tZXRob2QoY0RhdGUsICJ3bnVtMCIsIGRfbGl0ZV93bnVt MCwgMCk7CisgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZSwgIndu dW0xIiwgZF9saXRlX3dudW0xLCAwKTsKKworICByYl9kZWZpbmVfcHJpdmF0 ZV9tZXRob2QoY0RhdGUsICJob3VyIiwgZF9saXRlX2hvdXIsIDApOworICBy Yl9kZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGUsICJtaW4iLCBkX2xpdGVf bWluLCAwKTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAi bWludXRlIiwgZF9saXRlX21pbiwgMCk7CisgIHJiX2RlZmluZV9wcml2YXRl X21ldGhvZChjRGF0ZSwgInNlYyIsIGRfbGl0ZV9zZWMsIDApOworICByYl9k ZWZpbmVfcHJpdmF0ZV9tZXRob2QoY0RhdGUsICJzZWNvbmQiLCBkX2xpdGVf c2VjLCAwKTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAi c2VjX2ZyYWN0aW9uIiwgZF9saXRlX3NlY19mcmFjdGlvbiwgMCk7CisgIHJi X2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZSwgInNlY29uZF9mcmFjdGlv biIsIGRfbGl0ZV9zZWNfZnJhY3Rpb24sIDApOworICByYl9kZWZpbmVfcHJp dmF0ZV9tZXRob2QoY0RhdGUsICJvZmZzZXQiLCBkX2xpdGVfb2Zmc2V0LCAw KTsKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAiem9uZSIs IGRfbGl0ZV96b25lLCAwKTsKKworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRl LCAiY3d5ZWFyIiwgZF9saXRlX2N3eWVhciwgMCk7CisgIHJiX2RlZmluZV9t ZXRob2QoY0RhdGUsICJjd2VlayIsIGRfbGl0ZV9jd2VlaywgMCk7CisgIHJi X2RlZmluZV9tZXRob2QoY0RhdGUsICJjd2RheSIsIGRfbGl0ZV9jd2RheSwg MCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIndkYXkiLCBkX2xp dGVfd2RheSwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgImp1 bGlhbj8iLCBkX2xpdGVfanVsaWFuX3AsIDApOworICByYl9kZWZpbmVfbWV0 aG9kKGNEYXRlLCAiZ3JlZ29yaWFuPyIsIGRfbGl0ZV9ncmVnb3JpYW5fcCwg MCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJsZWFwPyIsIGRfbGl0 ZV9sZWFwX3AsIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGUsICJz dGFydCIsIGRfbGl0ZV9zdGFydCwgMCk7CisgIHJiX2RlZmluZV9tZXRob2Qo Y0RhdGUsICJuZXdfc3RhcnQiLCBkX2xpdGVfbmV3X3N0YXJ0LCAtMSk7Cisg IHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZSwgIm5ld19vZmZzZXQi LCBkX2xpdGVfbmV3X29mZnNldCwgLTEpOworCisgIHJiX2RlZmluZV9tZXRo b2QoY0RhdGUsICIrIiwgZF9saXRlX3BsdXMsIDEpOworICByYl9kZWZpbmVf bWV0aG9kKGNEYXRlLCAiLSIsIGRfbGl0ZV9taW51cywgMSk7CisKKyAgcmJf ZGVmaW5lX21ldGhvZChjRGF0ZSwgIjw9PiIsIGRfbGl0ZV9jbXAsIDEpOwor ICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAiPT09IiwgZF9saXRlX2VxdWFs LCAxKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgImVxbD8iLCBkX2xp dGVfZXFsX3AsIDEpOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlLCAiaGFz aCIsIGRfbGl0ZV9oYXNoLCAwKTsKKworICByYl9kZWZpbmVfbWV0aG9kKGNE YXRlLCAidG9fcyIsIGRfbGl0ZV90b19zLCAwKTsKKyAgcmJfZGVmaW5lX21l dGhvZChjRGF0ZSwgImluc3BlY3QiLCBkX2xpdGVfaW5zcGVjdCwgMCk7CisK KyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZSwgIm1hcnNoYWxfZHVtcCIsIGRf bGl0ZV9tYXJzaGFsX2R1bXAsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNE YXRlLCAibWFyc2hhbF9sb2FkIiwgZF9saXRlX21hcnNoYWxfbG9hZCwgMSk7 CisKKyAgcmJfZGVmaW5lX3ByaXZhdGVfbWV0aG9kKGNEYXRlLCAiX19jYV9f IiwgZF9yaWdodF9jYXNoLCAwKTsKKworICAvKiBkYXRldGltZSAqLworCisg IGNEYXRlVGltZSA9IHJiX2RlZmluZV9jbGFzcygiRGF0ZVRpbWUiLCBjRGF0 ZSk7CisKKyAgcmJfZGVmaW5lX2FsbG9jX2Z1bmMoY0RhdGVUaW1lLCBkdF9s aXRlX3NfYWxsb2MpOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChj RGF0ZVRpbWUsICJuZXdfbCEiLCBkYXRldGltZV9zX25ld19sX2JhbmcsIC0x KTsKKworICByYl91bmRlZl9tZXRob2QoQ0xBU1NfT0YoY0RhdGVUaW1lKSwg InRvZGF5Iik7CisKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9tZXRob2QoY0Rh dGVUaW1lLCAiamQiLCBkYXRldGltZV9zX2pkLCAtMSk7CisgIHJiX2RlZmlu ZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlVGltZSwgIm9yZGluYWwiLCBkYXRl dGltZV9zX29yZGluYWwsIC0xKTsKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9t ZXRob2QoY0RhdGVUaW1lLCAiY2l2aWwiLCBkYXRldGltZV9zX2NpdmlsLCAt MSk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRlVGltZSwg Im5ldyIsIGRhdGV0aW1lX3NfY2l2aWwsIC0xKTsKKyAgcmJfZGVmaW5lX3Np bmdsZXRvbl9tZXRob2QoY0RhdGVUaW1lLCAiY29tbWVyY2lhbCIsCisJCQkg ICAgIGRhdGV0aW1lX3NfY29tbWVyY2lhbCwgLTEpOworICByYl9kZWZpbmVf c2luZ2xldG9uX21ldGhvZChjRGF0ZVRpbWUsICJub3ciLCBkYXRldGltZV9z X25vdywgLTEpOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAi YWpkIiwgZHRfbGl0ZV9hamQsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNE YXRlVGltZSwgImFtamQiLCBkdF9saXRlX2FtamQsIDApOworICByYl9kZWZp bmVfbWV0aG9kKGNEYXRlVGltZSwgImpkIiwgZHRfbGl0ZV9qZCwgMCk7Cisg IHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibWpkIiwgZHRfbGl0ZV9t amQsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgImxkIiwg ZHRfbGl0ZV9sZCwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRp bWUsICJ5ZWFyIiwgZHRfbGl0ZV95ZWFyLCAwKTsKKyAgcmJfZGVmaW5lX21l dGhvZChjRGF0ZVRpbWUsICJ5ZGF5IiwgZHRfbGl0ZV95ZGF5LCAwKTsKKyAg cmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJtb24iLCBkdF9saXRlX21v biwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibW9udGgi LCBkdF9saXRlX21vbiwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVU aW1lLCAibWRheSIsIGR0X2xpdGVfbWRheSwgMCk7CisgIHJiX2RlZmluZV9t ZXRob2QoY0RhdGVUaW1lLCAiZGF5IiwgZHRfbGl0ZV9tZGF5LCAwKTsKKyAg cmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJkYXlfZnJhY3Rpb24iLCBk dF9saXRlX2RheV9mcmFjdGlvbiwgMCk7CisKKyAgcmJfZGVmaW5lX3ByaXZh dGVfbWV0aG9kKGNEYXRlVGltZSwgIndudW0wIiwgZHRfbGl0ZV93bnVtMCwg MCk7CisgIHJiX2RlZmluZV9wcml2YXRlX21ldGhvZChjRGF0ZVRpbWUsICJ3 bnVtMSIsIGR0X2xpdGVfd251bTEsIDApOworCisgIHJiX2RlZmluZV9tZXRo b2QoY0RhdGVUaW1lLCAiaG91ciIsIGR0X2xpdGVfaG91ciwgMCk7CisgIHJi X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibWluIiwgZHRfbGl0ZV9taW4s IDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgIm1pbnV0ZSIs IGR0X2xpdGVfbWluLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRp bWUsICJzZWMiLCBkdF9saXRlX3NlYywgMCk7CisgIHJiX2RlZmluZV9tZXRo b2QoY0RhdGVUaW1lLCAic2Vjb25kIiwgZHRfbGl0ZV9zZWMsIDApOworICBy Yl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgInNlY19mcmFjdGlvbiIsIGR0 X2xpdGVfc2VjX2ZyYWN0aW9uLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChj RGF0ZVRpbWUsICJzZWNvbmRfZnJhY3Rpb24iLCBkdF9saXRlX3NlY19mcmFj dGlvbiwgMCk7CisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAib2Zm c2V0IiwgZHRfbGl0ZV9vZmZzZXQsIDApOworICByYl9kZWZpbmVfbWV0aG9k KGNEYXRlVGltZSwgInpvbmUiLCBkdF9saXRlX3pvbmUsIDApOworCisgIHJi X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAiY3d5ZWFyIiwgZHRfbGl0ZV9j d3llYXIsIDApOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgImN3 ZWVrIiwgZHRfbGl0ZV9jd2VlaywgMCk7CisgIHJiX2RlZmluZV9tZXRob2Qo Y0RhdGVUaW1lLCAiY3dkYXkiLCBkdF9saXRlX2N3ZGF5LCAwKTsKKworICBy Yl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgIndkYXkiLCBkdF9saXRlX3dk YXksIDApOworCisgIHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAianVs aWFuPyIsIGR0X2xpdGVfanVsaWFuX3AsIDApOworICByYl9kZWZpbmVfbWV0 aG9kKGNEYXRlVGltZSwgImdyZWdvcmlhbj8iLCBkdF9saXRlX2dyZWdvcmlh bl9wLCAwKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJsZWFw PyIsIGR0X2xpdGVfbGVhcF9wLCAwKTsKKworICByYl9kZWZpbmVfbWV0aG9k KGNEYXRlVGltZSwgInN0YXJ0IiwgZHRfbGl0ZV9zdGFydCwgMCk7CisgIHJi X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibmV3X3N0YXJ0IiwgZHRfbGl0 ZV9uZXdfc3RhcnQsIC0xKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRp bWUsICJuZXdfb2Zmc2V0IiwgZHRfbGl0ZV9uZXdfb2Zmc2V0LCAtMSk7CisK KyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICIrIiwgZHRfbGl0ZV9w bHVzLCAxKTsKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICItIiwg ZHRfbGl0ZV9taW51cywgMSk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0 ZVRpbWUsICI8PT4iLCBkdF9saXRlX2NtcCwgMSk7CisgIHJiX2RlZmluZV9t ZXRob2QoY0RhdGVUaW1lLCAiPT09IiwgZHRfbGl0ZV9lcXVhbCwgMSk7Cisg IHJiX2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAiZXFsPyIsIGR0X2xpdGVf ZXFsX3AsIDEpOworICByYl9kZWZpbmVfbWV0aG9kKGNEYXRlVGltZSwgImhh c2giLCBkdF9saXRlX2hhc2gsIDApOworCisgIHJiX2RlZmluZV9tZXRob2Qo Y0RhdGVUaW1lLCAidG9fcyIsIGR0X2xpdGVfdG9fcywgMCk7CisgIHJiX2Rl ZmluZV9tZXRob2QoY0RhdGVUaW1lLCAiaW5zcGVjdCIsIGR0X2xpdGVfaW5z cGVjdCwgMCk7CisKKyAgcmJfZGVmaW5lX21ldGhvZChjRGF0ZVRpbWUsICJt YXJzaGFsX2R1bXAiLCBkdF9saXRlX21hcnNoYWxfZHVtcCwgMCk7CisgIHJi X2RlZmluZV9tZXRob2QoY0RhdGVUaW1lLCAibWFyc2hhbF9sb2FkIiwgZHRf bGl0ZV9tYXJzaGFsX2xvYWQsIDEpOworCisgIHJiX2RlZmluZV9wcml2YXRl X21ldGhvZChjRGF0ZVRpbWUsICJfX2NhX18iLCBkdF9yaWdodF9jYXNoLCAw KTsKKworI2lmbmRlZiBOREVCVUcKKyAgcmJfZGVmaW5lX3NpbmdsZXRvbl9t ZXRob2QoY0RhdGUsICJ0ZXN0X2NpdmlsIiwgZGF0ZV9zX3Rlc3RfY2l2aWws IDApOworICByYl9kZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInRl c3Rfb3JkaW5hbCIsIGRhdGVfc190ZXN0X29yZGluYWwsIDApOworICByYl9k ZWZpbmVfc2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInRlc3RfY29tbWVyY2lh bCIsIGRhdGVfc190ZXN0X2NvbW1lcmNpYWwsIDApOworICByYl9kZWZpbmVf c2luZ2xldG9uX21ldGhvZChjRGF0ZSwgInRlc3Rfd2Vla251bSIsIGRhdGVf c190ZXN0X3dlZWtudW0sIDApOworICByYl9kZWZpbmVfc2luZ2xldG9uX21l dGhvZChjRGF0ZSwgInRlc3RfbnRoX2tkYXkiLCBkYXRlX3NfdGVzdF9udGhf a2RheSwgMCk7CisgIHJiX2RlZmluZV9zaW5nbGV0b25fbWV0aG9kKGNEYXRl LCAidGVzdF9hbGwiLCBkYXRlX3NfdGVzdF9hbGwsIDApOworI2VuZGlmCit9 CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBleHQvZGF0ZS9kYXRlX2NvcmUuYwpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAg ICsgdGV4dC9wbGFpbgoKSW5kZXg6IGV4dC9kYXRlL2V4dGNvbmYucmIKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gZXh0L2RhdGUvZXh0Y29uZi5yYgko cmV2aXNpb24gMCkKKysrIGV4dC9kYXRlL2V4dGNvbmYucmIJKHJldmlzaW9u IDApCkBAIC0wLDAgKzEsNCBAQAorcmVxdWlyZSAnbWttZicKK2hhdmVfZnVu YygnZmxvb3JsJywgJ21hdGguaCcpCitoYXZlX2Z1bmMoJ3JvdW5kbCcsICdt YXRoLmgnKQorY3JlYXRlX21ha2VmaWxlKCdkYXRlX2NvcmUnKQoKUHJvcGVy dHkgY2hhbmdlcyBvbjogZXh0L2RhdGUvZXh0Y29uZi5yYgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9w bGFpbgoK