Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

TGludXgg44Gu44Ot44Kw44Kk44Oz44KS44GL44Gj44GT6Imv44GP44GX44KI44GG44Gu5be7Cg==

この記事はPyspa Advent Calendar 2015のエントリとして書かれました。

IyBMaW51eCDjga7jg63jgrDjgqTjg7PjgpLjgYvjgaPjgZPoia/jgY/jgZfjgojjgYbjga7lt7sK
CuOBk+OCk+OBq+OBoeOBr++8geWkp+ixqumZoumCquawl+OBp+OBme+8gQoK5LuK5Zue44Gv44Ov
44Kk44Or44OJ44KI44Gt44Gh44KD44KT44Gu6Kmx44KS44GX44KI44GG44Go5oCd44Gj44Gf44Gu
44Gn44GZ44GM44CB5b2T5bGA44GL44KJ5Zyn5Yqb44GM44GL44GL44Gj44Gm44GX44G+44GECuOB
iuiUteWFpeOCiuOBq+OBquOBo+OBpuOBl+OBvuOBhOOBvuOBl+OBn+OAggoK6Z2e5bi444Gr5q6L
5b+144Gn44GZ44CCCgrjgZXjgabjgIHjgb/jgarjgZXjgpPjgZTlrZjnn6Xjga7jgojjgYbjgavj
g5fjg63jgrDjg6njg57jga/ml6XjgIXjgrXjgqTjgrHjg4fjg6rjg4Pjgq/jgpLpo5/jgaPjgabj
govjga7jgafjgZnjgYzjgIHjgZ3jga4K5LqL44Gr44Gk44GE44Gm44Gv6Kqw44KC6Kem44KM44G+
44Gb44KT44CCCgrjgarjgZzjgafjgZfjgofjgYbjgYvvvJ8KCuKApuOAggoK4oCm44CCCgrlg5Xj
goLop6bjgozjgarjgYTjgZPjgajjgavjgZfjgb7jgZnjgILjgILjgIIKClB5U3BhIOmWouOBl+OB
puipseOBmeOBqOOBhuOBo+OBi+OCiuOBl+OBn+OBk+OBqOOCkuOBl+OCg+OBueOCiuOBi+OBreOB
quOBhOOBl+OAgeS7luOBruOCiOOBreOCgOOCieOBruipseOCkuOBmeOCi+OBqArljbPjgIHntKDo
oYzoqr/mn7vljqgg4oaSIOeCjuS4iuOBmeOCi+OBruOBp+OChOOCgeOBpuOBiuOBjeOBvuOBmeOA
ggoK44G+44Gf56eB44Gu6Kmx44GX44Gm44GE44Gq44GE6YGO5Y6744Gu6Kmx44Gv44OX44Oz44Kz
44Os5paw5bm05Lya44Gn5qmf5Lya44GM44Ki44Os44Gw6Kmx44GX44G+44GZ44CCCgrjgafjgIHj
g43jgr/jgYzjgarjgYTjga7jgafjganjgYbjgZfjgojjgYbjgYvjgajmgJ3jgaPjgabjgYTjgZ/j
gokgYGxpZ2h0ZG0td2Via2l0LWdyZWV0ZXJgIOOCkuS9v+OBo+OBpuOBnwrjgZPjgajjgpLmgJ3j
gYTlh7rjgZfjgZ/jga7jgafjgZ3jgozjgavjgaTjgYTjgaYgMiDjgJwgMyDmlofmm7jjgY3jgZ/j
gYTjgajmgJ3jgYTjgb7jgZnjgIIKCiMjIExpZ2h0RE0KCkxpZ2h0RE0g44Gv44Kv44Ot44K544OH
44K544Kv44OI44OD44OX44Gu44OH44Kj44K544OX44Os44Kk44Oe44ON44O844K444Oj44Gn44GZ
44CCCgrlibLjgajlpJrjgY/jga7jg4fjgqPjgrnjg4jjg6rjg5Pjg6Xjg7zjgrfjg6fjg7Pjgafk
vb/jgYjjgb7jgZnjgIIKCui7vemHj+OBp+WfuuacrOeahOOBquapn+iDveOBq+a6luaLoOOBl+OB
puOBiuOCiuOAgVVJ6YOo44Go44Ot44K444OD44Kv6YOo44GM5oq96LGh5YyW44GV44KM44Gm44GK
44KK44Kr44K544K/44Oe44Kk44K644GMCuWPr+iDveOBq+OBquOBo+OBpuOBhOOBvuOBmeOAggoK
44Gd44Gu44Gf44KB44CBTGlnaHRETSDjga/jg63jgrDjgqTjg7MoVUkp6YOo44KS44Kr44K544K/
44Oe44Kk44K644GV44KM44KL44GT44Go44GM5aSa44GP44Gd44Gu6YOo5YiG44GvIGBncmVldGVy
YArjgajjgZfjgabjg5Hjg4PjgrHjg7zjgrjjg7PjgrDjgZXjgozjgabjgYTjgb7jgZnjgIIKCu+8
iFVidW50dSDjgafjga8gdW5pdHktZ3JlZXRlciDjgYzkvb/nlKjjgZXjgozjgabjgYTjgb7jgZnv
vIkKCiMjIEdyZWV0ZXIKCkdyZWV0ZXIg44GvIGBsaWdodGRtLWd0ay1ncmVldGVyYCwgYGxpZ2h0
ZG0ta2RlLWdyZWV0ZXJgIOOBquOBqeOBhOOCjeOBhOOCjeOBguOCi+OBruOBp+OBmeOBjOOAgQrj
gqvjgrnjgr/jg57jgqTjgrrlj6/og73jgajjgYTjgaPjgabjgoLmlbflsYXjgYzpq5jjgZ3jgYbj
gavopovjgYjjgb7jgZnjgIIKCuOCguOBo+OBqOewoeWNmOOBq+OCq+OCueOCv+ODnuOCpOOCuuOB
p+OBjeOBquOBhOOBp+OBl+OCh+OBhuOBi++8nwoK44CM44Gv44GE77yBU1RBUOe0sOiDnuOBr+OB
guOCiuOBvuOBme+8geOAjQoK44Go6KiA44KP44KT44Gw44GL44KK57Ch5Y2Y44Gr44Kr44K544K/
44Oe44Kk44K644GZ44KL5pa55rOV44GM44GC44KK44G+44GZ44CC44Gd44KM44GvIGBsaWdodGRt
LXdlYmtpdC1ncmVldGVyYArjgpLkvb/jgYbmlrnms5XjgafjgZnjgIIKCu+8iOOBiuOBvOOAnO+8
iQoKIyMgV2Via2l0LUdyZWV0ZXIKCmBsaWdodGRtLXdlYmtpdC1ncmVldGVyYCDjga/jgZ3jga7l
kI3jga7pgJrjgorjg4bjg7zjg57jgasgYHdlYmtpdGAg44GM5L2/55So44Gn44GN44G+44GZ44CC
CgpIVE1MLCBDU1Mg44OG44O844Oe44KS5L2c44KK44CB44Ot44Kw44Kk44Oz44Ot44K444OD44Kv
6YOo44KSIEphdmFzY3JpcHQg44Gn44Gh44KH44Gh44KH44Gj44Go5pu444GR44Gw5a6M5oiQ44Gn
44GZ44CCCgrjgarjgpPjgabjgYrmiYvou73jgarjgpPjgaDvvIHvvIEKCuOBvuOBmuOBryBgbGln
aHRkbS13ZWJraXQtZ3JlZXRlcmAg44KS44Kk44Oz44K544OI44O844Or44GX44CB5pyJ5Yq544Gr
44GX44G+44GZ44CCCgpgL2V0Yy9saWdodGRtL2xpZ2h0ZG0uY29uZmAg44Gn6Kit5a6a44Gn44GN
44G+44GZ44CCCgpgYGAKW1NlYXQ6Kl0KLi4uCmdyZWV0ZXItc2Vzc2lvbj1saWdodGRtLXdlYmtp
dC1ncmVldGVyCi4uLgpgYGAKCuasoeOBqyBgbGlnaHRkbS13ZWJraXQtZ3JlZXRlcmAg44Gu6Kit
5a6a44KSIGAvZXRjL2xpZ2h0ZG0vbGlnaHRkbS13ZWJraXQtZ3JlZXRlci5jb25mYArjgavmm7jj
gY3jgb7jgZnjgIIKCmBgYApbZ3JlZXRlcl0KYmFja2dyb3VuZD0KdGhlbWUtbmFtZT1DbGVhcmxv
b2tzCndlYmtpdC10aGVtZT1tYWMKZm9udC1uYW1lPVJpY3R5IDE0CnhmdC1hbnRpYWxpYXM9dHJ1
ZQp4ZnQtZHBpPTk2CnhmdC1oaW50c3R5bGU9c2xpZ2h0CnhmdC1yZ2JhPXJnYgpgYGAKCumHjeim
geOBquOBruOBryBgd2Via2l0LXRoZW1lYCDjgafjgZnjgILjgZPjga7jg4bjg7zjg57lkI3jgafl
j4LnhafjgZfjgavooYzjgY/jg4fjgqPjg6zjgq/jg4jjg6rjgYzmsbrjgb7jgorjgb7jgZnjgIIK
CuWPgueFp+OBmeOCiyBgL3Vzci9zaGFyZS9saWdodGRtLXdlYmtpdC90aGVtZXMvPHdlYmtpdC10
aGVtZT4vYCDjgafjgZnjgIIKCuS4iuiomOioreWumuOBquOCiSBgbWFjYCDjgajjgarjgaPjgabj
gYTjgovjga7jgacgYC91c3Ivc2hhcmUvbGlnaHRkbS13ZWJraXQvdGhlbWVzL21hYy9gIOOCkuWP
gueFpwrjgZfjgb7jgZnjgIIg44OG44O844Oe44Gv44OH44Kj44Os44Kv44OI44Oq44GU44Go44Gr
5YiG44GR44KJ44KM44KL44Gu44Gn6KSH5pWw44OG44O844Oe44KS44Kk44Oz44K544OI44O844Or
44GX44CB5YiH44KKCuabv+OBiOOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAggoK5a6f6Zqb44Gr
44Ot44Kw44Kk44Oz5pmC44Gr6Kqt44G/6L6844G+44KM44KL44Gu44Gv44OG44O844Oe5YaFIGBp
bmRleC50aGVtZWAg44Gn44GZ44CCCgrku6XkuIvjgavkvovjgpLmm7jjgY3jgb7jgZnjgIIKCmBg
YApbdGhlbWVdCm5hbWU9VGVzdCBUaGVtZQpkZXNjcmlwdGlvbj1UZXN0IFdlYmtpdCBUaGVtZQpl
bmdpbmU9bGlnaHRkbS13ZWJraXQtZ3JlZXRlcgp1cmw9aW5kZXguaHRtbApzZXNzaW9uPXhtb25h
ZApgYGAKCmB1cmxgIOOBjOWun+mam+OBq+iqreOBv+i+vOOBvuOCjOOCi+ODleOCoeOCpOODq+OB
q+OBquOCiuOBvuOBmeOAggrkuIroqJjjgafjga9VSeOAgeODreOCuOODg+OCr+OBquOBqeOBryBg
aW5kZXguaHRtbGAg44Gr6KiY6L+w44GX44Gm44GE44GN44G+44GZ44CCCgojIyDlrp/ot7UKCuOB
p+OBr+Wun+ijheS+i+OCkuimi+OBpuOBv+OBvuOBl+OCh+OBhuOAggoK6Kmz44GX44GP44Gv6Kqs
5piO44GX44G+44Gb44KT44GM44GK44GK44KI44Gd44Gu6Zuw5Zuy5rCX44Gv6Kej44KL44Go5oCd
44GE44G+44GZ44CCCgpgaW5kZXguaHRtbGAKCmBgYGh0bWwKPGh0bWw+CjxoZWFkPgo8bGluayBy
ZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJzdHlsZS5jc3MiIC8+CjxzY3Jp
cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InNjcmlwdC5qcyI+PC9zY3JpcHQ+CjwvaGVh
ZD4KCjxib2R5IG9ubG9hZD0iaW5pdGlhbGl6ZSgpIiBvbmNvbnRleHRtZW51PSJyZXR1cm4gZmFs
c2U7Ij4KICA8ZGl2IGNsYXNzPSJoZWFkZXIiPjxzcGFuIGlkPSJjdXJyZW50X3RpbWUiIGNsYXNz
PSJ0aW1lIj48L3NwYW4+PC9kaXY+CiAgPGRpdiBjbGFzcz0ibG9naW5fY29udGVudCI+CiAgICA8
ZGl2IGNsYXNzPSJsb2dpbl9jb250YWluZXIiPgogICAgICA8ZGl2IGNsYXNzPSJjZW50ZXIiPgog
ICAgICAgIDxkaXYgaWQ9InVzZXJfdGVtcGxhdGUiIGNsYXNzPSJ1c2VyIGhpZGRlbiBzbW9vdGgg
YnV0dG9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXJfaW1hZ2Vfd3JhcHBlciI+IDxpbWcg
Y2xhc3M9InVzZXJfaW1hZ2UiIHNyYz0iIi8+IDwvZGl2PgogICAgICAgICAgPHNwYW4gY2xhc3M9
InVzZXJfbmFtZSI+PC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRp
diBpZD0icGFzc3dvcmRfY29udGFpbmVyIiBjbGFzcz0iY2VudGVyIGhpZGRlbiBzbW9vdGgiPgog
ICAgICAgIDxmb3JtIGFjdGlvbj0iamF2YXNjcmlwdDogcHJvdmlkZV9zZWNyZXQoKSIgY2xhc3M9
InBhc3N3b3JkX3Byb21wdCI+CiAgICAgICAgICA8aW5wdXQgaWQ9InBhc3N3b3JkX2VudHJ5IiB0
eXBlPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9IlBhc3N3b3JkIiAvPgogICAgICAgIDwvZm9ybT4K
ICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICA8ZGl2IGlkPSJtZXNzYWdlIiBjbGFz
cz0ic21vb3RoIj4KICAgIDxkaXYgaWQ9Im1lc3NhZ2VfY29udGVudCI+PC9kaXY+CiAgPC9kaXY+
CiAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgPGRpdiBpZD0iYWN0aW9uX3RlbXBsYXRlIiBj
bGFzcz0iYWN0aW9uIGJ1dHRvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uX2ltYWdlX3dy
YXBwZXIiPjxpbWcgY2xhc3M9ImFjdGlvbl9pbWFnZSIgc3JjPSIiLz48L2Rpdj4KICAgICAgICA8
c3BhbiBjbGFzcz0iYWN0aW9uX2xhYmVsIj48L3NwYW4+CiAgICAgIDwvZGl2PgogIDwvZGl2Pgo8
L2JvZHk+CjwvaHRtbD4KCmBgYAoKYHNjcmlwdC5qc2AKCmBgYGphdmFzY3JpcHQKdmFyIHRpbWVf
cmVtYWluaW5nID0gMDsKdmFyIHNlbGVjdGVkX3VzZXIgPSBudWxsOwp2YXIgdmFsaWRfaW1hZ2Ug
PSAvLipcLihwbmd8c3ZnfGpwZ3xqcGVnfGJtcCkkL2k7CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLyBDQUxMQkFDSyBBUEkuIENhbGxlZCBieSB0aGUg
d2Via2l0IGdyZWVldGVyCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCgovLyBjYWxsZWQgd2hlbiB0aGUgZ3JlZXRlciBhc2tzIHRvIHNob3cgYSBsb2dpbiBw
cm9tcHQgZm9yIGEgdXNlcgpmdW5jdGlvbiBzaG93X3Byb21wdCh0ZXh0KSB7CiAgdmFyIHBhc3N3
b3JkX2NvbnRhaW5lcj0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3b3JkX2NvbnRhaW5l
ciIpOwogIHZhciBwYXNzd29yZF9lbnRyeT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBhc3N3
b3JkX2VudHJ5Iik7CgogIGlmICghaXNWaXNpYmxlKHBhc3N3b3JkX2NvbnRhaW5lcikpIHsKICAg
IHZhciB1c2Vycz0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnVzZXIiKTsKICAgIHZhciB1
c2VyX25vZGU9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiMiICsgc2VsZWN0ZWRfdXNlcik7CiAg
ICB2YXIgcmVjdD0gdXNlcl9ub2RlLmdldENsaWVudFJlY3RzKClbMF07CiAgICB2YXIgcGFyZW50
UmVjdD0gdXNlcl9ub2RlLnBhcmVudEVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKVswXTsKICAgIHZh
ciBjZW50ZXI9IHBhcmVudFJlY3Qud2lkdGgvMjsKICAgIHZhciBsZWZ0PSBjZW50ZXIgLSByZWN0
LndpZHRoLzIgLSByZWN0LmxlZnQ7CiAgICB2YXIgaSA9IDA7CiAgICBpZiAobGVmdCA8IDUgJiYg
bGVmdCA+IC01KSB7CiAgICAgIGxlZnQ9IDA7CiAgICB9CiAgICBmb3IgKGk9IDA7IGkgPCB1c2Vy
cy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgbm9kZT0gdXNlcnNbaV07CiAgICAgIHNldFZpc2li
bGUobm9kZSwgbm9kZS5pZCA9PSBzZWxlY3RlZF91c2VyKTsKICAgICAgbm9kZS5zdHlsZS5sZWZ0
PSBsZWZ0OwogICAgfQoKICAgIHNldFZpc2libGUocGFzc3dvcmRfY29udGFpbmVyLCB0cnVlKTsK
ICAgIHBhc3N3b3JkX2VudHJ5LnBsYWNlaG9sZGVyPSB0ZXh0LnJlcGxhY2UoIjoiLCAiIik7CiAg
fQogIHBhc3N3b3JkX2VudHJ5LnZhbHVlPSAiIjsKICBwYXNzd29yZF9lbnRyeS5mb2N1cygpOwp9
CgovLyBjYWxsZWQgd2hlbiB0aGUgZ3JlZXRlciBhc2tzIHRvIHNob3cgYSBtZXNzYWdlCmZ1bmN0
aW9uIHNob3dfbWVzc2FnZSh0ZXh0KSB7CiAgdmFyIG1lc3NhZ2U9IGRvY3VtZW50LnF1ZXJ5U2Vs
ZWN0b3IoIiNtZXNzYWdlX2NvbnRlbnQiKTsKICBtZXNzYWdlLmlubmVySFRNTD0gdGV4dDsKICBp
ZiAodGV4dCkgewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI21lc3NhZ2UiKS5jbGFzc0xp
c3QucmVtb3ZlKCJoaWRkZW4iKTsKICB9IGVsc2UgewogICAgZG9jdW1lbnQucXVlcnlTZWxlY3Rv
cigiI21lc3NhZ2UiKS5jbGFzc0xpc3QuYWRkKCJoaWRkZW4iKTsKICB9CiAgbWVzc2FnZS5jbGFz
c0xpc3QucmVtb3ZlKCJlcnJvciIpOwp9CgovLyBjYWxsZWQgd2hlbiB0aGUgZ3JlZXRlciBhc2tz
IHRvIHNob3cgYW4gZXJyb3IKZnVuY3Rpb24gc2hvd19lcnJvcih0ZXh0KSB7CiAgIHNob3dfbWVz
c2FnZSh0ZXh0KTsKICAgdmFyIG1lc3NhZ2U9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtZXNz
YWdlX2NvbnRlbnQiKTsKICAgbWVzc2FnZS5jbGFzc0xpc3QuYWRkKCJlcnJvciIpOwp9CgovLyBj
YWxsZWQgd2hlbiB0aGUgZ3JlZXRlciBpcyBmaW5pc2hlZCB0aGUgYXV0aGVudGljYXRpb24gcmVx
dWVzdApmdW5jdGlvbiBhdXRoZW50aWNhdGlvbl9jb21wbGV0ZSgpIHsKICBpZiAobGlnaHRkbS5p
c19hdXRoZW50aWNhdGVkKSB7CiAgICBsaWdodGRtLmxvZ2luKGxpZ2h0ZG0uYXV0aGVudGljYXRp
b25fdXNlciwgbGlnaHRkbS5kZWZhdWx0X3Nlc3Npb24pOwogIH0gZWxzZSB7CiAgICBzaG93X2Vy
cm9yKCJBdXRoZW50aWNhdGlvbiBGYWlsZWQiKTsKICAgIHN0YXJ0X2F1dGhlbnRpY2F0aW9uKHNl
bGVjdGVkX3VzZXIpOwogIH0KfQoKLy8gY2FsbGVkIHdoZW4gdGhlIGdyZWV0ZXIgd2FudHMgdXMg
dG8gcGVyZm9ybSBhIHRpbWVkIGxvZ2luCmZ1bmN0aW9uIHRpbWVkX2xvZ2luKHVzZXIpIHsKICAg
bGlnaHRkbS5sb2dpbiAobGlnaHRkbS50aW1lZF9sb2dpbl91c2VyKTsKICAgLy8gc2V0VGltZW91
dCgndGhyb2JiZXIoKScsIDEwMDApOwp9CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
Ly8gSW1wbGVtZW50YXRpb24KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmZ1bmN0aW9u
IHN0YXJ0X2F1dGhlbnRpY2F0aW9uKHVzZXJuYW1lKSB7CiAgIGxpZ2h0ZG0uY2FuY2VsX3RpbWVk
X2xvZ2luKCk7CiAgIHNlbGVjdGVkX3VzZXI9IHVzZXJuYW1lOwogICBsaWdodGRtLnN0YXJ0X2F1
dGhlbnRpY2F0aW9uKHVzZXJuYW1lKTsKfQoKZnVuY3Rpb24gcHJvdmlkZV9zZWNyZXQoKSB7CiAg
IHNob3dfbWVzc2FnZSgiTG9nZ2luZyBpbi4uLiIpOwogICB2YXIgZW50cnkgPSBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCcjcGFzc3dvcmRfZW50cnknKTsKICAgbGlnaHRkbS5wcm92aWRlX3NlY3Jl
dChlbnRyeS52YWx1ZSk7Cn0KCmZ1bmN0aW9uIHNob3dfdXNlcnMoKSB7CiAgdmFyIHVzZXJzID0g
ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiLnVzZXIiKTsKICBmb3IgKHZhciBpPSAwOyBpIDwg
dXNlcnMubGVuZ3RoOyBpKyspIHsKICAgIHNldFZpc2libGUodXNlcnNbaV0sIHRydWUpOwogICAg
dXNlcnNbaV0uc3R5bGUubGVmdD0gMDsKICB9CiAgc2V0VmlzaWJsZShkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCIjcGFzc3dvcmRfY29udGFpbmVyIiksIGZhbHNlKTsKICBzZWxlY3RlZF91c2VyPSBu
dWxsOwp9CgpmdW5jdGlvbiB1c2VyX2NsaWNrZWQoZXZlbnQpIHsKICBpZiAoc2VsZWN0ZWRfdXNl
ciAhPSBudWxsKSB7CiAgICBzZWxlY3RlZF91c2VyPSBudWxsOwogICAgbGlnaHRkbS5jYW5jZWxf
YXV0aGVudGljYXRpb24oKTsKICAgIHNob3dfdXNlcnMoKTsKICB9IGVsc2UgewogICAgc2VsZWN0
ZWRfdXNlcj0gZXZlbnQuY3VycmVudFRhcmdldC5pZDsKICAgIHN0YXJ0X2F1dGhlbnRpY2F0aW9u
KGV2ZW50LmN1cnJlbnRUYXJnZXQuaWQpOwogIH0KICBzaG93X21lc3NhZ2UoIiIpOwogIGV2ZW50
LnN0b3BQcm9wYWdhdGlvbigpOwogIHJldHVybiBmYWxzZTsKfQoKZnVuY3Rpb24gc2V0VmlzaWJs
ZShlbGVtZW50LCB2aXNpYmxlKSB7CiAgaWYgKHZpc2libGUpIHsKICAgIGVsZW1lbnQuY2xhc3NM
aXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgfSBlbHNlIHsKICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFk
ZCgiaGlkZGVuIik7CiAgfQp9CgpmdW5jdGlvbiBpc1Zpc2libGUoZWxlbWVudCkgewogIHJldHVy
biAhZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImhpZGRlbiIpOwp9CgpmdW5jdGlvbiB1cGRh
dGVfdGltZSgpIHsKICB2YXIgdGltZT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImN1cnJlbnRf
dGltZSIpOwogIHZhciBkYXRlPSBuZXcgRGF0ZSgpOwoKICB2YXIgaGggPSBkYXRlLmdldEhvdXJz
KCk7CiAgdmFyIG1tID0gZGF0ZS5nZXRNaW51dGVzKCk7CiAgdmFyIHNzID0gZGF0ZS5nZXRTZWNv
bmRzKCk7CiAgdmFyIHN1ZmZpeD0gIkFNIjsKICBpZiAoaGggPiAxMikgewogICAgaGg9IGhoIC0g
MTI7CiAgICBzdWZmaXg9ICJQTSI7CiAgfQogIGlmIChoaCA8IDEwKSB7aGggPSAiMCIraGg7fQog
IGlmIChtbSA8IDEwKSB7bW0gPSAiMCIrbW07fQogIGlmIChzcyA8IDEwKSB7c3MgPSAiMCIrc3M7
fQogIHRpbWUuaW5uZXJIVE1MPSBoaCsiOiIrbW0gKyAiICIgKyBzdWZmaXg7Cn0KCi8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gSW5pdGlhbGl6YXRpb24KLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHsKICBzaG93X21l
c3NhZ2UoIiIpOwogIGluaXRpYWxpemVfdXNlcnMoKTsKICBpbml0aWFsaXplX2FjdGlvbnMoKTsK
ICBpbml0aWFsaXplX3RpbWVyKCk7Cn0KCmZ1bmN0aW9uIGluaXRpYWxpemVfdXNlcnMoKSB7CiAg
dmFyIHRlbXBsYXRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3VzZXJfdGVtcGxhdGUiKTsK
ICB2YXIgcGFyZW50ID0gdGVtcGxhdGUucGFyZW50RWxlbWVudDsKICBwYXJlbnQucmVtb3ZlQ2hp
bGQodGVtcGxhdGUpOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGxpZ2h0ZG0udXNlcnMubGVuZ3Ro
OyBpKyspIHsKICAgIHZhciB1c2VyPSBsaWdodGRtLnVzZXJzW2ldOwogICAgdmFyIHVzZXJOb2Rl
PSB0ZW1wbGF0ZS5jbG9uZU5vZGUodHJ1ZSk7CgogICAgdmFyIGltYWdlID0gdXNlck5vZGUuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZSgidXNlcl9pbWFnZSIpWzBdOwogICAgdmFyIG5hbWUgPSB1c2Vy
Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1c2VyX25hbWUiKVswXTsKICAgIG5hbWUuaW5u
ZXJIVE1MPSB1c2VyLmRpc3BsYXlfbmFtZTsKCiAgICBpZiAodXNlci5pbWFnZSkgewogICAgICBp
bWFnZS5zcmMgPSB1c2VyLmltYWdlOwogICAgICBpbWFnZS5vbmVycm9yPSBmdW5jdGlvbihlKSB7
CiAgICAgICAgZS5jdXJyZW50VGFyZ2V0LnNyYz0gImltZy9hdmF0YXIuc3ZnIjsKICAgICAgfTsK
ICAgIH0gZWxzZSB7CiAgICAgIGltYWdlLnNyYyA9ICJpbWcvYXZhdGFyLnN2ZyI7CiAgICB9Cgog
ICAgdXNlck5vZGUuaWQ9IHVzZXIubmFtZTsKICAgIHVzZXJOb2RlLm9uY2xpY2s9IHVzZXJfY2xp
Y2tlZDsKICAgIHBhcmVudC5hcHBlbmRDaGlsZCh1c2VyTm9kZSk7CiAgfQogIHNldFRpbWVvdXQo
c2hvd191c2VycywgNDAwKTsKfQoKZnVuY3Rpb24gaW5pdGlhbGl6ZV9hY3Rpb25zKCkgewogIHZh
ciB0ZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb25fdGVtcGxhdGUiKTsK
ICB2YXIgcGFyZW50ID0gdGVtcGxhdGUucGFyZW50RWxlbWVudDsKICBwYXJlbnQucmVtb3ZlQ2hp
bGQodGVtcGxhdGUpOwoKICBpZiAobGlnaHRkbS5jYW5fc3VzcGVuZCkgewogICAgYWRkX2FjdGlv
bigic2xlZXAiLCJTbGVlcCIsICJpbWcvc2xlZXAuc3ZnIiwgZnVuY3Rpb24oZSkge2xpZ2h0ZG0u
c3VzcGVuZCgpOyBlLnN0b3BQcm9wYWdhdGlvbigpO30sIHRlbXBsYXRlLCBwYXJlbnQpOwogIH0K
ICBpZiAobGlnaHRkbS5jYW5fcmVzdGFydCkgewogICAgYWRkX2FjdGlvbigicmVzdGFydCIsICJS
ZXN0YXJ0IiwgImltZy9yZXN0YXJ0LnN2ZyIsIGZ1bmN0aW9uKGUpIHtsaWdodGRtLnJlc3RhcnQo
KTsgZS5zdG9wUHJvcGFnYXRpb24oKTt9LCB0ZW1wbGF0ZSwgcGFyZW50KTsKICB9CiAgaWYgKGxp
Z2h0ZG0uY2FuX3NodXRkb3duKSB7CiAgICBhZGRfYWN0aW9uKCJzaHV0ZG93biIsICJTaHV0ZG93
biIsICJpbWcvc2h1dGRvd24uc3ZnIiwgZnVuY3Rpb24oZSkge2xpZ2h0ZG0uc2h1dGRvd24oKTsg
ZS5zdG9wUHJvcGFnYXRpb24oKTt9LCB0ZW1wbGF0ZSwgcGFyZW50KTsKICB9Cn0KCmZ1bmN0aW9u
IGluaXRpYWxpemVfdGltZXIoKSB7CiAgdXBkYXRlX3RpbWUoKTsKICBzZXRJbnRlcnZhbCh1cGRh
dGVfdGltZSwgMTAwMCk7Cn0KCmZ1bmN0aW9uIGFkZF9hY3Rpb24oaWQsIG5hbWUsIGltYWdlLCBj
bGlja2hhbmRsZXIsIHRlbXBsYXRlLCBwYXJlbnQpIHsKICB2YXIgYWN0aW9uX25vZGUgPSB0ZW1w
bGF0ZS5jbG9uZU5vZGUodHJ1ZSk7CiAgYWN0aW9uX25vZGUuaWQ9ICJhY3Rpb25fIiArIGlkOwog
IHZhciBpbWdfbm9kZSA9IGFjdGlvbl9ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5hY3Rpb25faW1h
Z2UiKVswXTsKICB2YXIgbGFiZWxfbm9kZT0gYWN0aW9uX25vZGUucXVlcnlTZWxlY3RvckFsbCgi
LmFjdGlvbl9sYWJlbCIpWzBdOwogIGxhYmVsX25vZGUuaW5uZXJIVE1MPSBuYW1lOwogIGltZ19u
b2RlLnNyYz0gaW1hZ2U7CiAgYWN0aW9uX25vZGUub25jbGljaz0gY2xpY2toYW5kbGVyOwogIHBh
cmVudC5hcHBlbmRDaGlsZChhY3Rpb25fbm9kZSk7Cn0KYGBgCgpgc3R5bGUuY3NzYAoKYGBgY3Nz
CmJvZHkgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdiZy5qcGcnKTsKICAgIGRpc3BsYXk6
IHRhYmxlOwogICAgaGVpZ2h0OiAxMDAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW46IDA7
CgogICAgZm9udC1zaXplOiAxNHB0OwogICAgdGV4dC1zaGFkb3c6IDFweCAxcHggM3B4IGJsYWNr
OwogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKfQoKaW5wdXQgewogIGJvcmRlcjogMXB4
IHNvbGlkIHdoaXRlOwogIGJvcmRlci1yYWRpdXM6IDRweDsKICBwYWRkaW5nOiA0cHg7CiAgYm94
LXNoYWRvdzogMCAwIDJweCAxcHggd2hpdGU7CgogIC13ZWJraXQtdHJhbnNpdGlvbjogYm94LXNo
YWRvdyAwLjNzIGVhc2UtaW4tb3V0Owp9CgppbnB1dDpmb2N1cyB7CiAgb3V0bGluZTogbm9uZTsK
ICBib3gtc2hhZG93OiAwIDAgNXB4IDJweCAjN0RCRUYxOwp9CgphIHsKICB0ZXh0LWRlY29yYXRp
b246IG5vbmU7Cn0KCi5zbW9vdGggewogIC13ZWJraXQtdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAw
cywgb3BhY2l0eSAwLjNzLCBsZWZ0IDAuNHM7Cn0KCi5oaWRkZW4gewogIG9wYWNpdHk6IDA7CiAg
dmlzaWJpbGl0eTogaGlkZGVuOwogIC13ZWJraXQtdHJhbnNpdGlvbi1kZWxheTogMC4zcywgMHMs
IDBzOwp9CgouY2VudGVyIHsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCi5idXR0b24gewogIGN1
cnNvcjogcG9pbnRlcjsKfQoKLmhlYWRlciB7CiAgaGVpZ2h0OiAzMCU7Cn0KCi5mb290ZXIgewog
IHRleHQtYWxpZ246IGNlbnRlcjsKICBoZWlnaHQ6IDEwMHB4Owp9CgouZm9vdGVyLCAuaGVhZGVy
IHsKICBkaXNwbGF5OiB0YWJsZS1yb3c7CiAgd2lkdGg6IDEwMCU7CiAgY29sb3I6ICNCMkIyQjI7
Cn0KCi50aW1lIHsKICBmbG9hdDogcmlnaHQ7CiAgbGluZS1oZWlnaHQ6IDI1cHg7CiAgZm9udC1z
aXplOiAxMXB0OwogIG1hcmdpbi1yaWdodDogMTBweDsKICBtYXJnaW4tdG9wOiAycHg7Cn0KCi5s
b2dpbl9jb250ZW50IHsKICBkaXNwbGF5OiB0YWJsZS1yb3c7Cn0KCi5sb2dpbl9jb250YWluZXIg
ewogIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKfQoKI21l
c3NhZ2UgewogIGRpc3BsYXk6IHRhYmxlLXJvdzsKICBoZWlnaHQ6IDEyMHB4OwogIC13ZWJraXQt
dHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcywgb3BhY2l0eSAwLjNzLCBoZWlnaHQgMC4zczsKfQoK
I21lc3NhZ2UuaGlkZGVuIHsKICBoZWlnaHQ6IDBweDsKfQoKI21lc3NhZ2VfY29udGVudCB7CiAg
ZGlzcGxheTogdGFibGUtY2VsbDsKICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogIHRleHQtYWxpZ246
IGNlbnRlcjsKICBjb2xvcjogI0VGRUZFRjsKfQoKI21lc3NhZ2VfY29udGVudC5lcnJvciB7CiAg
Y29sb3I6ICNGNTU7Cn0KCi51c2VyIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgbWFyZ2lu
LWxlZnQ6IDIwcHg7CiAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogIG1hcmdpbi1ib3R0b206IDIwcHg7
CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgoudXNlcjphY3RpdmUgewogIG9wYWNpdHk6IDAuNTsK
fQoKLnVzZXJfaW1hZ2Vfd3JhcHBlciB7CiAgd2lkdGg6IDgwcHg7CiAgaGVpZ2h0OiA4MHB4OwoK
ICBib3JkZXItcmFkaXVzOiA2MHB4OwogIGJveC1zaGFkb3c6IDAgMCAxcHggMXB4ICMyMjIsIGlu
c2V0IDAgMCAycHggMXB4ICMyMjI7CiAgYm9yZGVyOiAycHggc29saWQgI0VFRTsKICBiYWNrZ3Jv
dW5kOiAtd2Via2l0LXJhZGlhbC1ncmFkaWVudChjaXJjbGUsICNGRkYsICM5OTkpOwp9CgoudXNl
cl9pbWFnZV93cmFwcGVyOmhvdmVyIHsKICBib3gtc2hhZG93OiAgMCAwIDFweCAxcHggIzIyMiwg
aW5zZXQgMCAwIDJweCAxcHggIzIyMiwgMCAwIDVweCAycHggIzdEQkVGMTsKfQoKLnVzZXJfaW1h
Z2UgewogIHdpZHRoOiA4MHB4OwogIGhlaWdodDogODBweDsKICBib3JkZXItcmFkaXVzOiA2MHB4
Owp9CgoudXNlcl9uYW1lIHsKICBkaXNwbGF5OiBibG9jazsKICBtYXJnaW4tdG9wOiAxNXB4Owog
IGNvbG9yOiAjRUZFRkVGOwp9CgouYWN0aW9uIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAg
d2lkdGg6IDgwcHg7CiAgbWFyZ2luLWxlZnQ6IDQwcHg7CiAgbWFyZ2luLXJpZ2h0OiA0MHB4Owp9
CgouYWN0aW9uX2ltYWdlIHsKICBoZWlnaHQ6IDUwcHg7CiAgd2lkdGg6IDUwcHg7CgogIG1hcmdp
bi1ib3R0b206IDVweDsKfQoKLmFjdGlvbl9sYWJlbCB7CiAgY29sb3I6ICNCMkIyQjI7Cn0KYGBg
Cg==