@vtj/designer 0.9.3 → 0.9.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Editor-C1dy1R3N.js → Editor-ZiUDqfgK.js} +1 -1
- package/dist/css.worker-DcQjDQkA.js +109 -0
- package/dist/editor.worker-lG8NyUhA.js +25 -0
- package/dist/html.worker-B83UVBG6.js +25 -0
- package/dist/index.mjs +228 -226
- package/dist/json.worker-Deqi-XXW.js +25 -0
- package/dist/ts.worker-P1pVlN2Z.js +51359 -0
- package/package.json +8 -8
- package/types/components/editor/Editor.d.ts +1 -1
- package/types/components/editor/index.d.ts +1 -1
- package/types/components/regions/empty.d.ts +1 -1
- package/types/components/regions/index.d.ts +2 -2
- package/types/components/regions/toolbar.d.ts +1 -1
- package/types/components/setters/file.d.ts +1 -1
- package/types/components/setters/function.d.ts +1 -1
- package/types/components/setters/icon.d.ts +1 -1
- package/types/components/setters/index.d.ts +7 -7
- package/types/components/setters/json.d.ts +1 -1
- package/types/components/setters/section.d.ts +1 -1
- package/types/components/setters/slider.d.ts +1 -1
- package/types/components/setters/tag.d.ts +1 -1
- package/types/components/shared/binder.d.ts +2 -1
- package/types/components/shared/box.d.ts +3 -2
- package/types/components/shared/item.d.ts +2 -1
- package/types/components/shared/panel.d.ts +2 -1
- package/types/components/shared/tabs.d.ts +2 -1
- package/types/components/shared/viewer.d.ts +1 -1
- package/types/components/shared/viewport.d.ts +3 -2
- package/types/components/widgets/about/index.d.ts +1 -1
- package/types/components/widgets/actions/coder.d.ts +1 -1
- package/types/components/widgets/apis/base-info.d.ts +1 -1
- package/types/components/widgets/apis/jsonp-options.d.ts +1 -1
- package/types/components/widgets/apis/mock-template.d.ts +1 -1
- package/types/components/widgets/apis/request-settings.d.ts +1 -1
- package/types/components/widgets/designer/actions.d.ts +1 -1
- package/types/components/widgets/empty/index.d.ts +1 -1
- package/types/components/widgets/index.d.ts +3 -3
- package/types/components/widgets/previewer/index.d.ts +1 -1
- package/types/components/widgets/scripts/group.d.ts +3 -2
- package/types/components/widgets/style/spacing-input.d.ts +1 -1
- package/types/version.d.ts +3 -3
- package/dist/css.worker-BkwH8iYE.js +0 -25
- package/dist/editor.worker-C8k3yDdT.js +0 -25
- package/dist/html.worker-DefZQYbA.js +0 -25
- package/dist/json.worker-05I1Fjzo.js +0 -25
- package/dist/ts.worker-Dn3IQaLA.js +0 -25
@@ -1,25 +0,0 @@
|
|
1
|
-
const m = "dmFyIHcxPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgXzE9KHR0LFZlLERlKT0+VmUgaW4gdHQ/dzEodHQsVmUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkRlfSk6dHRbVmVdPURlO3ZhciBldD0odHQsVmUsRGUpPT5fMSh0dCx0eXBlb2YgVmUhPSJzeW1ib2wiP1ZlKyIiOlZlLERlKTsoZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGZlLHo7Y2xhc3MgdHR7Y29uc3RydWN0b3IoKXt0aGlzLmxpc3RlbmVycz1bXSx0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXI9ZnVuY3Rpb24odCl7c2V0VGltZW91dCgoKT0+e3Rocm93IHQuc3RhY2s/Y3QuaXNFcnJvck5vVGVsZW1ldHJ5KHQpP25ldyBjdCh0Lm1lc3NhZ2UrYAoKYCt0LnN0YWNrKTpuZXcgRXJyb3IodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6dH0sMCl9fWVtaXQodCl7dGhpcy5saXN0ZW5lcnMuZm9yRWFjaChuPT57bih0KX0pfW9uVW5leHBlY3RlZEVycm9yKHQpe3RoaXMudW5leHBlY3RlZEVycm9ySGFuZGxlcih0KSx0aGlzLmVtaXQodCl9b25VbmV4cGVjdGVkRXh0ZXJuYWxFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCl9fWNvbnN0IFZlPW5ldyB0dDtmdW5jdGlvbiBEZShlKXtGbyhlKXx8VmUub25VbmV4cGVjdGVkRXJyb3IoZSl9ZnVuY3Rpb24gZWkoZSl7aWYoZSBpbnN0YW5jZW9mIEVycm9yKXtjb25zdHtuYW1lOnQsbWVzc2FnZTpufT1lLHI9ZS5zdGFja3RyYWNlfHxlLnN0YWNrO3JldHVybnskaXNFcnJvcjohMCxuYW1lOnQsbWVzc2FnZTpuLHN0YWNrOnIsbm9UZWxlbWV0cnk6Y3QuaXNFcnJvck5vVGVsZW1ldHJ5KGUpfX1yZXR1cm4gZX1jb25zdCBVbj0iQ2FuY2VsZWQiO2Z1bmN0aW9uIEZvKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVm8/ITA6ZSBpbnN0YW5jZW9mIEVycm9yJiZlLm5hbWU9PT1VbiYmZS5tZXNzYWdlPT09VW59Y2xhc3MgVm8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKFVuKSx0aGlzLm5hbWU9dGhpcy5tZXNzYWdlfX1jbGFzcyBjdCBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHQpLHRoaXMubmFtZT0iQ29kZUV4cGVjdGVkRXJyb3IifXN0YXRpYyBmcm9tRXJyb3IodCl7aWYodCBpbnN0YW5jZW9mIGN0KXJldHVybiB0O2NvbnN0IG49bmV3IGN0O3JldHVybiBuLm1lc3NhZ2U9dC5tZXNzYWdlLG4uc3RhY2s9dC5zdGFjayxufXN0YXRpYyBpc0Vycm9yTm9UZWxlbWV0cnkodCl7cmV0dXJuIHQubmFtZT09PSJDb2RlRXhwZWN0ZWRFcnJvciJ9fWNsYXNzIG1lIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCl7c3VwZXIodHx8IkFuIHVuZXhwZWN0ZWQgYnVnIG9jY3VycmVkLiIpLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLG1lLnByb3RvdHlwZSl9fWZ1bmN0aW9uIERvKGUsdCl7Y29uc3Qgbj10aGlzO2xldCByPSExLGk7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHJ8fChyPSEwLGk9ZS5hcHBseShuLGFyZ3VtZW50cykpLGl9fXZhciB0bjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh5KXtyZXR1cm4geSYmdHlwZW9mIHk9PSJvYmplY3QiJiZ0eXBlb2YgeVtTeW1ib2wuaXRlcmF0b3JdPT0iZnVuY3Rpb24ifWUuaXM9dDtjb25zdCBuPU9iamVjdC5mcmVlemUoW10pO2Z1bmN0aW9uIHIoKXtyZXR1cm4gbn1lLmVtcHR5PXI7ZnVuY3Rpb24qaSh5KXt5aWVsZCB5fWUuc2luZ2xlPWk7ZnVuY3Rpb24gcyh5KXtyZXR1cm4gdCh5KT95OmkoeSl9ZS53cmFwPXM7ZnVuY3Rpb24gYSh5KXtyZXR1cm4geXx8bn1lLmZyb209YTtmdW5jdGlvbipsKHkpe2ZvcihsZXQgYj15Lmxlbmd0aC0xO2I+PTA7Yi0tKXlpZWxkIHlbYl19ZS5yZXZlcnNlPWw7ZnVuY3Rpb24gbyh5KXtyZXR1cm4heXx8eVtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLmRvbmU9PT0hMH1lLmlzRW1wdHk9bztmdW5jdGlvbiB1KHkpe3JldHVybiB5W1N5bWJvbC5pdGVyYXRvcl0oKS5uZXh0KCkudmFsdWV9ZS5maXJzdD11O2Z1bmN0aW9uIGgoeSxiKXtsZXQgTD0wO2Zvcihjb25zdCBBIG9mIHkpaWYoYihBLEwrKykpcmV0dXJuITA7cmV0dXJuITF9ZS5zb21lPWg7ZnVuY3Rpb24gYyh5LGIpe2Zvcihjb25zdCBMIG9mIHkpaWYoYihMKSlyZXR1cm4gTH1lLmZpbmQ9YztmdW5jdGlvbipkKHksYil7Zm9yKGNvbnN0IEwgb2YgeSliKEwpJiYoeWllbGQgTCl9ZS5maWx0ZXI9ZDtmdW5jdGlvbiptKHksYil7bGV0IEw9MDtmb3IoY29uc3QgQSBvZiB5KXlpZWxkIGIoQSxMKyspfWUubWFwPW07ZnVuY3Rpb24qZyh5LGIpe2xldCBMPTA7Zm9yKGNvbnN0IEEgb2YgeSl5aWVsZCpiKEEsTCsrKX1lLmZsYXRNYXA9ZztmdW5jdGlvbipwKC4uLnkpe2Zvcihjb25zdCBiIG9mIHkpeWllbGQqYn1lLmNvbmNhdD1wO2Z1bmN0aW9uIHYoeSxiLEwpe2xldCBBPUw7Zm9yKGNvbnN0IFIgb2YgeSlBPWIoQSxSKTtyZXR1cm4gQX1lLnJlZHVjZT12O2Z1bmN0aW9uKl8oeSxiLEw9eS5sZW5ndGgpe2ZvcihiPDAmJihiKz15Lmxlbmd0aCksTDwwP0wrPXkubGVuZ3RoOkw+eS5sZW5ndGgmJihMPXkubGVuZ3RoKTtiPEw7YisrKXlpZWxkIHlbYl19ZS5zbGljZT1fO2Z1bmN0aW9uIE4oeSxiPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl7Y29uc3QgTD1bXTtpZihiPT09MClyZXR1cm5bTCx5XTtjb25zdCBBPXlbU3ltYm9sLml0ZXJhdG9yXSgpO2ZvcihsZXQgUj0wO1I8YjtSKyspe2NvbnN0IEk9QS5uZXh0KCk7aWYoSS5kb25lKXJldHVybltMLGUuZW1wdHkoKV07TC5wdXNoKEkudmFsdWUpfXJldHVybltMLHtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBBfX1dfWUuY29uc3VtZT1OO2FzeW5jIGZ1bmN0aW9uIHgoeSl7Y29uc3QgYj1bXTtmb3IgYXdhaXQoY29uc3QgTCBvZiB5KWIucHVzaChMKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGIpfWUuYXN5bmNUb0FycmF5PXh9KSh0bnx8KHRuPXt9KSk7ZnVuY3Rpb24gTDEoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gTjEoZSx0KXt9ZnVuY3Rpb24gdGkoZSl7aWYodG4uaXMoZSkpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSlpZihuKXRyeXtuLmRpc3Bvc2UoKX1jYXRjaChyKXt0LnB1c2gocil9aWYodC5sZW5ndGg9PT0xKXRocm93IHRbMF07aWYodC5sZW5ndGg+MSl0aHJvdyBuZXcgQWdncmVnYXRlRXJyb3IodCwiRW5jb3VudGVyZWQgZXJyb3JzIHdoaWxlIGRpc3Bvc2luZyBvZiBzdG9yZSIpO3JldHVybiBBcnJheS5pc0FycmF5KGUpP1tdOmV9ZWxzZSBpZihlKXJldHVybiBlLmRpc3Bvc2UoKSxlfWZ1bmN0aW9uIE9vKC4uLmUpe3JldHVybiBubigoKT0+dGkoZSkpfWZ1bmN0aW9uIG5uKGUpe3JldHVybntkaXNwb3NlOkRvKCgpPT57ZSgpfSl9fWNvbnN0IENuPWNsYXNzIENue2NvbnN0cnVjdG9yKCl7dGhpcy5fdG9EaXNwb3NlPW5ldyBTZXQsdGhpcy5faXNEaXNwb3NlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZHx8KHRoaXMuX2lzRGlzcG9zZWQ9ITAsdGhpcy5jbGVhcigpKX1nZXQgaXNEaXNwb3NlZCgpe3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkfWNsZWFyKCl7aWYodGhpcy5fdG9EaXNwb3NlLnNpemUhPT0wKXRyeXt0aSh0aGlzLl90b0Rpc3Bvc2UpfWZpbmFsbHl7dGhpcy5fdG9EaXNwb3NlLmNsZWFyKCl9fWFkZCh0KXtpZighdClyZXR1cm4gdDtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9pc0Rpc3Bvc2VkP0NuLkRJU0FCTEVfRElTUE9TRURfV0FSTklOR3x8Y29uc29sZS53YXJuKG5ldyBFcnJvcigiVHJ5aW5nIHRvIGFkZCBhIGRpc3Bvc2FibGUgdG8gYSBEaXNwb3NhYmxlU3RvcmUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGRpc3Bvc2VkIG9mLiBUaGUgYWRkZWQgb2JqZWN0IHdpbGwgYmUgbGVha2VkISIpLnN0YWNrKTp0aGlzLl90b0Rpc3Bvc2UuYWRkKHQpLHR9ZGVsZXRlQW5kTGVhayh0KXt0JiZ0aGlzLl90b0Rpc3Bvc2UuaGFzKHQpJiZ0aGlzLl90b0Rpc3Bvc2UuZGVsZXRlKHQpfX07Q24uRElTQUJMRV9ESVNQT1NFRF9XQVJOSU5HPSExO2xldCBGdD1Dbjtjb25zdCBZcj1jbGFzcyBZcntjb25zdHJ1Y3Rvcigpe3RoaXMuX3N0b3JlPW5ldyBGdCx0aGlzLl9zdG9yZX1kaXNwb3NlKCl7dGhpcy5fc3RvcmUuZGlzcG9zZSgpfV9yZWdpc3Rlcih0KXtpZih0PT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWdpc3RlciBhIGRpc3Bvc2FibGUgb24gaXRzZWxmISIpO3JldHVybiB0aGlzLl9zdG9yZS5hZGQodCl9fTtZci5Ob25lPU9iamVjdC5mcmVlemUoe2Rpc3Bvc2UoKXt9fSk7bGV0IGZ0PVlyO2NvbnN0IE10PWNsYXNzIE10e2NvbnN0cnVjdG9yKHQpe3RoaXMuZWxlbWVudD10LHRoaXMubmV4dD1NdC5VbmRlZmluZWQsdGhpcy5wcmV2PU10LlVuZGVmaW5lZH19O010LlVuZGVmaW5lZD1uZXcgTXQodm9pZCAwKTtsZXQgUT1NdDtjbGFzcyBCb3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZpcnN0PVEuVW5kZWZpbmVkLHRoaXMuX2xhc3Q9US5VbmRlZmluZWQsdGhpcy5fc2l6ZT0wfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9aXNFbXB0eSgpe3JldHVybiB0aGlzLl9maXJzdD09PVEuVW5kZWZpbmVkfWNsZWFyKCl7bGV0IHQ9dGhpcy5fZmlyc3Q7Zm9yKDt0IT09US5VbmRlZmluZWQ7KXtjb25zdCBuPXQubmV4dDt0LnByZXY9US5VbmRlZmluZWQsdC5uZXh0PVEuVW5kZWZpbmVkLHQ9bn10aGlzLl9maXJzdD1RLlVuZGVmaW5lZCx0aGlzLl9sYXN0PVEuVW5kZWZpbmVkLHRoaXMuX3NpemU9MH11bnNoaWZ0KHQpe3JldHVybiB0aGlzLl9pbnNlcnQodCwhMSl9cHVzaCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITApfV9pbnNlcnQodCxuKXtjb25zdCByPW5ldyBRKHQpO2lmKHRoaXMuX2ZpcnN0PT09US5VbmRlZmluZWQpdGhpcy5fZmlyc3Q9cix0aGlzLl9sYXN0PXI7ZWxzZSBpZihuKXtjb25zdCBzPXRoaXMuX2xhc3Q7dGhpcy5fbGFzdD1yLHIucHJldj1zLHMubmV4dD1yfWVsc2V7Y29uc3Qgcz10aGlzLl9maXJzdDt0aGlzLl9maXJzdD1yLHIubmV4dD1zLHMucHJldj1yfXRoaXMuX3NpemUrPTE7bGV0IGk9ITE7cmV0dXJuKCk9PntpfHwoaT0hMCx0aGlzLl9yZW1vdmUocikpfX1zaGlmdCgpe2lmKHRoaXMuX2ZpcnN0IT09US5VbmRlZmluZWQpe2NvbnN0IHQ9dGhpcy5fZmlyc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2ZpcnN0KSx0fX1wb3AoKXtpZih0aGlzLl9sYXN0IT09US5VbmRlZmluZWQpe2NvbnN0IHQ9dGhpcy5fbGFzdC5lbGVtZW50O3JldHVybiB0aGlzLl9yZW1vdmUodGhpcy5fbGFzdCksdH19X3JlbW92ZSh0KXtpZih0LnByZXYhPT1RLlVuZGVmaW5lZCYmdC5uZXh0IT09US5VbmRlZmluZWQpe2NvbnN0IG49dC5wcmV2O24ubmV4dD10Lm5leHQsdC5uZXh0LnByZXY9bn1lbHNlIHQucHJldj09PVEuVW5kZWZpbmVkJiZ0Lm5leHQ9PT1RLlVuZGVmaW5lZD8odGhpcy5fZmlyc3Q9US5VbmRlZmluZWQsdGhpcy5fbGFzdD1RLlVuZGVmaW5lZCk6dC5uZXh0PT09US5VbmRlZmluZWQ/KHRoaXMuX2xhc3Q9dGhpcy5fbGFzdC5wcmV2LHRoaXMuX2xhc3QubmV4dD1RLlVuZGVmaW5lZCk6dC5wcmV2PT09US5VbmRlZmluZWQmJih0aGlzLl9maXJzdD10aGlzLl9maXJzdC5uZXh0LHRoaXMuX2ZpcnN0LnByZXY9US5VbmRlZmluZWQpO3RoaXMuX3NpemUtPTF9KltTeW1ib2wuaXRlcmF0b3JdKCl7bGV0IHQ9dGhpcy5fZmlyc3Q7Zm9yKDt0IT09US5VbmRlZmluZWQ7KXlpZWxkIHQuZWxlbWVudCx0PXQubmV4dH19Y29uc3QgVW89Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZSYmdHlwZW9mIGdsb2JhbFRoaXMucGVyZm9ybWFuY2Uubm93PT0iZnVuY3Rpb24iO2NsYXNzIHJue3N0YXRpYyBjcmVhdGUodCl7cmV0dXJuIG5ldyBybih0KX1jb25zdHJ1Y3Rvcih0KXt0aGlzLl9ub3c9VW8mJnQ9PT0hMT9EYXRlLm5vdzpnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdy5iaW5kKGdsb2JhbFRoaXMucGVyZm9ybWFuY2UpLHRoaXMuX3N0YXJ0VGltZT10aGlzLl9ub3coKSx0aGlzLl9zdG9wVGltZT0tMX1zdG9wKCl7dGhpcy5fc3RvcFRpbWU9dGhpcy5fbm93KCl9cmVzZXQoKXt0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9ZWxhcHNlZCgpe3JldHVybiB0aGlzLl9zdG9wVGltZSE9PS0xP3RoaXMuX3N0b3BUaW1lLXRoaXMuX3N0YXJ0VGltZTp0aGlzLl9ub3coKS10aGlzLl9zdGFydFRpbWV9fXZhciBxbjsoZnVuY3Rpb24oZSl7ZS5Ob25lPSgpPT5mdC5Ob25lO2Z1bmN0aW9uIHQodyxTKXtyZXR1cm4gYyh3LCgpPT57fSwwLHZvaWQgMCwhMCx2b2lkIDAsUyl9ZS5kZWZlcj10O2Z1bmN0aW9uIG4odyl7cmV0dXJuKFMsQz1udWxsLFQpPT57bGV0IFA9ITEsRjtyZXR1cm4gRj13KHE9PntpZighUClyZXR1cm4gRj9GLmRpc3Bvc2UoKTpQPSEwLFMuY2FsbChDLHEpfSxudWxsLFQpLFAmJkYuZGlzcG9zZSgpLEZ9fWUub25jZT1uO2Z1bmN0aW9uIHIodyxTLEMpe3JldHVybiB1KChULFA9bnVsbCxGKT0+dyhxPT5ULmNhbGwoUCxTKHEpKSxudWxsLEYpLEMpfWUubWFwPXI7ZnVuY3Rpb24gaSh3LFMsQyl7cmV0dXJuIHUoKFQsUD1udWxsLEYpPT53KHE9PntTKHEpLFQuY2FsbChQLHEpfSxudWxsLEYpLEMpfWUuZm9yRWFjaD1pO2Z1bmN0aW9uIHModyxTLEMpe3JldHVybiB1KChULFA9bnVsbCxGKT0+dyhxPT5TKHEpJiZULmNhbGwoUCxxKSxudWxsLEYpLEMpfWUuZmlsdGVyPXM7ZnVuY3Rpb24gYSh3KXtyZXR1cm4gd31lLnNpZ25hbD1hO2Z1bmN0aW9uIGwoLi4udyl7cmV0dXJuKFMsQz1udWxsLFQpPT57Y29uc3QgUD1PbyguLi53Lm1hcChGPT5GKHE9PlMuY2FsbChDLHEpKSkpO3JldHVybiBoKFAsVCl9fWUuYW55PWw7ZnVuY3Rpb24gbyh3LFMsQyxUKXtsZXQgUD1DO3JldHVybiByKHcsRj0+KFA9UyhQLEYpLFApLFQpfWUucmVkdWNlPW87ZnVuY3Rpb24gdSh3LFMpe2xldCBDO2NvbnN0IFQ9e29uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtDPXcoUC5maXJlLFApfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe0M/LmRpc3Bvc2UoKX19LFA9bmV3IExlKFQpO3JldHVybiBTPy5hZGQoUCksUC5ldmVudH1mdW5jdGlvbiBoKHcsUyl7cmV0dXJuIFMgaW5zdGFuY2VvZiBBcnJheT9TLnB1c2godyk6UyYmUy5hZGQodyksd31mdW5jdGlvbiBjKHcsUyxDPTEwMCxUPSExLFA9ITEsRixxKXtsZXQgRyxqLFJlLERuPTAsZW47Y29uc3QgdjE9e2xlYWtXYXJuaW5nVGhyZXNob2xkOkYsb25XaWxsQWRkRmlyc3RMaXN0ZW5lcigpe0c9dyh4MT0+e0RuKyssaj1TKGoseDEpLFQmJiFSZSYmKE9uLmZpcmUoaiksaj12b2lkIDApLGVuPSgpPT57Y29uc3QgeTE9ajtqPXZvaWQgMCxSZT12b2lkIDAsKCFUfHxEbj4xKSYmT24uZmlyZSh5MSksRG49MH0sdHlwZW9mIEM9PSJudW1iZXIiPyhjbGVhclRpbWVvdXQoUmUpLFJlPXNldFRpbWVvdXQoZW4sQykpOlJlPT09dm9pZCAwJiYoUmU9MCxxdWV1ZU1pY3JvdGFzayhlbikpfSl9LG9uV2lsbFJlbW92ZUxpc3RlbmVyKCl7UCYmRG4+MCYmZW4/LigpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe2VuPXZvaWQgMCxHLmRpc3Bvc2UoKX19LE9uPW5ldyBMZSh2MSk7cmV0dXJuIHE/LmFkZChPbiksT24uZXZlbnR9ZS5kZWJvdW5jZT1jO2Z1bmN0aW9uIGQodyxTPTAsQyl7cmV0dXJuIGUuZGVib3VuY2UodywoVCxQKT0+VD8oVC5wdXNoKFApLFQpOltQXSxTLHZvaWQgMCwhMCx2b2lkIDAsQyl9ZS5hY2N1bXVsYXRlPWQ7ZnVuY3Rpb24gbSh3LFM9KFQsUCk9PlQ9PT1QLEMpe2xldCBUPSEwLFA7cmV0dXJuIHModyxGPT57Y29uc3QgcT1UfHwhUyhGLFApO3JldHVybiBUPSExLFA9RixxfSxDKX1lLmxhdGNoPW07ZnVuY3Rpb24gZyh3LFMsQyl7cmV0dXJuW2UuZmlsdGVyKHcsUyxDKSxlLmZpbHRlcih3LFQ9PiFTKFQpLEMpXX1lLnNwbGl0PWc7ZnVuY3Rpb24gcCh3LFM9ITEsQz1bXSxUKXtsZXQgUD1DLnNsaWNlKCksRj13KGo9PntQP1AucHVzaChqKTpHLmZpcmUoail9KTtUJiZULmFkZChGKTtjb25zdCBxPSgpPT57UD8uZm9yRWFjaChqPT5HLmZpcmUoaikpLFA9bnVsbH0sRz1uZXcgTGUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtGfHwoRj13KGo9PkcuZmlyZShqKSksVCYmVC5hZGQoRikpfSxvbkRpZEFkZEZpcnN0TGlzdGVuZXIoKXtQJiYoUz9zZXRUaW1lb3V0KHEpOnEoKSl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyKCl7RiYmRi5kaXNwb3NlKCksRj1udWxsfX0pO3JldHVybiBUJiZULmFkZChHKSxHLmV2ZW50fWUuYnVmZmVyPXA7ZnVuY3Rpb24gdih3LFMpe3JldHVybihULFAsRik9Pntjb25zdCBxPVMobmV3IE4pO3JldHVybiB3KGZ1bmN0aW9uKEcpe2NvbnN0IGo9cS5ldmFsdWF0ZShHKTtqIT09XyYmVC5jYWxsKFAsail9LHZvaWQgMCxGKX19ZS5jaGFpbj12O2NvbnN0IF89U3ltYm9sKCJIYWx0Q2hhaW5hYmxlIik7Y2xhc3MgTntjb25zdHJ1Y3Rvcigpe3RoaXMuc3RlcHM9W119bWFwKFMpe3JldHVybiB0aGlzLnN0ZXBzLnB1c2goUyksdGhpc31mb3JFYWNoKFMpe3JldHVybiB0aGlzLnN0ZXBzLnB1c2goQz0+KFMoQyksQykpLHRoaXN9ZmlsdGVyKFMpe3JldHVybiB0aGlzLnN0ZXBzLnB1c2goQz0+UyhDKT9DOl8pLHRoaXN9cmVkdWNlKFMsQyl7bGV0IFQ9QztyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKFA9PihUPVMoVCxQKSxUKSksdGhpc31sYXRjaChTPShDLFQpPT5DPT09VCl7bGV0IEM9ITAsVDtyZXR1cm4gdGhpcy5zdGVwcy5wdXNoKFA9Pntjb25zdCBGPUN8fCFTKFAsVCk7cmV0dXJuIEM9ITEsVD1QLEY/UDpffSksdGhpc31ldmFsdWF0ZShTKXtmb3IoY29uc3QgQyBvZiB0aGlzLnN0ZXBzKWlmKFM9QyhTKSxTPT09XylicmVhaztyZXR1cm4gU319ZnVuY3Rpb24geCh3LFMsQz1UPT5UKXtjb25zdCBUPSguLi5HKT0+cS5maXJlKEMoLi4uRykpLFA9KCk9Pncub24oUyxUKSxGPSgpPT53LnJlbW92ZUxpc3RlbmVyKFMsVCkscT1uZXcgTGUoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXI6UCxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjpGfSk7cmV0dXJuIHEuZXZlbnR9ZS5mcm9tTm9kZUV2ZW50RW1pdHRlcj14O2Z1bmN0aW9uIHkodyxTLEM9VD0+VCl7Y29uc3QgVD0oLi4uRyk9PnEuZmlyZShDKC4uLkcpKSxQPSgpPT53LmFkZEV2ZW50TGlzdGVuZXIoUyxUKSxGPSgpPT53LnJlbW92ZUV2ZW50TGlzdGVuZXIoUyxUKSxxPW5ldyBMZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjpQLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOkZ9KTtyZXR1cm4gcS5ldmVudH1lLmZyb21ET01FdmVudEVtaXR0ZXI9eTtmdW5jdGlvbiBiKHcpe3JldHVybiBuZXcgUHJvbWlzZShTPT5uKHcpKFMpKX1lLnRvUHJvbWlzZT1iO2Z1bmN0aW9uIEwodyl7Y29uc3QgUz1uZXcgTGU7cmV0dXJuIHcudGhlbihDPT57Uy5maXJlKEMpfSwoKT0+e1MuZmlyZSh2b2lkIDApfSkuZmluYWxseSgoKT0+e1MuZGlzcG9zZSgpfSksUy5ldmVudH1lLmZyb21Qcm9taXNlPUw7ZnVuY3Rpb24gQSh3LFMpe3JldHVybiB3KEM9PlMuZmlyZShDKSl9ZS5mb3J3YXJkPUE7ZnVuY3Rpb24gUih3LFMsQyl7cmV0dXJuIFMoQyksdyhUPT5TKFQpKX1lLnJ1bkFuZFN1YnNjcmliZT1SO2NsYXNzIEl7Y29uc3RydWN0b3IoUyxDKXt0aGlzLl9vYnNlcnZhYmxlPVMsdGhpcy5fY291bnRlcj0wLHRoaXMuX2hhc0NoYW5nZWQ9ITE7Y29uc3QgVD17b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e1MuYWRkT2JzZXJ2ZXIodGhpcyl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOigpPT57Uy5yZW1vdmVPYnNlcnZlcih0aGlzKX19O3RoaXMuZW1pdHRlcj1uZXcgTGUoVCksQyYmQy5hZGQodGhpcy5lbWl0dGVyKX1iZWdpblVwZGF0ZShTKXt0aGlzLl9jb3VudGVyKyt9aGFuZGxlUG9zc2libGVDaGFuZ2UoUyl7fWhhbmRsZUNoYW5nZShTLEMpe3RoaXMuX2hhc0NoYW5nZWQ9ITB9ZW5kVXBkYXRlKFMpe3RoaXMuX2NvdW50ZXItLSx0aGlzLl9jb3VudGVyPT09MCYmKHRoaXMuX29ic2VydmFibGUucmVwb3J0Q2hhbmdlcygpLHRoaXMuX2hhc0NoYW5nZWQmJih0aGlzLl9oYXNDaGFuZ2VkPSExLHRoaXMuZW1pdHRlci5maXJlKHRoaXMuX29ic2VydmFibGUuZ2V0KCkpKSl9fWZ1bmN0aW9uIEQodyxTKXtyZXR1cm4gbmV3IEkodyxTKS5lbWl0dGVyLmV2ZW50fWUuZnJvbU9ic2VydmFibGU9RDtmdW5jdGlvbiBNKHcpe3JldHVybihTLEMsVCk9PntsZXQgUD0wLEY9ITE7Y29uc3QgcT17YmVnaW5VcGRhdGUoKXtQKyt9LGVuZFVwZGF0ZSgpe1AtLSxQPT09MCYmKHcucmVwb3J0Q2hhbmdlcygpLEYmJihGPSExLFMuY2FsbChDKSkpfSxoYW5kbGVQb3NzaWJsZUNoYW5nZSgpe30saGFuZGxlQ2hhbmdlKCl7Rj0hMH19O3cuYWRkT2JzZXJ2ZXIocSksdy5yZXBvcnRDaGFuZ2VzKCk7Y29uc3QgRz17ZGlzcG9zZSgpe3cucmVtb3ZlT2JzZXJ2ZXIocSl9fTtyZXR1cm4gVCBpbnN0YW5jZW9mIEZ0P1QuYWRkKEcpOkFycmF5LmlzQXJyYXkoVCkmJlQucHVzaChHKSxHfX1lLmZyb21PYnNlcnZhYmxlTGlnaHQ9TX0pKHFufHwocW49e30pKTtjb25zdCBDdD1jbGFzcyBDdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLmxpc3RlbmVyQ291bnQ9MCx0aGlzLmludm9jYXRpb25Db3VudD0wLHRoaXMuZWxhcHNlZE92ZXJhbGw9MCx0aGlzLmR1cmF0aW9ucz1bXSx0aGlzLm5hbWU9YCR7dH1fJHtDdC5faWRQb29sKyt9YCxDdC5hbGwuYWRkKHRoaXMpfXN0YXJ0KHQpe3RoaXMuX3N0b3BXYXRjaD1uZXcgcm4sdGhpcy5saXN0ZW5lckNvdW50PXR9c3RvcCgpe2lmKHRoaXMuX3N0b3BXYXRjaCl7Y29uc3QgdD10aGlzLl9zdG9wV2F0Y2guZWxhcHNlZCgpO3RoaXMuZHVyYXRpb25zLnB1c2godCksdGhpcy5lbGFwc2VkT3ZlcmFsbCs9dCx0aGlzLmludm9jYXRpb25Db3VudCs9MSx0aGlzLl9zdG9wV2F0Y2g9dm9pZCAwfX19O0N0LmFsbD1uZXcgU2V0LEN0Ll9pZFBvb2w9MDtsZXQgJG49Q3QscW89LTE7Y29uc3QgVG49Y2xhc3MgVG57Y29uc3RydWN0b3IodCxuLHI9KFRuLl9pZFBvb2wrKykudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDMsIjAiKSl7dGhpcy5fZXJyb3JIYW5kbGVyPXQsdGhpcy50aHJlc2hvbGQ9bix0aGlzLm5hbWU9cix0aGlzLl93YXJuQ291bnRkb3duPTB9ZGlzcG9zZSgpe3RoaXMuX3N0YWNrcz8uY2xlYXIoKX1jaGVjayh0LG4pe2NvbnN0IHI9dGhpcy50aHJlc2hvbGQ7aWYocjw9MHx8bjxyKXJldHVybjt0aGlzLl9zdGFja3N8fCh0aGlzLl9zdGFja3M9bmV3IE1hcCk7Y29uc3QgaT10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO2lmKHRoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxpKzEpLHRoaXMuX3dhcm5Db3VudGRvd24tPTEsdGhpcy5fd2FybkNvdW50ZG93bjw9MCl7dGhpcy5fd2FybkNvdW50ZG93bj1yKi41O2NvbnN0W3MsYV09dGhpcy5nZXRNb3N0RnJlcXVlbnRTdGFjaygpLGw9YFske3RoaXMubmFtZX1dIHBvdGVudGlhbCBsaXN0ZW5lciBMRUFLIGRldGVjdGVkLCBoYXZpbmcgJHtufSBsaXN0ZW5lcnMgYWxyZWFkeS4gTU9TVCBmcmVxdWVudCBsaXN0ZW5lciAoJHthfSk6YDtjb25zb2xlLndhcm4obCksY29uc29sZS53YXJuKHMpO2NvbnN0IG89bmV3ICRvKGwscyk7dGhpcy5fZXJyb3JIYW5kbGVyKG8pfXJldHVybigpPT57Y29uc3Qgcz10aGlzLl9zdGFja3MuZ2V0KHQudmFsdWUpfHwwO3RoaXMuX3N0YWNrcy5zZXQodC52YWx1ZSxzLTEpfX1nZXRNb3N0RnJlcXVlbnRTdGFjaygpe2lmKCF0aGlzLl9zdGFja3MpcmV0dXJuO2xldCB0LG49MDtmb3IoY29uc3RbcixpXW9mIHRoaXMuX3N0YWNrcykoIXR8fG48aSkmJih0PVtyLGldLG49aSk7cmV0dXJuIHR9fTtUbi5faWRQb29sPTE7bGV0IGpuPVRuO2NsYXNzIEhue3N0YXRpYyBjcmVhdGUoKXtjb25zdCB0PW5ldyBFcnJvcjtyZXR1cm4gbmV3IEhuKHQuc3RhY2s/PyIiKX1jb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlPXR9cHJpbnQoKXtjb25zb2xlLndhcm4odGhpcy52YWx1ZS5zcGxpdChgCmApLnNsaWNlKDIpLmpvaW4oYApgKSl9fWNsYXNzICRvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuKXtzdXBlcih0KSx0aGlzLm5hbWU9Ikxpc3RlbmVyTGVha0Vycm9yIix0aGlzLnN0YWNrPW59fWNsYXNzIGpvIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuKXtzdXBlcih0KSx0aGlzLm5hbWU9Ikxpc3RlbmVyUmVmdXNhbEVycm9yIix0aGlzLnN0YWNrPW59fWNsYXNzIFdue2NvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19Y29uc3QgSG89MjtjbGFzcyBMZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9zaXplPTAsdGhpcy5fb3B0aW9ucz10LHRoaXMuX2xlYWthZ2VNb249dGhpcy5fb3B0aW9ucz8ubGVha1dhcm5pbmdUaHJlc2hvbGQ/bmV3IGpuKHQ/Lm9uTGlzdGVuZXJFcnJvcj8/RGUsdGhpcy5fb3B0aW9ucz8ubGVha1dhcm5pbmdUaHJlc2hvbGQ/P3FvKTp2b2lkIDAsdGhpcy5fcGVyZk1vbj10aGlzLl9vcHRpb25zPy5fcHJvZk5hbWU/bmV3ICRuKHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT10aGlzLl9vcHRpb25zPy5kZWxpdmVyeVF1ZXVlfWRpc3Bvc2UoKXt0aGlzLl9kaXNwb3NlZHx8KHRoaXMuX2Rpc3Bvc2VkPSEwLHRoaXMuX2RlbGl2ZXJ5UXVldWU/LmN1cnJlbnQ9PT10aGlzJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLnJlc2V0KCksdGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXZvaWQgMCx0aGlzLl9zaXplPTApLHRoaXMuX29wdGlvbnM/Lm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyPy4oKSx0aGlzLl9sZWFrYWdlTW9uPy5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudD8/KHRoaXMuX2V2ZW50PSh0LG4scik9PntpZih0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKioyKXtjb25zdCBsPWBbJHt0aGlzLl9sZWFrYWdlTW9uLm5hbWV9XSBSRUZVU0VTIHRvIGFjY2VwdCBuZXcgbGlzdGVuZXJzIGJlY2F1c2UgaXQgZXhjZWVkZWQgaXRzIHRocmVzaG9sZCBieSBmYXIgKCR7dGhpcy5fc2l6ZX0gdnMgJHt0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZH0pYDtjb25zb2xlLndhcm4obCk7Y29uc3Qgbz10aGlzLl9sZWFrYWdlTW9uLmdldE1vc3RGcmVxdWVudFN0YWNrKCk/P1siVU5LTk9XTiBzdGFjayIsLTFdLHU9bmV3IGpvKGAke2x9LiBISU5UOiBTdGFjayBzaG93cyBtb3N0IGZyZXF1ZW50IGxpc3RlbmVyICgke29bMV19LXRpbWVzKWAsb1swXSk7cmV0dXJuKHRoaXMuX29wdGlvbnM/Lm9uTGlzdGVuZXJFcnJvcnx8RGUpKHUpLGZ0Lk5vbmV9aWYodGhpcy5fZGlzcG9zZWQpcmV0dXJuIGZ0Lk5vbmU7biYmKHQ9dC5iaW5kKG4pKTtjb25zdCBpPW5ldyBXbih0KTtsZXQgczt0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPj1NYXRoLmNlaWwodGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGQqLjIpJiYoaS5zdGFjaz1Ibi5jcmVhdGUoKSxzPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soaS5zdGFjayx0aGlzLl9zaXplKzEpKSx0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzIGluc3RhbmNlb2YgV24/KHRoaXMuX2RlbGl2ZXJ5UXVldWU/Pyh0aGlzLl9kZWxpdmVyeVF1ZXVlPW5ldyBXbyksdGhpcy5fbGlzdGVuZXJzPVt0aGlzLl9saXN0ZW5lcnMsaV0pOnRoaXMuX2xpc3RlbmVycy5wdXNoKGkpOih0aGlzLl9vcHRpb25zPy5vbldpbGxBZGRGaXJzdExpc3RlbmVyPy4odGhpcyksdGhpcy5fbGlzdGVuZXJzPWksdGhpcy5fb3B0aW9ucz8ub25EaWRBZGRGaXJzdExpc3RlbmVyPy4odGhpcykpLHRoaXMuX3NpemUrKztjb25zdCBhPW5uKCgpPT57cz8uKCksdGhpcy5fcmVtb3ZlTGlzdGVuZXIoaSl9KTtyZXR1cm4gciBpbnN0YW5jZW9mIEZ0P3IuYWRkKGEpOkFycmF5LmlzQXJyYXkocikmJnIucHVzaChhKSxhfSksdGhpcy5fZXZlbnR9X3JlbW92ZUxpc3RlbmVyKHQpe2lmKHRoaXMuX29wdGlvbnM/Lm9uV2lsbFJlbW92ZUxpc3RlbmVyPy4odGhpcyksIXRoaXMuX2xpc3RlbmVycylyZXR1cm47aWYodGhpcy5fc2l6ZT09PTEpe3RoaXMuX2xpc3RlbmVycz12b2lkIDAsdGhpcy5fb3B0aW9ucz8ub25EaWRSZW1vdmVMYXN0TGlzdGVuZXI/Lih0aGlzKSx0aGlzLl9zaXplPTA7cmV0dXJufWNvbnN0IG49dGhpcy5fbGlzdGVuZXJzLHI9bi5pbmRleE9mKHQpO2lmKHI9PT0tMSl0aHJvdyBjb25zb2xlLmxvZygiZGlzcG9zZWQ/Iix0aGlzLl9kaXNwb3NlZCksY29uc29sZS5sb2coInNpemU/Iix0aGlzLl9zaXplKSxjb25zb2xlLmxvZygiYXJyPyIsSlNPTi5zdHJpbmdpZnkodGhpcy5fbGlzdGVuZXJzKSksbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gZGlzcG9zZSB1bmtub3duIGxpc3RlbmVyIik7dGhpcy5fc2l6ZS0tLG5bcl09dm9pZCAwO2NvbnN0IGk9dGhpcy5fZGVsaXZlcnlRdWV1ZS5jdXJyZW50PT09dGhpcztpZih0aGlzLl9zaXplKkhvPD1uLmxlbmd0aCl7bGV0IHM9MDtmb3IobGV0IGE9MDthPG4ubGVuZ3RoO2ErKyluW2FdP25bcysrXT1uW2FdOmkmJih0aGlzLl9kZWxpdmVyeVF1ZXVlLmVuZC0tLHM8dGhpcy5fZGVsaXZlcnlRdWV1ZS5pJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLmktLSk7bi5sZW5ndGg9c319X2RlbGl2ZXIodCxuKXtpZighdClyZXR1cm47Y29uc3Qgcj10aGlzLl9vcHRpb25zPy5vbkxpc3RlbmVyRXJyb3J8fERlO2lmKCFyKXt0LnZhbHVlKG4pO3JldHVybn10cnl7dC52YWx1ZShuKX1jYXRjaChpKXtyKGkpfX1fZGVsaXZlclF1ZXVlKHQpe2NvbnN0IG49dC5jdXJyZW50Ll9saXN0ZW5lcnM7Zm9yKDt0Lmk8dC5lbmQ7KXRoaXMuX2RlbGl2ZXIoblt0LmkrK10sdC52YWx1ZSk7dC5yZXNldCgpfWZpcmUodCl7aWYodGhpcy5fZGVsaXZlcnlRdWV1ZT8uY3VycmVudCYmKHRoaXMuX2RlbGl2ZXJRdWV1ZSh0aGlzLl9kZWxpdmVyeVF1ZXVlKSx0aGlzLl9wZXJmTW9uPy5zdG9wKCkpLHRoaXMuX3BlcmZNb24/LnN0YXJ0KHRoaXMuX3NpemUpLHRoaXMuX2xpc3RlbmVycylpZih0aGlzLl9saXN0ZW5lcnMgaW5zdGFuY2VvZiBXbil0aGlzLl9kZWxpdmVyKHRoaXMuX2xpc3RlbmVycyx0KTtlbHNle2NvbnN0IG49dGhpcy5fZGVsaXZlcnlRdWV1ZTtuLmVucXVldWUodGhpcyx0LHRoaXMuX2xpc3RlbmVycy5sZW5ndGgpLHRoaXMuX2RlbGl2ZXJRdWV1ZShuKX10aGlzLl9wZXJmTW9uPy5zdG9wKCl9aGFzTGlzdGVuZXJzKCl7cmV0dXJuIHRoaXMuX3NpemU+MH19Y2xhc3MgV297Y29uc3RydWN0b3IoKXt0aGlzLmk9LTEsdGhpcy5lbmQ9MH1lbnF1ZXVlKHQsbixyKXt0aGlzLmk9MCx0aGlzLmVuZD1yLHRoaXMuY3VycmVudD10LHRoaXMudmFsdWU9bn1yZXNldCgpe3RoaXMuaT10aGlzLmVuZCx0aGlzLmN1cnJlbnQ9dm9pZCAwLHRoaXMudmFsdWU9dm9pZCAwfX1mdW5jdGlvbiB6byhlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmcifWZ1bmN0aW9uIEdvKGUpe2xldCB0PVtdO2Zvcig7T2JqZWN0LnByb3RvdHlwZSE9PWU7KXQ9dC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkpLGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0fWZ1bmN0aW9uIHpuKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgR28oZSkpdHlwZW9mIGVbbl09PSJmdW5jdGlvbiImJnQucHVzaChuKTtyZXR1cm4gdH1mdW5jdGlvbiBKbyhlLHQpe2NvbnN0IG49aT0+ZnVuY3Rpb24oKXtjb25zdCBzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gdChpLHMpfSxyPXt9O2Zvcihjb25zdCBpIG9mIGUpcltpXT1uKGkpO3JldHVybiByfWZ1bmN0aW9uIFhvKCl7cmV0dXJuIGdsb2JhbFRoaXMuX1ZTQ09ERV9OTFNfTUVTU0FHRVN9ZnVuY3Rpb24gbmkoKXtyZXR1cm4gZ2xvYmFsVGhpcy5fVlNDT0RFX05MU19MQU5HVUFHRX1jb25zdCBRbz1uaSgpPT09InBzZXVkbyJ8fHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7ZnVuY3Rpb24gcmkoZSx0KXtsZXQgbjtyZXR1cm4gdC5sZW5ndGg9PT0wP249ZTpuPWUucmVwbGFjZSgvXHsoXGQrKVx9L2csKHIsaSk9Pntjb25zdCBzPWlbMF0sYT10W3NdO2xldCBsPXI7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIj9sPWE6KHR5cGVvZiBhPT0ibnVtYmVyInx8dHlwZW9mIGE9PSJib29sZWFuInx8YT09PXZvaWQgMHx8YT09PW51bGwpJiYobD1TdHJpbmcoYSkpLGx9KSxRbyYmKG49Iu+8uyIrbi5yZXBsYWNlKC9bYW91ZWldL2csIiQmJCYiKSsi77y9Iiksbn1mdW5jdGlvbiBYKGUsdCwuLi5uKXtyZXR1cm4gcmkodHlwZW9mIGU9PSJudW1iZXIiP1pvKGUsdCk6dCxuKX1mdW5jdGlvbiBabyhlLHQpe2NvbnN0IG49WG8oKT8uW2VdO2lmKHR5cGVvZiBuIT0ic3RyaW5nIil7aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0O3Rocm93IG5ldyBFcnJvcihgISEhIE5MUyBNSVNTSU5HOiAke2V9ICEhIWApfXJldHVybiBufWNvbnN0IGh0PSJlbiI7bGV0IEduPSExLEpuPSExLFhuPSExLHNuLFFuPWh0LGlpPWh0LFlvLE9lO2NvbnN0IG50PWdsb2JhbFRoaXM7bGV0IGdlO3R5cGVvZiBudC52c2NvZGU8InUiJiZ0eXBlb2YgbnQudnNjb2RlLnByb2Nlc3M8InUiP2dlPW50LnZzY29kZS5wcm9jZXNzOnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3M/LnZlcnNpb25zPy5ub2RlPT0ic3RyaW5nIiYmKGdlPXByb2Nlc3MpO2NvbnN0IEtvPXR5cGVvZiBnZT8udmVyc2lvbnM/LmVsZWN0cm9uPT0ic3RyaW5nIiYmZ2U/LnR5cGU9PT0icmVuZGVyZXIiO2lmKHR5cGVvZiBnZT09Im9iamVjdCIpe0duPWdlLnBsYXRmb3JtPT09IndpbjMyIixKbj1nZS5wbGF0Zm9ybT09PSJkYXJ3aW4iLFhuPWdlLnBsYXRmb3JtPT09ImxpbnV4IixYbiYmZ2UuZW52LlNOQVAmJmdlLmVudi5TTkFQX1JFVklTSU9OLGdlLmVudi5DSXx8Z2UuZW52LkJVSUxEX0FSVElGQUNUU1RBR0lOR0RJUkVDVE9SWSxzbj1odCxRbj1odDtjb25zdCBlPWdlLmVudi5WU0NPREVfTkxTX0NPTkZJRztpZihlKXRyeXtjb25zdCB0PUpTT04ucGFyc2UoZSk7c249dC51c2VyTG9jYWxlLGlpPXQub3NMb2NhbGUsUW49dC5yZXNvbHZlZExhbmd1YWdlfHxodCxZbz10Lmxhbmd1YWdlUGFjaz8udHJhbnNsYXRpb25zQ29uZmlnRmlsZX1jYXRjaHt9fWVsc2UgdHlwZW9mIG5hdmlnYXRvcj09Im9iamVjdCImJiFLbz8oT2U9bmF2aWdhdG9yLnVzZXJBZ2VudCxHbj1PZS5pbmRleE9mKCJXaW5kb3dzIik+PTAsSm49T2UuaW5kZXhPZigiTWFjaW50b3NoIik+PTAsKE9lLmluZGV4T2YoIk1hY2ludG9zaCIpPj0wfHxPZS5pbmRleE9mKCJpUGFkIik+PTB8fE9lLmluZGV4T2YoImlQaG9uZSIpPj0wKSYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzJiZuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MCxYbj1PZS5pbmRleE9mKCJMaW51eCIpPj0wLE9lPy5pbmRleE9mKCJNb2JpIik+PTAsUW49bmkoKXx8aHQsc249bmF2aWdhdG9yLmxhbmd1YWdlLnRvTG93ZXJDYXNlKCksaWk9c24pOmNvbnNvbGUuZXJyb3IoIlVuYWJsZSB0byByZXNvbHZlIHBsYXRmb3JtLiIpO2NvbnN0IFZ0PUduLGVsPUpuLE1lPU9lLHRsPXR5cGVvZiBudC5wb3N0TWVzc2FnZT09ImZ1bmN0aW9uIiYmIW50LmltcG9ydFNjcmlwdHM7KCgpPT57aWYodGwpe2NvbnN0IGU9W107bnQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbj0+e2lmKG4uZGF0YSYmbi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKWZvcihsZXQgcj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgcz1lW3JdO2lmKHMuaWQ9PT1uLmRhdGEudnNjb2RlU2NoZWR1bGVBc3luY1dvcmspe2Uuc3BsaWNlKHIsMSkscy5jYWxsYmFjaygpO3JldHVybn19fSk7bGV0IHQ9MDtyZXR1cm4gbj0+e2NvbnN0IHI9Kyt0O2UucHVzaCh7aWQ6cixjYWxsYmFjazpufSksbnQucG9zdE1lc3NhZ2Uoe3ZzY29kZVNjaGVkdWxlQXN5bmNXb3JrOnJ9LCIqIil9fXJldHVybiBlPT5zZXRUaW1lb3V0KGUpfSkoKTtjb25zdCBubD0hIShNZSYmTWUuaW5kZXhPZigiQ2hyb21lIik+PTApO01lJiZNZS5pbmRleE9mKCJGaXJlZm94Iik+PTAsIW5sJiZNZSYmTWUuaW5kZXhPZigiU2FmYXJpIik+PTAsTWUmJk1lLmluZGV4T2YoIkVkZy8iKT49MCxNZSYmTWUuaW5kZXhPZigiQW5kcm9pZCIpPj0wO2Z1bmN0aW9uIHJsKGUpe3JldHVybiBlfWNsYXNzIGlse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5sYXN0Q2FjaGU9dm9pZCAwLHRoaXMubGFzdEFyZ0tleT12b2lkIDAsdHlwZW9mIHQ9PSJmdW5jdGlvbiI/KHRoaXMuX2ZuPXQsdGhpcy5fY29tcHV0ZUtleT1ybCk6KHRoaXMuX2ZuPW4sdGhpcy5fY29tcHV0ZUtleT10LmdldENhY2hlS2V5KX1nZXQodCl7Y29uc3Qgbj10aGlzLl9jb21wdXRlS2V5KHQpO3JldHVybiB0aGlzLmxhc3RBcmdLZXkhPT1uJiYodGhpcy5sYXN0QXJnS2V5PW4sdGhpcy5sYXN0Q2FjaGU9dGhpcy5fZm4odCkpLHRoaXMubGFzdENhY2hlfX1jbGFzcyBzaXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmV4ZWN1dG9yPXQsdGhpcy5fZGlkUnVuPSExfWdldCB2YWx1ZSgpe2lmKCF0aGlzLl9kaWRSdW4pdHJ5e3RoaXMuX3ZhbHVlPXRoaXMuZXhlY3V0b3IoKX1jYXRjaCh0KXt0aGlzLl9lcnJvcj10fWZpbmFsbHl7dGhpcy5fZGlkUnVuPSEwfWlmKHRoaXMuX2Vycm9yKXRocm93IHRoaXMuX2Vycm9yO3JldHVybiB0aGlzLl92YWx1ZX1nZXQgcmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fWZ1bmN0aW9uIHNsKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcXFx7XH1cKlwrXD9cfFxeXCRcLlxbXF1cKFwpXS9nLCJcXCQmIil9ZnVuY3Rpb24gYWwoZSl7cmV0dXJuIGUuc3BsaXQoL1xyXG58XHJ8XG4vKX1mdW5jdGlvbiBvbChlKXtmb3IobGV0IHQ9MCxuPWUubGVuZ3RoO3Q8bjt0Kyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KHQpO2lmKHIhPT0zMiYmciE9PTkpcmV0dXJuIHR9cmV0dXJuLTF9ZnVuY3Rpb24gbGwoZSx0PWUubGVuZ3RoLTEpe2ZvcihsZXQgbj10O24+PTA7bi0tKXtjb25zdCByPWUuY2hhckNvZGVBdChuKTtpZihyIT09MzImJnIhPT05KXJldHVybiBufXJldHVybi0xfWZ1bmN0aW9uIGFpKGUpe3JldHVybiBlPj02NSYmZTw9OTB9ZnVuY3Rpb24gYW4oZSl7cmV0dXJuIDU1Mjk2PD1lJiZlPD01NjMxOX1mdW5jdGlvbiBabihlKXtyZXR1cm4gNTYzMjA8PWUmJmU8PTU3MzQzfWZ1bmN0aW9uIG9pKGUsdCl7cmV0dXJuKGUtNTUyOTY8PDEwKSsodC01NjMyMCkrNjU1MzZ9ZnVuY3Rpb24gdWwoZSx0LG4pe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO2lmKGFuKHIpJiZuKzE8dCl7Y29uc3QgaT1lLmNoYXJDb2RlQXQobisxKTtpZihabihpKSlyZXR1cm4gb2kocixpKX1yZXR1cm4gcn1jb25zdCBjbD0vXltcdFxuXHJceDIwLVx4N0VdKiQvO2Z1bmN0aW9uIGZsKGUpe3JldHVybiBjbC50ZXN0KGUpfWNvbnN0IEZlPWNsYXNzIEZle3N0YXRpYyBnZXRJbnN0YW5jZSh0KXtyZXR1cm4gRmUuY2FjaGUuZ2V0KEFycmF5LmZyb20odCkpfXN0YXRpYyBnZXRMb2NhbGVzKCl7cmV0dXJuIEZlLl9sb2NhbGVzLnZhbHVlfWNvbnN0cnVjdG9yKHQpe3RoaXMuY29uZnVzYWJsZURpY3Rpb25hcnk9dH1pc0FtYmlndW91cyh0KXtyZXR1cm4gdGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5oYXModCl9Z2V0UHJpbWFyeUNvbmZ1c2FibGUodCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuZ2V0KHQpfWdldENvbmZ1c2FibGVDb2RlUG9pbnRzKCl7cmV0dXJuIG5ldyBTZXQodGhpcy5jb25mdXNhYmxlRGljdGlvbmFyeS5rZXlzKCkpfX07RmUuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YT1uZXcgc2koKCk9PkpTT04ucGFyc2UoJ3siX2NvbW1vbiI6WzgyMzIsMzIsODIzMywzMiw1NzYwLDMyLDgxOTIsMzIsODE5MywzMiw4MTk0LDMyLDgxOTUsMzIsODE5NiwzMiw4MTk3LDMyLDgxOTgsMzIsODIwMCwzMiw4MjAxLDMyLDgyMDIsMzIsODI4NywzMiw4MTk5LDMyLDgyMzksMzIsMjA0Miw5NSw2NTEwMSw5NSw2NTEwMiw5NSw2NTEwMyw5NSw4MjA4LDQ1LDgyMDksNDUsODIxMCw0NSw2NTExMiw0NSwxNzQ4LDQ1LDgyNTksNDUsNzI3LDQ1LDg3MjIsNDUsMTAxMzQsNDUsMTE0NTAsNDUsMTU0OSw0NCwxNjQzLDQ0LDgyMTgsNDQsMTg0LDQ0LDQyMjMzLDQ0LDg5NCw1OSwyMzA3LDU4LDI2OTEsNTgsMTQxNyw1OCwxNzk1LDU4LDE3OTYsNTgsNTg2OCw1OCw2NTA3Miw1OCw2MTQ3LDU4LDYxNTMsNTgsODI4Miw1OCwxNDc1LDU4LDc2MCw1OCw0Mjg4OSw1OCw4NzU4LDU4LDcyMCw1OCw0MjIzNyw1OCw0NTEsMzMsMTE2MDEsMzMsNjYwLDYzLDU3Nyw2MywyNDI5LDYzLDUwMzgsNjMsNDI3MzEsNjMsMTE5MTQ5LDQ2LDgyMjgsNDYsMTc5Myw0NiwxNzk0LDQ2LDQyNTEwLDQ2LDY4MTc2LDQ2LDE2MzIsNDYsMTc3Niw0Niw0MjIzMiw0NiwxMzczLDk2LDY1Mjg3LDk2LDgyMTksOTYsODI0Miw5NiwxMzcwLDk2LDE1MjMsOTYsODE3NSw5Niw2NTM0NCw5Niw5MDAsOTYsODE4OSw5Niw4MTI1LDk2LDgxMjcsOTYsODE5MCw5Niw2OTcsOTYsODg0LDk2LDcxMiw5Niw3MTQsOTYsNzE1LDk2LDc1Niw5Niw2OTksOTYsNzAxLDk2LDcwMCw5Niw3MDIsOTYsNDI4OTIsOTYsMTQ5Nyw5NiwyMDM2LDk2LDIwMzcsOTYsNTE5NCw5Niw1ODM2LDk2LDk0MDMzLDk2LDk0MDM0LDk2LDY1MzM5LDkxLDEwMDg4LDQwLDEwMDk4LDQwLDEyMzA4LDQwLDY0ODMwLDQwLDY1MzQxLDkzLDEwMDg5LDQxLDEwMDk5LDQxLDEyMzA5LDQxLDY0ODMxLDQxLDEwMTAwLDEyMywxMTkwNjAsMTIzLDEwMTAxLDEyNSw2NTM0Miw5NCw4MjcwLDQyLDE2NDUsNDIsODcyNyw0Miw2NjMzNSw0Miw1OTQxLDQ3LDgyNTcsNDcsODcyNSw0Nyw4MjYwLDQ3LDk1ODUsNDcsMTAxODcsNDcsMTA3NDQsNDcsMTE5MzU0LDQ3LDEyNzU1LDQ3LDEyMzM5LDQ3LDExNDYyLDQ3LDIwMDMxLDQ3LDEyMDM1LDQ3LDY1MzQwLDkyLDY1MTI4LDkyLDg3MjYsOTIsMTAxODksOTIsMTA3NDEsOTIsMTA3NDUsOTIsMTE5MzExLDkyLDExOTM1NSw5MiwxMjc1Niw5MiwyMDAyMiw5MiwxMjAzNCw5Miw0Mjg3MiwzOCw3MDgsOTQsNzEwLDk0LDU4NjksNDMsMTAxMzMsNDMsNjYyMDMsNDMsODI0OSw2MCwxMDA5NCw2MCw3MDYsNjAsMTE5MzUwLDYwLDUxNzYsNjAsNTgxMCw2MCw1MTIwLDYxLDExODQwLDYxLDEyNDQ4LDYxLDQyMjM5LDYxLDgyNTAsNjIsMTAwOTUsNjIsNzA3LDYyLDExOTM1MSw2Miw1MTcxLDYyLDk0MDE1LDYyLDgyNzUsMTI2LDczMiwxMjYsODEyOCwxMjYsODc2NCwxMjYsNjUzNzIsMTI0LDY1MjkzLDQ1LDEyMDc4NCw1MCwxMjA3OTQsNTAsMTIwODA0LDUwLDEyMDgxNCw1MCwxMjA4MjQsNTAsMTMwMDM0LDUwLDQyODQyLDUwLDQyMyw1MCwxMDAwLDUwLDQyNTY0LDUwLDUzMTEsNTAsNDI3MzUsNTAsMTE5MzAyLDUxLDEyMDc4NSw1MSwxMjA3OTUsNTEsMTIwODA1LDUxLDEyMDgxNSw1MSwxMjA4MjUsNTEsMTMwMDM1LDUxLDQyOTIzLDUxLDU0MCw1MSw0MzksNTEsNDI4NTgsNTEsMTE0NjgsNTEsMTI0OCw1MSw5NDAxMSw1MSw3MTg4Miw1MSwxMjA3ODYsNTIsMTIwNzk2LDUyLDEyMDgwNiw1MiwxMjA4MTYsNTIsMTIwODI2LDUyLDEzMDAzNiw1Miw1MDcwLDUyLDcxODU1LDUyLDEyMDc4Nyw1MywxMjA3OTcsNTMsMTIwODA3LDUzLDEyMDgxNyw1MywxMjA4MjcsNTMsMTMwMDM3LDUzLDQ0NCw1Myw3MTg2Nyw1MywxMjA3ODgsNTQsMTIwNzk4LDU0LDEyMDgwOCw1NCwxMjA4MTgsNTQsMTIwODI4LDU0LDEzMDAzOCw1NCwxMTQ3NCw1NCw1MTAyLDU0LDcxODkzLDU0LDExOTMxNCw1NSwxMjA3ODksNTUsMTIwNzk5LDU1LDEyMDgwOSw1NSwxMjA4MTksNTUsMTIwODI5LDU1LDEzMDAzOSw1NSw2Njc3MCw1NSw3MTg3OCw1NSwyODE5LDU2LDI1MzgsNTYsMjY2Niw1NiwxMjUxMzEsNTYsMTIwNzkwLDU2LDEyMDgwMCw1NiwxMjA4MTAsNTYsMTIwODIwLDU2LDEyMDgzMCw1NiwxMzAwNDAsNTYsNTQ3LDU2LDU0Niw1Niw2NjMzMCw1NiwyNjYzLDU3LDI5MjAsNTcsMjU0MSw1NywzNDM3LDU3LDEyMDc5MSw1NywxMjA4MDEsNTcsMTIwODExLDU3LDEyMDgyMSw1NywxMjA4MzEsNTcsMTMwMDQxLDU3LDQyODYyLDU3LDExNDY2LDU3LDcxODg0LDU3LDcxODUyLDU3LDcxODk0LDU3LDkwODIsOTcsNjUzNDUsOTcsMTE5ODM0LDk3LDExOTg4Niw5NywxMTk5MzgsOTcsMTE5OTkwLDk3LDEyMDA0Miw5NywxMjAwOTQsOTcsMTIwMTQ2LDk3LDEyMDE5OCw5NywxMjAyNTAsOTcsMTIwMzAyLDk3LDEyMDM1NCw5NywxMjA0MDYsOTcsMTIwNDU4LDk3LDU5Myw5Nyw5NDUsOTcsMTIwNTE0LDk3LDEyMDU3Miw5NywxMjA2MzAsOTcsMTIwNjg4LDk3LDEyMDc0Niw5Nyw2NTMxMyw2NSwxMTk4MDgsNjUsMTE5ODYwLDY1LDExOTkxMiw2NSwxMTk5NjQsNjUsMTIwMDE2LDY1LDEyMDA2OCw2NSwxMjAxMjAsNjUsMTIwMTcyLDY1LDEyMDIyNCw2NSwxMjAyNzYsNjUsMTIwMzI4LDY1LDEyMDM4MCw2NSwxMjA0MzIsNjUsOTEzLDY1LDEyMDQ4OCw2NSwxMjA1NDYsNjUsMTIwNjA0LDY1LDEyMDY2Miw2NSwxMjA3MjAsNjUsNTAzNCw2NSw1NTczLDY1LDQyMjIyLDY1LDk0MDE2LDY1LDY2MjA4LDY1LDExOTgzNSw5OCwxMTk4ODcsOTgsMTE5OTM5LDk4LDExOTk5MSw5OCwxMjAwNDMsOTgsMTIwMDk1LDk4LDEyMDE0Nyw5OCwxMjAxOTksOTgsMTIwMjUxLDk4LDEyMDMwMyw5OCwxMjAzNTUsOTgsMTIwNDA3LDk4LDEyMDQ1OSw5OCwzODgsOTgsNTA3MSw5OCw1MjM0LDk4LDU1NTEsOTgsNjUzMTQsNjYsODQ5Miw2NiwxMTk4MDksNjYsMTE5ODYxLDY2LDExOTkxMyw2NiwxMjAwMTcsNjYsMTIwMDY5LDY2LDEyMDEyMSw2NiwxMjAxNzMsNjYsMTIwMjI1LDY2LDEyMDI3Nyw2NiwxMjAzMjksNjYsMTIwMzgxLDY2LDEyMDQzMyw2Niw0MjkzMiw2Niw5MTQsNjYsMTIwNDg5LDY2LDEyMDU0Nyw2NiwxMjA2MDUsNjYsMTIwNjYzLDY2LDEyMDcyMSw2Niw1MTA4LDY2LDU2MjMsNjYsNDIxOTIsNjYsNjYxNzgsNjYsNjYyMDksNjYsNjYzMDUsNjYsNjUzNDcsOTksODU3Myw5OSwxMTk4MzYsOTksMTE5ODg4LDk5LDExOTk0MCw5OSwxMTk5OTIsOTksMTIwMDQ0LDk5LDEyMDA5Niw5OSwxMjAxNDgsOTksMTIwMjAwLDk5LDEyMDI1Miw5OSwxMjAzMDQsOTksMTIwMzU2LDk5LDEyMDQwOCw5OSwxMjA0NjAsOTksNzQyOCw5OSwxMDEwLDk5LDExNDI5LDk5LDQzOTUxLDk5LDY2NjIxLDk5LDEyODg0NCw2Nyw3MTkyMiw2Nyw3MTkxMyw2Nyw2NTMxNSw2Nyw4NTU3LDY3LDg0NTAsNjcsODQ5Myw2NywxMTk4MTAsNjcsMTE5ODYyLDY3LDExOTkxNCw2NywxMTk5NjYsNjcsMTIwMDE4LDY3LDEyMDE3NCw2NywxMjAyMjYsNjcsMTIwMjc4LDY3LDEyMDMzMCw2NywxMjAzODIsNjcsMTIwNDM0LDY3LDEwMTcsNjcsMTE0MjgsNjcsNTA4Nyw2Nyw0MjIwMiw2Nyw2NjIxMCw2Nyw2NjMwNiw2Nyw2NjU4MSw2Nyw2Njg0NCw2Nyw4NTc0LDEwMCw4NTE4LDEwMCwxMTk4MzcsMTAwLDExOTg4OSwxMDAsMTE5OTQxLDEwMCwxMTk5OTMsMTAwLDEyMDA0NSwxMDAsMTIwMDk3LDEwMCwxMjAxNDksMTAwLDEyMDIwMSwxMDAsMTIwMjUzLDEwMCwxMjAzMDUsMTAwLDEyMDM1NywxMDAsMTIwNDA5LDEwMCwxMjA0NjEsMTAwLDEyODEsMTAwLDUwOTUsMTAwLDUyMzEsMTAwLDQyMTk0LDEwMCw4NTU4LDY4LDg1MTcsNjgsMTE5ODExLDY4LDExOTg2Myw2OCwxMTk5MTUsNjgsMTE5OTY3LDY4LDEyMDAxOSw2OCwxMjAwNzEsNjgsMTIwMTIzLDY4LDEyMDE3NSw2OCwxMjAyMjcsNjgsMTIwMjc5LDY4LDEyMDMzMSw2OCwxMjAzODMsNjgsMTIwNDM1LDY4LDUwMjQsNjgsNTU5OCw2OCw1NjEwLDY4LDQyMTk1LDY4LDg0OTQsMTAxLDY1MzQ5LDEwMSw4NDk1LDEwMSw4NTE5LDEwMSwxMTk4MzgsMTAxLDExOTg5MCwxMDEsMTE5OTQyLDEwMSwxMjAwNDYsMTAxLDEyMDA5OCwxMDEsMTIwMTUwLDEwMSwxMjAyMDIsMTAxLDEyMDI1NCwxMDEsMTIwMzA2LDEwMSwxMjAzNTgsMTAxLDEyMDQxMCwxMDEsMTIwNDYyLDEwMSw0MzgyNiwxMDEsMTIxMywxMDEsODk1OSw2OSw2NTMxNyw2OSw4NDk2LDY5LDExOTgxMiw2OSwxMTk4NjQsNjksMTE5OTE2LDY5LDEyMDAyMCw2OSwxMjAwNzIsNjksMTIwMTI0LDY5LDEyMDE3Niw2OSwxMjAyMjgsNjksMTIwMjgwLDY5LDEyMDMzMiw2OSwxMjAzODQsNjksMTIwNDM2LDY5LDkxNyw2OSwxMjA0OTIsNjksMTIwNTUwLDY5LDEyMDYwOCw2OSwxMjA2NjYsNjksMTIwNzI0LDY5LDExNTc3LDY5LDUwMzYsNjksNDIyMjQsNjksNzE4NDYsNjksNzE4NTQsNjksNjYxODIsNjksMTE5ODM5LDEwMiwxMTk4OTEsMTAyLDExOTk0MywxMDIsMTE5OTk1LDEwMiwxMjAwNDcsMTAyLDEyMDA5OSwxMDIsMTIwMTUxLDEwMiwxMjAyMDMsMTAyLDEyMDI1NSwxMDIsMTIwMzA3LDEwMiwxMjAzNTksMTAyLDEyMDQxMSwxMDIsMTIwNDYzLDEwMiw0MzgyOSwxMDIsNDI5MDUsMTAyLDM4MywxMDIsNzgzNywxMDIsMTQxMiwxMDIsMTE5MzE1LDcwLDg0OTcsNzAsMTE5ODEzLDcwLDExOTg2NSw3MCwxMTk5MTcsNzAsMTIwMDIxLDcwLDEyMDA3Myw3MCwxMjAxMjUsNzAsMTIwMTc3LDcwLDEyMDIyOSw3MCwxMjAyODEsNzAsMTIwMzMzLDcwLDEyMDM4NSw3MCwxMjA0MzcsNzAsNDI5MDQsNzAsOTg4LDcwLDEyMDc3OCw3MCw1NTU2LDcwLDQyMjA1LDcwLDcxODc0LDcwLDcxODQyLDcwLDY2MTgzLDcwLDY2MjEzLDcwLDY2ODUzLDcwLDY1MzUxLDEwMyw4NDU4LDEwMywxMTk4NDAsMTAzLDExOTg5MiwxMDMsMTE5OTQ0LDEwMywxMjAwNDgsMTAzLDEyMDEwMCwxMDMsMTIwMTUyLDEwMywxMjAyMDQsMTAzLDEyMDI1NiwxMDMsMTIwMzA4LDEwMywxMjAzNjAsMTAzLDEyMDQxMiwxMDMsMTIwNDY0LDEwMyw2MDksMTAzLDc1NTUsMTAzLDM5NywxMDMsMTQwOSwxMDMsMTE5ODE0LDcxLDExOTg2Niw3MSwxMTk5MTgsNzEsMTE5OTcwLDcxLDEyMDAyMiw3MSwxMjAwNzQsNzEsMTIwMTI2LDcxLDEyMDE3OCw3MSwxMjAyMzAsNzEsMTIwMjgyLDcxLDEyMDMzNCw3MSwxMjAzODYsNzEsMTIwNDM4LDcxLDEyOTIsNzEsNTA1Niw3MSw1MTA3LDcxLDQyMTk4LDcxLDY1MzUyLDEwNCw4NDYyLDEwNCwxMTk4NDEsMTA0LDExOTk0NSwxMDQsMTE5OTk3LDEwNCwxMjAwNDksMTA0LDEyMDEwMSwxMDQsMTIwMTUzLDEwNCwxMjAyMDUsMTA0LDEyMDI1NywxMDQsMTIwMzA5LDEwNCwxMjAzNjEsMTA0LDEyMDQxMywxMDQsMTIwNDY1LDEwNCwxMjExLDEwNCwxMzkyLDEwNCw1MDU4LDEwNCw2NTMyMCw3Miw4NDU5LDcyLDg0NjAsNzIsODQ2MSw3MiwxMTk4MTUsNzIsMTE5ODY3LDcyLDExOTkxOSw3MiwxMjAwMjMsNzIsMTIwMTc5LDcyLDEyMDIzMSw3MiwxMjAyODMsNzIsMTIwMzM1LDcyLDEyMDM4Nyw3MiwxMjA0MzksNzIsOTE5LDcyLDEyMDQ5NCw3MiwxMjA1NTIsNzIsMTIwNjEwLDcyLDEyMDY2OCw3MiwxMjA3MjYsNzIsMTE0MDYsNzIsNTA1MSw3Miw1NTAwLDcyLDQyMjE1LDcyLDY2MjU1LDcyLDczMSwxMDUsOTA3NSwxMDUsNjUzNTMsMTA1LDg1NjAsMTA1LDg1MDUsMTA1LDg1MjAsMTA1LDExOTg0MiwxMDUsMTE5ODk0LDEwNSwxMTk5NDYsMTA1LDExOTk5OCwxMDUsMTIwMDUwLDEwNSwxMjAxMDIsMTA1LDEyMDE1NCwxMDUsMTIwMjA2LDEwNSwxMjAyNTgsMTA1LDEyMDMxMCwxMDUsMTIwMzYyLDEwNSwxMjA0MTQsMTA1LDEyMDQ2NiwxMDUsMTIwNDg0LDEwNSw2MTgsMTA1LDYxNywxMDUsOTUzLDEwNSw4MTI2LDEwNSw4OTAsMTA1LDEyMDUyMiwxMDUsMTIwNTgwLDEwNSwxMjA2MzgsMTA1LDEyMDY5NiwxMDUsMTIwNzU0LDEwNSwxMTEwLDEwNSw0MjU2NywxMDUsMTIzMSwxMDUsNDM4OTMsMTA1LDUwMjksMTA1LDcxODc1LDEwNSw2NTM1NCwxMDYsODUyMSwxMDYsMTE5ODQzLDEwNiwxMTk4OTUsMTA2LDExOTk0NywxMDYsMTE5OTk5LDEwNiwxMjAwNTEsMTA2LDEyMDEwMywxMDYsMTIwMTU1LDEwNiwxMjAyMDcsMTA2LDEyMDI1OSwxMDYsMTIwMzExLDEwNiwxMjAzNjMsMTA2LDEyMDQxNSwxMDYsMTIwNDY3LDEwNiwxMDExLDEwNiwxMTEyLDEwNiw2NTMyMiw3NCwxMTk4MTcsNzQsMTE5ODY5LDc0LDExOTkyMSw3NCwxMTk5NzMsNzQsMTIwMDI1LDc0LDEyMDA3Nyw3NCwxMjAxMjksNzQsMTIwMTgxLDc0LDEyMDIzMyw3NCwxMjAyODUsNzQsMTIwMzM3LDc0LDEyMDM4OSw3NCwxMjA0NDEsNzQsNDI5MzAsNzQsODk1LDc0LDEwMzIsNzQsNTAzNSw3NCw1MjYxLDc0LDQyMjAxLDc0LDExOTg0NCwxMDcsMTE5ODk2LDEwNywxMTk5NDgsMTA3LDEyMDAwMCwxMDcsMTIwMDUyLDEwNywxMjAxMDQsMTA3LDEyMDE1NiwxMDcsMTIwMjA4LDEwNywxMjAyNjAsMTA3LDEyMDMxMiwxMDcsMTIwMzY0LDEwNywxMjA0MTYsMTA3LDEyMDQ2OCwxMDcsODQ5MCw3NSw2NTMyMyw3NSwxMTk4MTgsNzUsMTE5ODcwLDc1LDExOTkyMiw3NSwxMTk5NzQsNzUsMTIwMDI2LDc1LDEyMDA3OCw3NSwxMjAxMzAsNzUsMTIwMTgyLDc1LDEyMDIzNCw3NSwxMjAyODYsNzUsMTIwMzM4LDc1LDEyMDM5MCw3NSwxMjA0NDIsNzUsOTIyLDc1LDEyMDQ5Nyw3NSwxMjA1NTUsNzUsMTIwNjEzLDc1LDEyMDY3MSw3NSwxMjA3MjksNzUsMTE0MTIsNzUsNTA5NCw3NSw1ODQ1LDc1LDQyMTk5LDc1LDY2ODQwLDc1LDE0NzIsMTA4LDg3MzksNzMsOTIxMyw3Myw2NTUxMiw3MywxNjMzLDEwOCwxNzc3LDczLDY2MzM2LDEwOCwxMjUxMjcsMTA4LDEyMDc4Myw3MywxMjA3OTMsNzMsMTIwODAzLDczLDEyMDgxMyw3MywxMjA4MjMsNzMsMTMwMDMzLDczLDY1MzIxLDczLDg1NDQsNzMsODQ2NCw3Myw4NDY1LDczLDExOTgxNiw3MywxMTk4NjgsNzMsMTE5OTIwLDczLDEyMDAyNCw3MywxMjAxMjgsNzMsMTIwMTgwLDczLDEyMDIzMiw3MywxMjAyODQsNzMsMTIwMzM2LDczLDEyMDM4OCw3MywxMjA0NDAsNzMsNjUzNTYsMTA4LDg1NzIsNzMsODQ2NywxMDgsMTE5ODQ1LDEwOCwxMTk4OTcsMTA4LDExOTk0OSwxMDgsMTIwMDAxLDEwOCwxMjAwNTMsMTA4LDEyMDEwNSw3MywxMjAxNTcsNzMsMTIwMjA5LDczLDEyMDI2MSw3MywxMjAzMTMsNzMsMTIwMzY1LDczLDEyMDQxNyw3MywxMjA0NjksNzMsNDQ4LDczLDEyMDQ5Niw3MywxMjA1NTQsNzMsMTIwNjEyLDczLDEyMDY3MCw3MywxMjA3MjgsNzMsMTE0MTAsNzMsMTAzMCw3MywxMjE2LDczLDE0OTMsMTA4LDE1MDMsMTA4LDE1NzUsMTA4LDEyNjQ2NCwxMDgsMTI2NTkyLDEwOCw2NTE2NiwxMDgsNjUxNjUsMTA4LDE5OTQsMTA4LDExNTk5LDczLDU4MjUsNzMsNDIyMjYsNzMsOTM5OTIsNzMsNjYxODYsMTI0LDY2MzEzLDEyNCwxMTkzMzgsNzYsODU1Niw3Niw4NDY2LDc2LDExOTgxOSw3NiwxMTk4NzEsNzYsMTE5OTIzLDc2LDEyMDAyNyw3NiwxMjAwNzksNzYsMTIwMTMxLDc2LDEyMDE4Myw3NiwxMjAyMzUsNzYsMTIwMjg3LDc2LDEyMDMzOSw3NiwxMjAzOTEsNzYsMTIwNDQzLDc2LDExNDcyLDc2LDUwODYsNzYsNTI5MCw3Niw0MjIwOSw3Niw5Mzk3NCw3Niw3MTg0Myw3Niw3MTg1OCw3Niw2NjU4Nyw3Niw2Njg1NCw3Niw2NTMyNSw3Nyw4NTU5LDc3LDg0OTksNzcsMTE5ODIwLDc3LDExOTg3Miw3NywxMTk5MjQsNzcsMTIwMDI4LDc3LDEyMDA4MCw3NywxMjAxMzIsNzcsMTIwMTg0LDc3LDEyMDIzNiw3NywxMjAyODgsNzcsMTIwMzQwLDc3LDEyMDM5Miw3NywxMjA0NDQsNzcsOTI0LDc3LDEyMDQ5OSw3NywxMjA1NTcsNzcsMTIwNjE1LDc3LDEyMDY3Myw3NywxMjA3MzEsNzcsMTAxOCw3NywxMTQxNiw3Nyw1MDQ3LDc3LDU2MTYsNzcsNTg0Niw3Nyw0MjIwNyw3Nyw2NjIyNCw3Nyw2NjMyMSw3NywxMTk4NDcsMTEwLDExOTg5OSwxMTAsMTE5OTUxLDExMCwxMjAwMDMsMTEwLDEyMDA1NSwxMTAsMTIwMTA3LDExMCwxMjAxNTksMTEwLDEyMDIxMSwxMTAsMTIwMjYzLDExMCwxMjAzMTUsMTEwLDEyMDM2NywxMTAsMTIwNDE5LDExMCwxMjA0NzEsMTEwLDE0MDAsMTEwLDE0MDQsMTEwLDY1MzI2LDc4LDg0NjksNzgsMTE5ODIxLDc4LDExOTg3Myw3OCwxMTk5MjUsNzgsMTE5OTc3LDc4LDEyMDAyOSw3OCwxMjAwODEsNzgsMTIwMTg1LDc4LDEyMDIzNyw3OCwxMjAyODksNzgsMTIwMzQxLDc4LDEyMDM5Myw3OCwxMjA0NDUsNzgsOTI1LDc4LDEyMDUwMCw3OCwxMjA1NTgsNzgsMTIwNjE2LDc4LDEyMDY3NCw3OCwxMjA3MzIsNzgsMTE0MTgsNzgsNDIyMDgsNzgsNjY4MzUsNzgsMzA3NCwxMTEsMzIwMiwxMTEsMzMzMCwxMTEsMzQ1OCwxMTEsMjQwNiwxMTEsMjY2MiwxMTEsMjc5MCwxMTEsMzA0NiwxMTEsMzE3NCwxMTEsMzMwMiwxMTEsMzQzMCwxMTEsMzY2NCwxMTEsMzc5MiwxMTEsNDE2MCwxMTEsMTYzNywxMTEsMTc4MSwxMTEsNjUzNTksMTExLDg1MDAsMTExLDExOTg0OCwxMTEsMTE5OTAwLDExMSwxMTk5NTIsMTExLDEyMDA1NiwxMTEsMTIwMTA4LDExMSwxMjAxNjAsMTExLDEyMDIxMiwxMTEsMTIwMjY0LDExMSwxMjAzMTYsMTExLDEyMDM2OCwxMTEsMTIwNDIwLDExMSwxMjA0NzIsMTExLDc0MzksMTExLDc0NDEsMTExLDQzODM3LDExMSw5NTksMTExLDEyMDUyOCwxMTEsMTIwNTg2LDExMSwxMjA2NDQsMTExLDEyMDcwMiwxMTEsMTIwNzYwLDExMSw5NjMsMTExLDEyMDUzMiwxMTEsMTIwNTkwLDExMSwxMjA2NDgsMTExLDEyMDcwNiwxMTEsMTIwNzY0LDExMSwxMTQyMywxMTEsNDM1MSwxMTEsMTQxMywxMTEsMTUwNSwxMTEsMTYwNywxMTEsMTI2NTAwLDExMSwxMjY1NjQsMTExLDEyNjU5NiwxMTEsNjUyNTksMTExLDY1MjYwLDExMSw2NTI1OCwxMTEsNjUyNTcsMTExLDE3MjYsMTExLDY0NDI4LDExMSw2NDQyOSwxMTEsNjQ0MjcsMTExLDY0NDI2LDExMSwxNzI5LDExMSw2NDQyNCwxMTEsNjQ0MjUsMTExLDY0NDIzLDExMSw2NDQyMiwxMTEsMTc0OSwxMTEsMzM2MCwxMTEsNDEyNSwxMTEsNjY3OTQsMTExLDcxODgwLDExMSw3MTg5NSwxMTEsNjY2MDQsMTExLDE5ODQsNzksMjUzNCw3OSwyOTE4LDc5LDEyMjk1LDc5LDcwODY0LDc5LDcxOTA0LDc5LDEyMDc4Miw3OSwxMjA3OTIsNzksMTIwODAyLDc5LDEyMDgxMiw3OSwxMjA4MjIsNzksMTMwMDMyLDc5LDY1MzI3LDc5LDExOTgyMiw3OSwxMTk4NzQsNzksMTE5OTI2LDc5LDExOTk3OCw3OSwxMjAwMzAsNzksMTIwMDgyLDc5LDEyMDEzNCw3OSwxMjAxODYsNzksMTIwMjM4LDc5LDEyMDI5MCw3OSwxMjAzNDIsNzksMTIwMzk0LDc5LDEyMDQ0Niw3OSw5MjcsNzksMTIwNTAyLDc5LDEyMDU2MCw3OSwxMjA2MTgsNzksMTIwNjc2LDc5LDEyMDczNCw3OSwxMTQyMiw3OSwxMzY1LDc5LDExNjA0LDc5LDQ4MTYsNzksMjg0OCw3OSw2Njc1NCw3OSw0MjIyNyw3OSw3MTg2MSw3OSw2NjE5NCw3OSw2NjIxOSw3OSw2NjU2NCw3OSw2NjgzOCw3OSw5MDc2LDExMiw2NTM2MCwxMTIsMTE5ODQ5LDExMiwxMTk5MDEsMTEyLDExOTk1MywxMTIsMTIwMDA1LDExMiwxMjAwNTcsMTEyLDEyMDEwOSwxMTIsMTIwMTYxLDExMiwxMjAyMTMsMTEyLDEyMDI2NSwxMTIsMTIwMzE3LDExMiwxMjAzNjksMTEyLDEyMDQyMSwxMTIsMTIwNDczLDExMiw5NjEsMTEyLDEyMDUzMCwxMTIsMTIwNTQ0LDExMiwxMjA1ODgsMTEyLDEyMDYwMiwxMTIsMTIwNjQ2LDExMiwxMjA2NjAsMTEyLDEyMDcwNCwxMTIsMTIwNzE4LDExMiwxMjA3NjIsMTEyLDEyMDc3NiwxMTIsMTE0MjcsMTEyLDY1MzI4LDgwLDg0NzMsODAsMTE5ODIzLDgwLDExOTg3NSw4MCwxMTk5MjcsODAsMTE5OTc5LDgwLDEyMDAzMSw4MCwxMjAwODMsODAsMTIwMTg3LDgwLDEyMDIzOSw4MCwxMjAyOTEsODAsMTIwMzQzLDgwLDEyMDM5NSw4MCwxMjA0NDcsODAsOTI5LDgwLDEyMDUwNCw4MCwxMjA1NjIsODAsMTIwNjIwLDgwLDEyMDY3OCw4MCwxMjA3MzYsODAsMTE0MjYsODAsNTA5MCw4MCw1MjI5LDgwLDQyMTkzLDgwLDY2MTk3LDgwLDExOTg1MCwxMTMsMTE5OTAyLDExMywxMTk5NTQsMTEzLDEyMDAwNiwxMTMsMTIwMDU4LDExMywxMjAxMTAsMTEzLDEyMDE2MiwxMTMsMTIwMjE0LDExMywxMjAyNjYsMTEzLDEyMDMxOCwxMTMsMTIwMzcwLDExMywxMjA0MjIsMTEzLDEyMDQ3NCwxMTMsMTMwNywxMTMsMTM3OSwxMTMsMTM4MiwxMTMsODQ3NCw4MSwxMTk4MjQsODEsMTE5ODc2LDgxLDExOTkyOCw4MSwxMTk5ODAsODEsMTIwMDMyLDgxLDEyMDA4NCw4MSwxMjAxODgsODEsMTIwMjQwLDgxLDEyMDI5Miw4MSwxMjAzNDQsODEsMTIwMzk2LDgxLDEyMDQ0OCw4MSwxMTYwNSw4MSwxMTk4NTEsMTE0LDExOTkwMywxMTQsMTE5OTU1LDExNCwxMjAwMDcsMTE0LDEyMDA1OSwxMTQsMTIwMTExLDExNCwxMjAxNjMsMTE0LDEyMDIxNSwxMTQsMTIwMjY3LDExNCwxMjAzMTksMTE0LDEyMDM3MSwxMTQsMTIwNDIzLDExNCwxMjA0NzUsMTE0LDQzODQ3LDExNCw0Mzg0OCwxMTQsNzQ2MiwxMTQsMTEzOTcsMTE0LDQzOTA1LDExNCwxMTkzMTgsODIsODQ3NSw4Miw4NDc2LDgyLDg0NzcsODIsMTE5ODI1LDgyLDExOTg3Nyw4MiwxMTk5MjksODIsMTIwMDMzLDgyLDEyMDE4OSw4MiwxMjAyNDEsODIsMTIwMjkzLDgyLDEyMDM0NSw4MiwxMjAzOTcsODIsMTIwNDQ5LDgyLDQyMiw4Miw1MDI1LDgyLDUwNzQsODIsNjY3NDAsODIsNTUxMSw4Miw0MjIxMSw4Miw5NDAwNSw4Miw2NTM2MywxMTUsMTE5ODUyLDExNSwxMTk5MDQsMTE1LDExOTk1NiwxMTUsMTIwMDA4LDExNSwxMjAwNjAsMTE1LDEyMDExMiwxMTUsMTIwMTY0LDExNSwxMjAyMTYsMTE1LDEyMDI2OCwxMTUsMTIwMzIwLDExNSwxMjAzNzIsMTE1LDEyMDQyNCwxMTUsMTIwNDc2LDExNSw0MjgwMSwxMTUsNDQ1LDExNSwxMTA5LDExNSw0Mzk0NiwxMTUsNzE4NzMsMTE1LDY2NjMyLDExNSw2NTMzMSw4MywxMTk4MjYsODMsMTE5ODc4LDgzLDExOTkzMCw4MywxMTk5ODIsODMsMTIwMDM0LDgzLDEyMDA4Niw4MywxMjAxMzgsODMsMTIwMTkwLDgzLDEyMDI0Miw4MywxMjAyOTQsODMsMTIwMzQ2LDgzLDEyMDM5OCw4MywxMjA0NTAsODMsMTAyOSw4MywxMzU5LDgzLDUwNzcsODMsNTA4Miw4Myw0MjIxMCw4Myw5NDAxMCw4Myw2NjE5OCw4Myw2NjU5Miw4MywxMTk4NTMsMTE2LDExOTkwNSwxMTYsMTE5OTU3LDExNiwxMjAwMDksMTE2LDEyMDA2MSwxMTYsMTIwMTEzLDExNiwxMjAxNjUsMTE2LDEyMDIxNywxMTYsMTIwMjY5LDExNiwxMjAzMjEsMTE2LDEyMDM3MywxMTYsMTIwNDI1LDExNiwxMjA0NzcsMTE2LDg4NjgsODQsMTAyMDEsODQsMTI4ODcyLDg0LDY1MzMyLDg0LDExOTgyNyw4NCwxMTk4NzksODQsMTE5OTMxLDg0LDExOTk4Myw4NCwxMjAwMzUsODQsMTIwMDg3LDg0LDEyMDEzOSw4NCwxMjAxOTEsODQsMTIwMjQzLDg0LDEyMDI5NSw4NCwxMjAzNDcsODQsMTIwMzk5LDg0LDEyMDQ1MSw4NCw5MzIsODQsMTIwNTA3LDg0LDEyMDU2NSw4NCwxMjA2MjMsODQsMTIwNjgxLDg0LDEyMDczOSw4NCwxMTQzMCw4NCw1MDI2LDg0LDQyMTk2LDg0LDkzOTYyLDg0LDcxODY4LDg0LDY2MTk5LDg0LDY2MjI1LDg0LDY2MzI1LDg0LDExOTg1NCwxMTcsMTE5OTA2LDExNywxMTk5NTgsMTE3LDEyMDAxMCwxMTcsMTIwMDYyLDExNywxMjAxMTQsMTE3LDEyMDE2NiwxMTcsMTIwMjE4LDExNywxMjAyNzAsMTE3LDEyMDMyMiwxMTcsMTIwMzc0LDExNywxMjA0MjYsMTE3LDEyMDQ3OCwxMTcsNDI5MTEsMTE3LDc0NTIsMTE3LDQzODU0LDExNyw0Mzg1OCwxMTcsNjUxLDExNyw5NjUsMTE3LDEyMDUzNCwxMTcsMTIwNTkyLDExNywxMjA2NTAsMTE3LDEyMDcwOCwxMTcsMTIwNzY2LDExNywxNDA1LDExNyw2NjgwNiwxMTcsNzE4OTYsMTE3LDg3NDYsODUsODg5OSw4NSwxMTk4MjgsODUsMTE5ODgwLDg1LDExOTkzMiw4NSwxMTk5ODQsODUsMTIwMDM2LDg1LDEyMDA4OCw4NSwxMjAxNDAsODUsMTIwMTkyLDg1LDEyMDI0NCw4NSwxMjAyOTYsODUsMTIwMzQ4LDg1LDEyMDQwMCw4NSwxMjA0NTIsODUsMTM1Nyw4NSw0NjA4LDg1LDY2NzY2LDg1LDUxOTYsODUsNDIyMjgsODUsOTQwMTgsODUsNzE4NjQsODUsODc0NCwxMTgsODg5NywxMTgsNjUzNjYsMTE4LDg1NjQsMTE4LDExOTg1NSwxMTgsMTE5OTA3LDExOCwxMTk5NTksMTE4LDEyMDAxMSwxMTgsMTIwMDYzLDExOCwxMjAxMTUsMTE4LDEyMDE2NywxMTgsMTIwMjE5LDExOCwxMjAyNzEsMTE4LDEyMDMyMywxMTgsMTIwMzc1LDExOCwxMjA0MjcsMTE4LDEyMDQ3OSwxMTgsNzQ1NiwxMTgsOTU3LDExOCwxMjA1MjYsMTE4LDEyMDU4NCwxMTgsMTIwNjQyLDExOCwxMjA3MDAsMTE4LDEyMDc1OCwxMTgsMTE0MSwxMTgsMTQ5NiwxMTgsNzE0MzAsMTE4LDQzOTQ1LDExOCw3MTg3MiwxMTgsMTE5MzA5LDg2LDE2MzksODYsMTc4Myw4Niw4NTQ4LDg2LDExOTgyOSw4NiwxMTk4ODEsODYsMTE5OTMzLDg2LDExOTk4NSw4NiwxMjAwMzcsODYsMTIwMDg5LDg2LDEyMDE0MSw4NiwxMjAxOTMsODYsMTIwMjQ1LDg2LDEyMDI5Nyw4NiwxMjAzNDksODYsMTIwNDAxLDg2LDEyMDQ1Myw4NiwxMTQwLDg2LDExNTc2LDg2LDUwODEsODYsNTE2Nyw4Niw0MjcxOSw4Niw0MjIxNCw4Niw5Mzk2MCw4Niw3MTg0MCw4Niw2Njg0NSw4Niw2MjMsMTE5LDExOTg1NiwxMTksMTE5OTA4LDExOSwxMTk5NjAsMTE5LDEyMDAxMiwxMTksMTIwMDY0LDExOSwxMjAxMTYsMTE5LDEyMDE2OCwxMTksMTIwMjIwLDExOSwxMjAyNzIsMTE5LDEyMDMyNCwxMTksMTIwMzc2LDExOSwxMjA0MjgsMTE5LDEyMDQ4MCwxMTksNzQ1NywxMTksMTEyMSwxMTksMTMwOSwxMTksMTM3NywxMTksNzE0MzQsMTE5LDcxNDM4LDExOSw3MTQzOSwxMTksNDM5MDcsMTE5LDcxOTE5LDg3LDcxOTEwLDg3LDExOTgzMCw4NywxMTk4ODIsODcsMTE5OTM0LDg3LDExOTk4Niw4NywxMjAwMzgsODcsMTIwMDkwLDg3LDEyMDE0Miw4NywxMjAxOTQsODcsMTIwMjQ2LDg3LDEyMDI5OCw4NywxMjAzNTAsODcsMTIwNDAyLDg3LDEyMDQ1NCw4NywxMzA4LDg3LDUwNDMsODcsNTA3Niw4Nyw0MjIxOCw4Nyw1NzQyLDEyMCwxMDUzOSwxMjAsMTA1NDAsMTIwLDEwNzk5LDEyMCw2NTM2OCwxMjAsODU2OSwxMjAsMTE5ODU3LDEyMCwxMTk5MDksMTIwLDExOTk2MSwxMjAsMTIwMDEzLDEyMCwxMjAwNjUsMTIwLDEyMDExNywxMjAsMTIwMTY5LDEyMCwxMjAyMjEsMTIwLDEyMDI3MywxMjAsMTIwMzI1LDEyMCwxMjAzNzcsMTIwLDEyMDQyOSwxMjAsMTIwNDgxLDEyMCw1NDQxLDEyMCw1NTAxLDEyMCw1NzQxLDg4LDk1ODcsODgsNjYzMzgsODgsNzE5MTYsODgsNjUzMzYsODgsODU1Myw4OCwxMTk4MzEsODgsMTE5ODgzLDg4LDExOTkzNSw4OCwxMTk5ODcsODgsMTIwMDM5LDg4LDEyMDA5MSw4OCwxMjAxNDMsODgsMTIwMTk1LDg4LDEyMDI0Nyw4OCwxMjAyOTksODgsMTIwMzUxLDg4LDEyMDQwMyw4OCwxMjA0NTUsODgsNDI5MzEsODgsOTM1LDg4LDEyMDUxMCw4OCwxMjA1NjgsODgsMTIwNjI2LDg4LDEyMDY4NCw4OCwxMjA3NDIsODgsMTE0MzYsODgsMTE2MTMsODgsNTgxNSw4OCw0MjIxOSw4OCw2NjE5Miw4OCw2NjIyOCw4OCw2NjMyNyw4OCw2Njg1NSw4OCw2MTEsMTIxLDc1NjQsMTIxLDY1MzY5LDEyMSwxMTk4NTgsMTIxLDExOTkxMCwxMjEsMTE5OTYyLDEyMSwxMjAwMTQsMTIxLDEyMDA2NiwxMjEsMTIwMTE4LDEyMSwxMjAxNzAsMTIxLDEyMDIyMiwxMjEsMTIwMjc0LDEyMSwxMjAzMjYsMTIxLDEyMDM3OCwxMjEsMTIwNDMwLDEyMSwxMjA0ODIsMTIxLDY1NSwxMjEsNzkzNSwxMjEsNDM4NjYsMTIxLDk0NywxMjEsODUwOSwxMjEsMTIwNTE2LDEyMSwxMjA1NzQsMTIxLDEyMDYzMiwxMjEsMTIwNjkwLDEyMSwxMjA3NDgsMTIxLDExOTksMTIxLDQzMjcsMTIxLDcxOTAwLDEyMSw2NTMzNyw4OSwxMTk4MzIsODksMTE5ODg0LDg5LDExOTkzNiw4OSwxMTk5ODgsODksMTIwMDQwLDg5LDEyMDA5Miw4OSwxMjAxNDQsODksMTIwMTk2LDg5LDEyMDI0OCw4OSwxMjAzMDAsODksMTIwMzUyLDg5LDEyMDQwNCw4OSwxMjA0NTYsODksOTMzLDg5LDk3OCw4OSwxMjA1MDgsODksMTIwNTY2LDg5LDEyMDYyNCw4OSwxMjA2ODIsODksMTIwNzQwLDg5LDExNDMyLDg5LDExOTgsODksNTAzMyw4OSw1MDUzLDg5LDQyMjIwLDg5LDk0MDE5LDg5LDcxODQ0LDg5LDY2MjI2LDg5LDExOTg1OSwxMjIsMTE5OTExLDEyMiwxMTk5NjMsMTIyLDEyMDAxNSwxMjIsMTIwMDY3LDEyMiwxMjAxMTksMTIyLDEyMDE3MSwxMjIsMTIwMjIzLDEyMiwxMjAyNzUsMTIyLDEyMDMyNywxMjIsMTIwMzc5LDEyMiwxMjA0MzEsMTIyLDEyMDQ4MywxMjIsNzQ1OCwxMjIsNDM5MjMsMTIyLDcxODc2LDEyMiw2NjI5Myw5MCw3MTkwOSw5MCw2NTMzOCw5MCw4NDg0LDkwLDg0ODgsOTAsMTE5ODMzLDkwLDExOTg4NSw5MCwxMTk5MzcsOTAsMTE5OTg5LDkwLDEyMDA0MSw5MCwxMjAxOTcsOTAsMTIwMjQ5LDkwLDEyMDMwMSw5MCwxMjAzNTMsOTAsMTIwNDA1LDkwLDEyMDQ1Nyw5MCw5MTgsOTAsMTIwNDkzLDkwLDEyMDU1MSw5MCwxMjA2MDksOTAsMTIwNjY3LDkwLDEyMDcyNSw5MCw1MDU5LDkwLDQyMjA0LDkwLDcxODQ5LDkwLDY1MjgyLDM0LDY1Mjg0LDM2LDY1Mjg1LDM3LDY1Mjg2LDM4LDY1MjkwLDQyLDY1MjkxLDQzLDY1Mjk0LDQ2LDY1Mjk1LDQ3LDY1Mjk2LDQ4LDY1Mjk3LDQ5LDY1Mjk4LDUwLDY1Mjk5LDUxLDY1MzAwLDUyLDY1MzAxLDUzLDY1MzAyLDU0LDY1MzAzLDU1LDY1MzA0LDU2LDY1MzA1LDU3LDY1MzA4LDYwLDY1MzA5LDYxLDY1MzEwLDYyLDY1MzEyLDY0LDY1MzE2LDY4LDY1MzE4LDcwLDY1MzE5LDcxLDY1MzI0LDc2LDY1MzI5LDgxLDY1MzMwLDgyLDY1MzMzLDg1LDY1MzM0LDg2LDY1MzM1LDg3LDY1MzQzLDk1LDY1MzQ2LDk4LDY1MzQ4LDEwMCw2NTM1MCwxMDIsNjUzNTUsMTA3LDY1MzU3LDEwOSw2NTM1OCwxMTAsNjUzNjEsMTEzLDY1MzYyLDExNCw2NTM2NCwxMTYsNjUzNjUsMTE3LDY1MzY3LDExOSw2NTM3MCwxMjIsNjUzNzEsMTIzLDY1MzczLDEyNSwxMTk4NDYsMTA5XSwiX2RlZmF1bHQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiY3MiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImRlIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJlcyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJmciI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJpdCI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiamEiOls4MjExLDQ1LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI5Miw0NCw2NTMwNyw1OV0sImtvIjpbODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwbCI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJwdC1CUiI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJxcHMtcGxvYyI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJydSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMzA1LDEwNSw5MjEsNzMsMTAwOSwxMTIsMjE1LDEyMCw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInRyIjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sInpoLWhhbnMiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODgsNDAsNjUyODksNDFdLCJ6aC1oYW50IjpbODIxMSw0NSw2NTM3NCwxMjYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1MzA3LDU5XX0nKSksRmUuY2FjaGU9bmV3IGlsKHtnZXRDYWNoZUtleTpKU09OLnN0cmluZ2lmeX0sdD0+e2Z1bmN0aW9uIG4oaCl7Y29uc3QgYz1uZXcgTWFwO2ZvcihsZXQgZD0wO2Q8aC5sZW5ndGg7ZCs9MiljLnNldChoW2RdLGhbZCsxXSk7cmV0dXJuIGN9ZnVuY3Rpb24gcihoLGMpe2NvbnN0IGQ9bmV3IE1hcChoKTtmb3IoY29uc3RbbSxnXW9mIGMpZC5zZXQobSxnKTtyZXR1cm4gZH1mdW5jdGlvbiBpKGgsYyl7aWYoIWgpcmV0dXJuIGM7Y29uc3QgZD1uZXcgTWFwO2Zvcihjb25zdFttLGddb2YgaCljLmhhcyhtKSYmZC5zZXQobSxnKTtyZXR1cm4gZH1jb25zdCBzPUZlLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWU7bGV0IGE9dC5maWx0ZXIoaD0+IWguc3RhcnRzV2l0aCgiXyIpJiZoIGluIHMpO2EubGVuZ3RoPT09MCYmKGE9WyJfZGVmYXVsdCJdKTtsZXQgbDtmb3IoY29uc3QgaCBvZiBhKXtjb25zdCBjPW4oc1toXSk7bD1pKGwsYyl9Y29uc3Qgbz1uKHMuX2NvbW1vbiksdT1yKG8sbCk7cmV0dXJuIG5ldyBGZSh1KX0pLEZlLl9sb2NhbGVzPW5ldyBzaSgoKT0+T2JqZWN0LmtleXMoRmUuYW1iaWd1b3VzQ2hhcmFjdGVyRGF0YS52YWx1ZSkuZmlsdGVyKHQ9PiF0LnN0YXJ0c1dpdGgoIl8iKSkpO2xldCBEdD1GZTtjb25zdCBUdD1jbGFzcyBUdHtzdGF0aWMgZ2V0UmF3RGF0YSgpe3JldHVybiBKU09OLnBhcnNlKCJbOSwxMCwxMSwxMiwxMywzMiwxMjcsMTYwLDE3Myw4NDcsMTU2NCw0NDQ3LDQ0NDgsNjA2OCw2MDY5LDYxNTUsNjE1Niw2MTU3LDYxNTgsNzM1NSw3MzU2LDgxOTIsODE5Myw4MTk0LDgxOTUsODE5Niw4MTk3LDgxOTgsODE5OSw4MjAwLDgyMDEsODIwMiw4MjAzLDgyMDQsODIwNSw4MjA2LDgyMDcsODIzNCw4MjM1LDgyMzYsODIzNyw4MjM4LDgyMzksODI4Nyw4Mjg4LDgyODksODI5MCw4MjkxLDgyOTIsODI5Myw4Mjk0LDgyOTUsODI5Niw4Mjk3LDgyOTgsODI5OSw4MzAwLDgzMDEsODMwMiw4MzAzLDEwMjQwLDEyMjg4LDEyNjQ0LDY1MDI0LDY1MDI1LDY1MDI2LDY1MDI3LDY1MDI4LDY1MDI5LDY1MDMwLDY1MDMxLDY1MDMyLDY1MDMzLDY1MDM0LDY1MDM1LDY1MDM2LDY1MDM3LDY1MDM4LDY1MDM5LDY1Mjc5LDY1NDQwLDY1NTIwLDY1NTIxLDY1NTIyLDY1NTIzLDY1NTI0LDY1NTI1LDY1NTI2LDY1NTI3LDY1NTI4LDY1NTMyLDc4ODQ0LDExOTE1NSwxMTkxNTYsMTE5MTU3LDExOTE1OCwxMTkxNTksMTE5MTYwLDExOTE2MSwxMTkxNjIsOTE3NTA0LDkxNzUwNSw5MTc1MDYsOTE3NTA3LDkxNzUwOCw5MTc1MDksOTE3NTEwLDkxNzUxMSw5MTc1MTIsOTE3NTEzLDkxNzUxNCw5MTc1MTUsOTE3NTE2LDkxNzUxNyw5MTc1MTgsOTE3NTE5LDkxNzUyMCw5MTc1MjEsOTE3NTIyLDkxNzUyMyw5MTc1MjQsOTE3NTI1LDkxNzUyNiw5MTc1MjcsOTE3NTI4LDkxNzUyOSw5MTc1MzAsOTE3NTMxLDkxNzUzMiw5MTc1MzMsOTE3NTM0LDkxNzUzNSw5MTc1MzYsOTE3NTM3LDkxNzUzOCw5MTc1MzksOTE3NTQwLDkxNzU0MSw5MTc1NDIsOTE3NTQzLDkxNzU0NCw5MTc1NDUsOTE3NTQ2LDkxNzU0Nyw5MTc1NDgsOTE3NTQ5LDkxNzU1MCw5MTc1NTEsOTE3NTUyLDkxNzU1Myw5MTc1NTQsOTE3NTU1LDkxNzU1Niw5MTc1NTcsOTE3NTU4LDkxNzU1OSw5MTc1NjAsOTE3NTYxLDkxNzU2Miw5MTc1NjMsOTE3NTY0LDkxNzU2NSw5MTc1NjYsOTE3NTY3LDkxNzU2OCw5MTc1NjksOTE3NTcwLDkxNzU3MSw5MTc1NzIsOTE3NTczLDkxNzU3NCw5MTc1NzUsOTE3NTc2LDkxNzU3Nyw5MTc1NzgsOTE3NTc5LDkxNzU4MCw5MTc1ODEsOTE3NTgyLDkxNzU4Myw5MTc1ODQsOTE3NTg1LDkxNzU4Niw5MTc1ODcsOTE3NTg4LDkxNzU4OSw5MTc1OTAsOTE3NTkxLDkxNzU5Miw5MTc1OTMsOTE3NTk0LDkxNzU5NSw5MTc1OTYsOTE3NTk3LDkxNzU5OCw5MTc1OTksOTE3NjAwLDkxNzYwMSw5MTc2MDIsOTE3NjAzLDkxNzYwNCw5MTc2MDUsOTE3NjA2LDkxNzYwNyw5MTc2MDgsOTE3NjA5LDkxNzYxMCw5MTc2MTEsOTE3NjEyLDkxNzYxMyw5MTc2MTQsOTE3NjE1LDkxNzYxNiw5MTc2MTcsOTE3NjE4LDkxNzYxOSw5MTc2MjAsOTE3NjIxLDkxNzYyMiw5MTc2MjMsOTE3NjI0LDkxNzYyNSw5MTc2MjYsOTE3NjI3LDkxNzYyOCw5MTc2MjksOTE3NjMwLDkxNzYzMSw5MTc3NjAsOTE3NzYxLDkxNzc2Miw5MTc3NjMsOTE3NzY0LDkxNzc2NSw5MTc3NjYsOTE3NzY3LDkxNzc2OCw5MTc3NjksOTE3NzcwLDkxNzc3MSw5MTc3NzIsOTE3NzczLDkxNzc3NCw5MTc3NzUsOTE3Nzc2LDkxNzc3Nyw5MTc3NzgsOTE3Nzc5LDkxNzc4MCw5MTc3ODEsOTE3NzgyLDkxNzc4Myw5MTc3ODQsOTE3Nzg1LDkxNzc4Niw5MTc3ODcsOTE3Nzg4LDkxNzc4OSw5MTc3OTAsOTE3NzkxLDkxNzc5Miw5MTc3OTMsOTE3Nzk0LDkxNzc5NSw5MTc3OTYsOTE3Nzk3LDkxNzc5OCw5MTc3OTksOTE3ODAwLDkxNzgwMSw5MTc4MDIsOTE3ODAzLDkxNzgwNCw5MTc4MDUsOTE3ODA2LDkxNzgwNyw5MTc4MDgsOTE3ODA5LDkxNzgxMCw5MTc4MTEsOTE3ODEyLDkxNzgxMyw5MTc4MTQsOTE3ODE1LDkxNzgxNiw5MTc4MTcsOTE3ODE4LDkxNzgxOSw5MTc4MjAsOTE3ODIxLDkxNzgyMiw5MTc4MjMsOTE3ODI0LDkxNzgyNSw5MTc4MjYsOTE3ODI3LDkxNzgyOCw5MTc4MjksOTE3ODMwLDkxNzgzMSw5MTc4MzIsOTE3ODMzLDkxNzgzNCw5MTc4MzUsOTE3ODM2LDkxNzgzNyw5MTc4MzgsOTE3ODM5LDkxNzg0MCw5MTc4NDEsOTE3ODQyLDkxNzg0Myw5MTc4NDQsOTE3ODQ1LDkxNzg0Niw5MTc4NDcsOTE3ODQ4LDkxNzg0OSw5MTc4NTAsOTE3ODUxLDkxNzg1Miw5MTc4NTMsOTE3ODU0LDkxNzg1NSw5MTc4NTYsOTE3ODU3LDkxNzg1OCw5MTc4NTksOTE3ODYwLDkxNzg2MSw5MTc4NjIsOTE3ODYzLDkxNzg2NCw5MTc4NjUsOTE3ODY2LDkxNzg2Nyw5MTc4NjgsOTE3ODY5LDkxNzg3MCw5MTc4NzEsOTE3ODcyLDkxNzg3Myw5MTc4NzQsOTE3ODc1LDkxNzg3Niw5MTc4NzcsOTE3ODc4LDkxNzg3OSw5MTc4ODAsOTE3ODgxLDkxNzg4Miw5MTc4ODMsOTE3ODg0LDkxNzg4NSw5MTc4ODYsOTE3ODg3LDkxNzg4OCw5MTc4ODksOTE3ODkwLDkxNzg5MSw5MTc4OTIsOTE3ODkzLDkxNzg5NCw5MTc4OTUsOTE3ODk2LDkxNzg5Nyw5MTc4OTgsOTE3ODk5LDkxNzkwMCw5MTc5MDEsOTE3OTAyLDkxNzkwMyw5MTc5MDQsOTE3OTA1LDkxNzkwNiw5MTc5MDcsOTE3OTA4LDkxNzkwOSw5MTc5MTAsOTE3OTExLDkxNzkxMiw5MTc5MTMsOTE3OTE0LDkxNzkxNSw5MTc5MTYsOTE3OTE3LDkxNzkxOCw5MTc5MTksOTE3OTIwLDkxNzkyMSw5MTc5MjIsOTE3OTIzLDkxNzkyNCw5MTc5MjUsOTE3OTI2LDkxNzkyNyw5MTc5MjgsOTE3OTI5LDkxNzkzMCw5MTc5MzEsOTE3OTMyLDkxNzkzMyw5MTc5MzQsOTE3OTM1LDkxNzkzNiw5MTc5MzcsOTE3OTM4LDkxNzkzOSw5MTc5NDAsOTE3OTQxLDkxNzk0Miw5MTc5NDMsOTE3OTQ0LDkxNzk0NSw5MTc5NDYsOTE3OTQ3LDkxNzk0OCw5MTc5NDksOTE3OTUwLDkxNzk1MSw5MTc5NTIsOTE3OTUzLDkxNzk1NCw5MTc5NTUsOTE3OTU2LDkxNzk1Nyw5MTc5NTgsOTE3OTU5LDkxNzk2MCw5MTc5NjEsOTE3OTYyLDkxNzk2Myw5MTc5NjQsOTE3OTY1LDkxNzk2Niw5MTc5NjcsOTE3OTY4LDkxNzk2OSw5MTc5NzAsOTE3OTcxLDkxNzk3Miw5MTc5NzMsOTE3OTc0LDkxNzk3NSw5MTc5NzYsOTE3OTc3LDkxNzk3OCw5MTc5NzksOTE3OTgwLDkxNzk4MSw5MTc5ODIsOTE3OTgzLDkxNzk4NCw5MTc5ODUsOTE3OTg2LDkxNzk4Nyw5MTc5ODgsOTE3OTg5LDkxNzk5MCw5MTc5OTEsOTE3OTkyLDkxNzk5Myw5MTc5OTQsOTE3OTk1LDkxNzk5Niw5MTc5OTcsOTE3OTk4LDkxNzk5OV0iKX1zdGF0aWMgZ2V0RGF0YSgpe3JldHVybiB0aGlzLl9kYXRhfHwodGhpcy5fZGF0YT1uZXcgU2V0KFR0LmdldFJhd0RhdGEoKSkpLHRoaXMuX2RhdGF9c3RhdGljIGlzSW52aXNpYmxlQ2hhcmFjdGVyKHQpe3JldHVybiBUdC5nZXREYXRhKCkuaGFzKHQpfXN0YXRpYyBnZXQgY29kZVBvaW50cygpe3JldHVybiBUdC5nZXREYXRhKCl9fTtUdC5fZGF0YT12b2lkIDA7bGV0IE90PVR0O2NvbnN0IGhsPSIkaW5pdGlhbGl6ZSI7Y2xhc3MgZGx7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy5tZXRob2Q9cix0aGlzLmFyZ3M9aSx0aGlzLnR5cGU9MH19Y2xhc3MgbGl7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy52c1dvcmtlcj10LHRoaXMuc2VxPW4sdGhpcy5yZXM9cix0aGlzLmVycj1pLHRoaXMudHlwZT0xfX1jbGFzcyBtbHtjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50TmFtZT1yLHRoaXMuYXJnPWksdGhpcy50eXBlPTJ9fWNsYXNzIGdse2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PXIsdGhpcy50eXBlPTN9fWNsYXNzIHBse2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIGJse2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuKXtjb25zdCByPVN0cmluZygrK3RoaXMuX2xhc3RTZW50UmVxKTtyZXR1cm4gbmV3IFByb21pc2UoKGkscyk9Pnt0aGlzLl9wZW5kaW5nUmVwbGllc1tyXT17cmVzb2x2ZTppLHJlamVjdDpzfSx0aGlzLl9zZW5kKG5ldyBkbCh0aGlzLl93b3JrZXJJZCxyLHQsbikpfSl9bGlzdGVuKHQsbil7bGV0IHI9bnVsbDtjb25zdCBpPW5ldyBMZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e3I9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQocixpKSx0aGlzLl9zZW5kKG5ldyBtbCh0aGlzLl93b3JrZXJJZCxyLHQsbikpfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcjooKT0+e3RoaXMuX3BlbmRpbmdFbWl0dGVycy5kZWxldGUociksdGhpcy5fc2VuZChuZXcgcGwodGhpcy5fd29ya2VySWQscikpLHI9bnVsbH19KTtyZXR1cm4gaS5ldmVudH1oYW5kbGVNZXNzYWdlKHQpeyF0fHwhdC52c1dvcmtlcnx8dGhpcy5fd29ya2VySWQhPT0tMSYmdC52c1dvcmtlciE9PXRoaXMuX3dvcmtlcklkfHx0aGlzLl9oYW5kbGVNZXNzYWdlKHQpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgcj10LmVycjt0LmVyci4kaXNFcnJvciYmKHI9bmV3IEVycm9yLHIubmFtZT10LmVyci5uYW1lLHIubWVzc2FnZT10LmVyci5tZXNzYWdlLHIuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KHIpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0Lm1ldGhvZCx0LmFyZ3MpLnRoZW4oaT0+e3RoaXMuX3NlbmQobmV3IGxpKHRoaXMuX3dvcmtlcklkLG4saSx2b2lkIDApKX0saT0+e2kuZGV0YWlsIGluc3RhbmNlb2YgRXJyb3ImJihpLmRldGFpbD1laShpLmRldGFpbCkpLHRoaXMuX3NlbmQobmV3IGxpKHRoaXMuX3dvcmtlcklkLG4sdm9pZCAwLGVpKGkpKSl9KX1faGFuZGxlU3Vic2NyaWJlRXZlbnRNZXNzYWdlKHQpe2NvbnN0IG49dC5yZXEscj10aGlzLl9oYW5kbGVyLmhhbmRsZUV2ZW50KHQuZXZlbnROYW1lLHQuYXJnKShpPT57dGhpcy5fc2VuZChuZXcgZ2wodGhpcy5fd29ya2VySWQsbixpKSl9KTt0aGlzLl9wZW5kaW5nRXZlbnRzLnNldChuLHIpfV9oYW5kbGVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFbWl0dGVycy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCBldmVudCBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmdldCh0LnJlcSkuZmlyZSh0LmV2ZW50KX1faGFuZGxlVW5zdWJzY3JpYmVFdmVudE1lc3NhZ2UodCl7aWYoIXRoaXMuX3BlbmRpbmdFdmVudHMuaGFzKHQucmVxKSl7Y29uc29sZS53YXJuKCJHb3QgdW5zdWJzY3JpYmUgZm9yIHVua25vd24gcmVxIik7cmV0dXJufXRoaXMuX3BlbmRpbmdFdmVudHMuZ2V0KHQucmVxKS5kaXNwb3NlKCksdGhpcy5fcGVuZGluZ0V2ZW50cy5kZWxldGUodC5yZXEpfV9zZW5kKHQpe2NvbnN0IG49W107aWYodC50eXBlPT09MClmb3IobGV0IHI9MDtyPHQuYXJncy5sZW5ndGg7cisrKXQuYXJnc1tyXWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJm4ucHVzaCh0LmFyZ3Nbcl0pO2Vsc2UgdC50eXBlPT09MSYmdC5yZXMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQucmVzKTt0aGlzLl9oYW5kbGVyLnNlbmRNZXNzYWdlKHQsbil9fWZ1bmN0aW9uIHVpKGUpe3JldHVybiBlWzBdPT09Im8iJiZlWzFdPT09Im4iJiZhaShlLmNoYXJDb2RlQXQoMikpfWZ1bmN0aW9uIGNpKGUpe3JldHVybi9eb25EeW5hbWljLy50ZXN0KGUpJiZhaShlLmNoYXJDb2RlQXQoOSkpfWZ1bmN0aW9uIHZsKGUsdCxuKXtjb25zdCByPWE9PmZ1bmN0aW9uKCl7Y29uc3QgbD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIHQoYSxsKX0saT1hPT5mdW5jdGlvbihsKXtyZXR1cm4gbihhLGwpfSxzPXt9O2Zvcihjb25zdCBhIG9mIGUpe2lmKGNpKGEpKXtzW2FdPWkoYSk7Y29udGludWV9aWYodWkoYSkpe3NbYV09bihhLHZvaWQgMCk7Y29udGludWV9c1thXT1yKGEpfXJldHVybiBzfWNsYXNzIHhse2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5PW4sdGhpcy5fcmVxdWVzdEhhbmRsZXI9bnVsbCx0aGlzLl9wcm90b2NvbD1uZXcgYmwoe3NlbmRNZXNzYWdlOihyLGkpPT57dChyLGkpfSxoYW5kbGVNZXNzYWdlOihyLGkpPT50aGlzLl9oYW5kbGVNZXNzYWdlKHIsaSksaGFuZGxlRXZlbnQ6KHIsaSk9PnRoaXMuX2hhbmRsZUV2ZW50KHIsaSl9KX1vbm1lc3NhZ2UodCl7dGhpcy5fcHJvdG9jb2wuaGFuZGxlTWVzc2FnZSh0KX1faGFuZGxlTWVzc2FnZSh0LG4pe2lmKHQ9PT1obClyZXR1cm4gdGhpcy5pbml0aWFsaXplKG5bMF0sblsxXSxuWzJdLG5bM10pO2lmKCF0aGlzLl9yZXF1ZXN0SGFuZGxlcnx8dHlwZW9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyW3RdIT0iZnVuY3Rpb24iKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk1pc3NpbmcgcmVxdWVzdEhhbmRsZXIgb3IgbWV0aG9kOiAiK3QpKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9yZXF1ZXN0SGFuZGxlclt0XS5hcHBseSh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKSl9Y2F0Y2gocil7cmV0dXJuIFByb21pc2UucmVqZWN0KHIpfX1faGFuZGxlRXZlbnQodCxuKXtpZighdGhpcy5fcmVxdWVzdEhhbmRsZXIpdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIik7aWYoY2kodCkpe2NvbnN0IHI9dGhpcy5fcmVxdWVzdEhhbmRsZXJbdF0uY2FsbCh0aGlzLl9yZXF1ZXN0SGFuZGxlcixuKTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke3R9IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gcn1pZih1aSh0KSl7Y29uc3Qgcj10aGlzLl9yZXF1ZXN0SGFuZGxlclt0XTtpZih0eXBlb2YgciE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZXZlbnQgJHt0fSBvbiByZXF1ZXN0IGhhbmRsZXIuYCk7cmV0dXJuIHJ9dGhyb3cgbmV3IEVycm9yKGBNYWxmb3JtZWQgZXZlbnQgbmFtZSAke3R9YCl9aW5pdGlhbGl6ZSh0LG4scixpKXt0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KTtjb25zdCBsPXZsKGksKG8sdSk9PnRoaXMuX3Byb3RvY29sLnNlbmRNZXNzYWdlKG8sdSksKG8sdSk9PnRoaXMuX3Byb3RvY29sLmxpc3RlbihvLHUpKTtyZXR1cm4gdGhpcy5fcmVxdWVzdEhhbmRsZXJGYWN0b3J5Pyh0aGlzLl9yZXF1ZXN0SGFuZGxlcj10aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3RvcnkobCksUHJvbWlzZS5yZXNvbHZlKHpuKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSkpOihuJiYodHlwZW9mIG4uYmFzZVVybDwidSImJmRlbGV0ZSBuLmJhc2VVcmwsdHlwZW9mIG4ucGF0aHM8InUiJiZ0eXBlb2Ygbi5wYXRocy52czwidSImJmRlbGV0ZSBuLnBhdGhzLnZzLHR5cGVvZiBuLnRydXN0ZWRUeXBlc1BvbGljeTwidSImJmRlbGV0ZSBuLnRydXN0ZWRUeXBlc1BvbGljeSxuLmNhdGNoRXJyb3I9ITAsZ2xvYmFsVGhpcy5yZXF1aXJlLmNvbmZpZyhuKSksbmV3IFByb21pc2UoKG8sdSk9Pntjb25zdCBoPWdsb2JhbFRoaXMucmVxdWlyZTtoKFtyXSxjPT57aWYodGhpcy5fcmVxdWVzdEhhbmRsZXI9Yy5jcmVhdGUobCksIXRoaXMuX3JlcXVlc3RIYW5kbGVyKXt1KG5ldyBFcnJvcigiTm8gUmVxdWVzdEhhbmRsZXIhIikpO3JldHVybn1vKHpuKHRoaXMuX3JlcXVlc3RIYW5kbGVyKSl9LHUpfSkpfX1jbGFzcyBqZXtjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLm9yaWdpbmFsU3RhcnQ9dCx0aGlzLm9yaWdpbmFsTGVuZ3RoPW4sdGhpcy5tb2RpZmllZFN0YXJ0PXIsdGhpcy5tb2RpZmllZExlbmd0aD1pfWdldE9yaWdpbmFsRW5kKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxTdGFydCt0aGlzLm9yaWdpbmFsTGVuZ3RofWdldE1vZGlmaWVkRW5kKCl7cmV0dXJuIHRoaXMubW9kaWZpZWRTdGFydCt0aGlzLm1vZGlmaWVkTGVuZ3RofX1mdW5jdGlvbiBmaShlLHQpe3JldHVybih0PDw1KS10K2V8MH1mdW5jdGlvbiB5bChlLHQpe3Q9ZmkoMTQ5NDE3LHQpO2ZvcihsZXQgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyl0PWZpKGUuY2hhckNvZGVBdChuKSx0KTtyZXR1cm4gdH1mdW5jdGlvbiBZbihlLHQsbj0zMil7Y29uc3Qgcj1uLXQsaT1+KCgxPDxyKS0xKTtyZXR1cm4oZTw8dHwoaSZlKT4+PnIpPj4+MH1mdW5jdGlvbiBoaShlLHQ9MCxuPWUuYnl0ZUxlbmd0aCxyPTApe2ZvcihsZXQgaT0wO2k8bjtpKyspZVt0K2ldPXJ9ZnVuY3Rpb24gd2woZSx0LG49IjAiKXtmb3IoO2UubGVuZ3RoPHQ7KWU9bitlO3JldHVybiBlfWZ1bmN0aW9uIEJ0KGUsdD0zMil7cmV0dXJuIGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9BcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGUpKS5tYXAobj0+bi50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKTp3bCgoZT4+PjApLnRvU3RyaW5nKDE2KSx0LzQpfWNvbnN0IFBuPWNsYXNzIFBue2NvbnN0cnVjdG9yKCl7dGhpcy5faDA9MTczMjU4NDE5Myx0aGlzLl9oMT00MDIzMjMzNDE3LHRoaXMuX2gyPTI1NjIzODMxMDIsdGhpcy5faDM9MjcxNzMzODc4LHRoaXMuX2g0PTMyODUzNzc1MjAsdGhpcy5fYnVmZj1uZXcgVWludDhBcnJheSg2NyksdGhpcy5fYnVmZkRWPW5ldyBEYXRhVmlldyh0aGlzLl9idWZmLmJ1ZmZlciksdGhpcy5fYnVmZkxlbj0wLHRoaXMuX3RvdGFsTGVuPTAsdGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlPTAsdGhpcy5fZmluaXNoZWQ9ITF9dXBkYXRlKHQpe2NvbnN0IG49dC5sZW5ndGg7aWYobj09PTApcmV0dXJuO2NvbnN0IHI9dGhpcy5fYnVmZjtsZXQgaT10aGlzLl9idWZmTGVuLHM9dGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlLGEsbDtmb3IocyE9PTA/KGE9cyxsPS0xLHM9MCk6KGE9dC5jaGFyQ29kZUF0KDApLGw9MCk7Oyl7bGV0IG89YTtpZihhbihhKSlpZihsKzE8bil7Y29uc3QgdT10LmNoYXJDb2RlQXQobCsxKTtabih1KT8obCsrLG89b2koYSx1KSk6bz02NTUzM31lbHNle3M9YTticmVha31lbHNlIFpuKGEpJiYobz02NTUzMyk7aWYoaT10aGlzLl9wdXNoKHIsaSxvKSxsKyssbDxuKWE9dC5jaGFyQ29kZUF0KGwpO2Vsc2UgYnJlYWt9dGhpcy5fYnVmZkxlbj1pLHRoaXMuX2xlZnRvdmVySGlnaFN1cnJvZ2F0ZT1zfV9wdXNoKHQsbixyKXtyZXR1cm4gcjwxMjg/dFtuKytdPXI6cjwyMDQ4Pyh0W24rK109MTkyfChyJjE5ODQpPj4+Nix0W24rK109MTI4fChyJjYzKT4+PjApOnI8NjU1MzY/KHRbbisrXT0yMjR8KHImNjE0NDApPj4+MTIsdFtuKytdPTEyOHwociY0MDMyKT4+PjYsdFtuKytdPTEyOHwociY2Myk+Pj4wKToodFtuKytdPTI0MHwociYxODM1MDA4KT4+PjE4LHRbbisrXT0xMjh8KHImMjU4MDQ4KT4+PjEyLHRbbisrXT0xMjh8KHImNDAzMik+Pj42LHRbbisrXT0xMjh8KHImNjMpPj4+MCksbj49NjQmJih0aGlzLl9zdGVwKCksbi09NjQsdGhpcy5fdG90YWxMZW4rPTY0LHRbMF09dFs2NF0sdFsxXT10WzY1XSx0WzJdPXRbNjZdKSxufWRpZ2VzdCgpe3JldHVybiB0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX2xlZnRvdmVySGlnaFN1cnJvZ2F0ZSYmKHRoaXMuX2xlZnRvdmVySGlnaFN1cnJvZ2F0ZT0wLHRoaXMuX2J1ZmZMZW49dGhpcy5fcHVzaCh0aGlzLl9idWZmLHRoaXMuX2J1ZmZMZW4sNjU1MzMpKSx0aGlzLl90b3RhbExlbis9dGhpcy5fYnVmZkxlbix0aGlzLl93cmFwVXAoKSksQnQodGhpcy5faDApK0J0KHRoaXMuX2gxKStCdCh0aGlzLl9oMikrQnQodGhpcy5faDMpK0J0KHRoaXMuX2g0KX1fd3JhcFVwKCl7dGhpcy5fYnVmZlt0aGlzLl9idWZmTGVuKytdPTEyOCxoaSh0aGlzLl9idWZmLHRoaXMuX2J1ZmZMZW4pLHRoaXMuX2J1ZmZMZW4+NTYmJih0aGlzLl9zdGVwKCksaGkodGhpcy5fYnVmZikpO2NvbnN0IHQ9OCp0aGlzLl90b3RhbExlbjt0aGlzLl9idWZmRFYuc2V0VWludDMyKDU2LE1hdGguZmxvb3IodC80Mjk0OTY3Mjk2KSwhMSksdGhpcy5fYnVmZkRWLnNldFVpbnQzMig2MCx0JTQyOTQ5NjcyOTYsITEpLHRoaXMuX3N0ZXAoKX1fc3RlcCgpe2NvbnN0IHQ9UG4uX2JpZ0Jsb2NrMzIsbj10aGlzLl9idWZmRFY7Zm9yKGxldCBjPTA7Yzw2NDtjKz00KXQuc2V0VWludDMyKGMsbi5nZXRVaW50MzIoYywhMSksITEpO2ZvcihsZXQgYz02NDtjPDMyMDtjKz00KXQuc2V0VWludDMyKGMsWW4odC5nZXRVaW50MzIoYy0xMiwhMSledC5nZXRVaW50MzIoYy0zMiwhMSledC5nZXRVaW50MzIoYy01NiwhMSledC5nZXRVaW50MzIoYy02NCwhMSksMSksITEpO2xldCByPXRoaXMuX2gwLGk9dGhpcy5faDEscz10aGlzLl9oMixhPXRoaXMuX2gzLGw9dGhpcy5faDQsbyx1LGg7Zm9yKGxldCBjPTA7Yzw4MDtjKyspYzwyMD8obz1pJnN8fmkmYSx1PTE1MTg1MDAyNDkpOmM8NDA/KG89aV5zXmEsdT0xODU5Nzc1MzkzKTpjPDYwPyhvPWkmc3xpJmF8cyZhLHU9MjQwMDk1OTcwOCk6KG89aV5zXmEsdT0zMzk1NDY5NzgyKSxoPVluKHIsNSkrbytsK3UrdC5nZXRVaW50MzIoYyo0LCExKSY0Mjk0OTY3Mjk1LGw9YSxhPXMscz1ZbihpLDMwKSxpPXIscj1oO3RoaXMuX2gwPXRoaXMuX2gwK3ImNDI5NDk2NzI5NSx0aGlzLl9oMT10aGlzLl9oMStpJjQyOTQ5NjcyOTUsdGhpcy5faDI9dGhpcy5faDIrcyY0Mjk0OTY3Mjk1LHRoaXMuX2gzPXRoaXMuX2gzK2EmNDI5NDk2NzI5NSx0aGlzLl9oND10aGlzLl9oNCtsJjQyOTQ5NjcyOTV9fTtQbi5fYmlnQmxvY2szMj1uZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDMyMCkpO2xldCBkaT1QbjtjbGFzcyBtaXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnNvdXJjZT10fWdldEVsZW1lbnRzKCl7Y29uc3QgdD10aGlzLnNvdXJjZSxuPW5ldyBJbnQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbltyXT10LmNoYXJDb2RlQXQocik7cmV0dXJuIG59fWZ1bmN0aW9uIF9sKGUsdCxuKXtyZXR1cm4gbmV3IEhlKG5ldyBtaShlKSxuZXcgbWkodCkpLkNvbXB1dGVEaWZmKG4pLmNoYW5nZXN9Y2xhc3MgZHR7c3RhdGljIEFzc2VydCh0LG4pe2lmKCF0KXRocm93IG5ldyBFcnJvcihuKX19Y2xhc3MgbXR7c3RhdGljIENvcHkodCxuLHIsaSxzKXtmb3IobGV0IGE9MDthPHM7YSsrKXJbaSthXT10W24rYV19c3RhdGljIENvcHkyKHQsbixyLGkscyl7Zm9yKGxldCBhPTA7YTxzO2ErKylyW2krYV09dFtuK2FdfX1jbGFzcyBnaXtjb25zdHJ1Y3Rvcigpe3RoaXMubV9jaGFuZ2VzPVtdLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTB9TWFya05leHRDaGFuZ2UoKXsodGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMubV9jaGFuZ2VzLnB1c2gobmV3IGplKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHRoaXMubV9vcmlnaW5hbENvdW50LHRoaXMubV9tb2RpZmllZFN0YXJ0LHRoaXMubV9tb2RpZmllZENvdW50KSksdGhpcy5tX29yaWdpbmFsQ291bnQ9MCx0aGlzLm1fbW9kaWZpZWRDb3VudD0wLHRoaXMubV9vcmlnaW5hbFN0YXJ0PTEwNzM3NDE4MjQsdGhpcy5tX21vZGlmaWVkU3RhcnQ9MTA3Mzc0MTgyNH1BZGRPcmlnaW5hbEVsZW1lbnQodCxuKXt0aGlzLm1fb3JpZ2luYWxTdGFydD1NYXRoLm1pbih0aGlzLm1fb3JpZ2luYWxTdGFydCx0KSx0aGlzLm1fbW9kaWZpZWRTdGFydD1NYXRoLm1pbih0aGlzLm1fbW9kaWZpZWRTdGFydCxuKSx0aGlzLm1fb3JpZ2luYWxDb3VudCsrfUFkZE1vZGlmaWVkRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9tb2RpZmllZENvdW50Kyt9Z2V0Q2hhbmdlcygpe3JldHVybih0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5NYXJrTmV4dENoYW5nZSgpLHRoaXMubV9jaGFuZ2VzfWdldFJldmVyc2VDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXMucmV2ZXJzZSgpLHRoaXMubV9jaGFuZ2VzfX1jbGFzcyBIZXtjb25zdHJ1Y3Rvcih0LG4scj1udWxsKXt0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZT1yLHRoaXMuX29yaWdpbmFsU2VxdWVuY2U9dCx0aGlzLl9tb2RpZmllZFNlcXVlbmNlPW47Y29uc3RbaSxzLGFdPUhlLl9nZXRFbGVtZW50cyh0KSxbbCxvLHVdPUhlLl9nZXRFbGVtZW50cyhuKTt0aGlzLl9oYXNTdHJpbmdzPWEmJnUsdGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50cz1pLHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2g9cyx0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzPWwsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaD1vLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W119c3RhdGljIF9pc1N0cmluZ0FycmF5KHQpe3JldHVybiB0Lmxlbmd0aD4wJiZ0eXBlb2YgdFswXT09InN0cmluZyJ9c3RhdGljIF9nZXRFbGVtZW50cyh0KXtjb25zdCBuPXQuZ2V0RWxlbWVudHMoKTtpZihIZS5faXNTdHJpbmdBcnJheShuKSl7Y29uc3Qgcj1uZXcgSW50MzJBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBpPTAscz1uLmxlbmd0aDtpPHM7aSsrKXJbaV09eWwobltpXSwwKTtyZXR1cm5bbixyLCEwXX1yZXR1cm4gbiBpbnN0YW5jZW9mIEludDMyQXJyYXk/W1tdLG4sITFdOltbXSxuZXcgSW50MzJBcnJheShuKSwhMV19RWxlbWVudHNBcmVFcXVhbCh0LG4pe3JldHVybiB0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW3RdIT09dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFtuXT8hMTp0aGlzLl9oYXNTdHJpbmdzP3RoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF09PT10aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW25dOiEwfUVsZW1lbnRzQXJlU3RyaWN0RXF1YWwodCxuKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQsbikpcmV0dXJuITE7Y29uc3Qgcj1IZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9vcmlnaW5hbFNlcXVlbmNlLHQpLGk9SGUuX2dldFN0cmljdEVsZW1lbnQodGhpcy5fbW9kaWZpZWRTZXF1ZW5jZSxuKTtyZXR1cm4gcj09PWl9c3RhdGljIF9nZXRTdHJpY3RFbGVtZW50KHQsbil7cmV0dXJuIHR5cGVvZiB0LmdldFN0cmljdEVsZW1lbnQ9PSJmdW5jdGlvbiI/dC5nZXRTdHJpY3RFbGVtZW50KG4pOm51bGx9T3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbbl06ITB9TW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9Q29tcHV0ZURpZmYodCl7cmV0dXJuIHRoaXMuX0NvbXB1dGVEaWZmKDAsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMSwwLHRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTEsdCl9X0NvbXB1dGVEaWZmKHQsbixyLGkscyl7Y29uc3QgYT1bITFdO2xldCBsPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLHIsaSxhKTtyZXR1cm4gcyYmKGw9dGhpcy5QcmV0dGlmeUNoYW5nZXMobCkpLHtxdWl0RWFybHk6YVswXSxjaGFuZ2VzOmx9fUNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsbixyLGkscyl7Zm9yKHNbMF09ITE7dDw9biYmcjw9aSYmdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQscik7KXQrKyxyKys7Zm9yKDtuPj10JiZpPj1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobixpKTspbi0tLGktLTtpZih0Pm58fHI+aSl7bGV0IGM7cmV0dXJuIHI8PWk/KGR0LkFzc2VydCh0PT09bisxLCJvcmlnaW5hbFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gb3JpZ2luYWxFbmQiKSxjPVtuZXcgamUodCwwLHIsaS1yKzEpXSk6dDw9bj8oZHQuQXNzZXJ0KHI9PT1pKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGM9W25ldyBqZSh0LG4tdCsxLHIsMCldKTooZHQuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGR0LkFzc2VydChyPT09aSsxLCJtb2RpZmllZFN0YXJ0IHNob3VsZCBvbmx5IGJlIG9uZSBtb3JlIHRoYW4gbW9kaWZpZWRFbmQiKSxjPVtdKSxjfWNvbnN0IGE9WzBdLGw9WzBdLG89dGhpcy5Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLHIsaSxhLGwscyksdT1hWzBdLGg9bFswXTtpZihvIT09bnVsbClyZXR1cm4gbztpZighc1swXSl7Y29uc3QgYz10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKHQsdSxyLGgscyk7bGV0IGQ9W107cmV0dXJuIHNbMF0/ZD1bbmV3IGplKHUrMSxuLSh1KzEpKzEsaCsxLGktKGgrMSkrMSldOmQ9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh1KzEsbixoKzEsaSxzKSx0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhjLGQpfXJldHVybltuZXcgamUodCxuLXQrMSxyLGktcisxKV19V0FMS1RSQUNFKHQsbixyLGkscyxhLGwsbyx1LGgsYyxkLG0sZyxwLHYsXyxOKXtsZXQgeD1udWxsLHk9bnVsbCxiPW5ldyBnaSxMPW4sQT1yLFI9bVswXS12WzBdLWksST0tMTA3Mzc0MTgyNCxEPXRoaXMubV9mb3J3YXJkSGlzdG9yeS5sZW5ndGgtMTtkb3tjb25zdCBNPVIrdDtNPT09THx8TTxBJiZ1W00tMV08dVtNKzFdPyhjPXVbTSsxXSxnPWMtUi1pLGM8SSYmYi5NYXJrTmV4dENoYW5nZSgpLEk9YyxiLkFkZE1vZGlmaWVkRWxlbWVudChjKzEsZyksUj1NKzEtdCk6KGM9dVtNLTFdKzEsZz1jLVItaSxjPEkmJmIuTWFya05leHRDaGFuZ2UoKSxJPWMtMSxiLkFkZE9yaWdpbmFsRWxlbWVudChjLGcrMSksUj1NLTEtdCksRD49MCYmKHU9dGhpcy5tX2ZvcndhcmRIaXN0b3J5W0RdLHQ9dVswXSxMPTEsQT11Lmxlbmd0aC0xKX13aGlsZSgtLUQ+PS0xKTtpZih4PWIuZ2V0UmV2ZXJzZUNoYW5nZXMoKSxOWzBdKXtsZXQgTT1tWzBdKzEsdz12WzBdKzE7aWYoeCE9PW51bGwmJngubGVuZ3RoPjApe2NvbnN0IFM9eFt4Lmxlbmd0aC0xXTtNPU1hdGgubWF4KE0sUy5nZXRPcmlnaW5hbEVuZCgpKSx3PU1hdGgubWF4KHcsUy5nZXRNb2RpZmllZEVuZCgpKX15PVtuZXcgamUoTSxkLU0rMSx3LHAtdysxKV19ZWxzZXtiPW5ldyBnaSxMPWEsQT1sLFI9bVswXS12WzBdLW8sST0xMDczNzQxODI0LEQ9Xz90aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTE6dGhpcy5tX3JldmVyc2VIaXN0b3J5Lmxlbmd0aC0yO2Rve2NvbnN0IE09UitzO009PT1MfHxNPEEmJmhbTS0xXT49aFtNKzFdPyhjPWhbTSsxXS0xLGc9Yy1SLW8sYz5JJiZiLk1hcmtOZXh0Q2hhbmdlKCksST1jKzEsYi5BZGRPcmlnaW5hbEVsZW1lbnQoYysxLGcrMSksUj1NKzEtcyk6KGM9aFtNLTFdLGc9Yy1SLW8sYz5JJiZiLk1hcmtOZXh0Q2hhbmdlKCksST1jLGIuQWRkTW9kaWZpZWRFbGVtZW50KGMrMSxnKzEpLFI9TS0xLXMpLEQ+PTAmJihoPXRoaXMubV9yZXZlcnNlSGlzdG9yeVtEXSxzPWhbMF0sTD0xLEE9aC5sZW5ndGgtMSl9d2hpbGUoLS1EPj0tMSk7eT1iLmdldENoYW5nZXMoKX1yZXR1cm4gdGhpcy5Db25jYXRlbmF0ZUNoYW5nZXMoeCx5KX1Db21wdXRlUmVjdXJzaW9uUG9pbnQodCxuLHIsaSxzLGEsbCl7bGV0IG89MCx1PTAsaD0wLGM9MCxkPTAsbT0wO3QtLSxyLS0sc1swXT0wLGFbMF09MCx0aGlzLm1fZm9yd2FyZEhpc3Rvcnk9W10sdGhpcy5tX3JldmVyc2VIaXN0b3J5PVtdO2NvbnN0IGc9bi10KyhpLXIpLHA9ZysxLHY9bmV3IEludDMyQXJyYXkocCksXz1uZXcgSW50MzJBcnJheShwKSxOPWktcix4PW4tdCx5PXQtcixiPW4taSxBPSh4LU4pJTI9PT0wO3ZbTl09dCxfW3hdPW4sbFswXT0hMTtmb3IobGV0IFI9MTtSPD1nLzIrMTtSKyspe2xldCBJPTAsRD0wO2g9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChOLVIsUixOLHApLGM9dGhpcy5DbGlwRGlhZ29uYWxCb3VuZChOK1IsUixOLHApO2ZvcihsZXQgdz1oO3c8PWM7dys9Mil7dz09PWh8fHc8YyYmdlt3LTFdPHZbdysxXT9vPXZbdysxXTpvPXZbdy0xXSsxLHU9by0ody1OKS15O2NvbnN0IFM9bztmb3IoO288biYmdTxpJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobysxLHUrMSk7KW8rKyx1Kys7aWYodlt3XT1vLG8rdT5JK0QmJihJPW8sRD11KSwhQSYmTWF0aC5hYnMody14KTw9Ui0xJiZvPj1fW3ddKXJldHVybiBzWzBdPW8sYVswXT11LFM8PV9bd10mJlI8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoTixoLGMseSx4LGQsbSxiLHYsXyxvLG4scyx1LGksYSxBLGwpOm51bGx9Y29uc3QgTT0oSS10KyhELXIpLVIpLzI7aWYodGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUhPT1udWxsJiYhdGhpcy5Db250aW51ZVByb2Nlc3NpbmdQcmVkaWNhdGUoSSxNKSlyZXR1cm4gbFswXT0hMCxzWzBdPUksYVswXT1ELE0+MCYmUjw9MTQ0OD90aGlzLldBTEtUUkFDRShOLGgsYyx5LHgsZCxtLGIsdixfLG8sbixzLHUsaSxhLEEsbCk6KHQrKyxyKyssW25ldyBqZSh0LG4tdCsxLHIsaS1yKzEpXSk7ZD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHgtUixSLHgscCksbT10aGlzLkNsaXBEaWFnb25hbEJvdW5kKHgrUixSLHgscCk7Zm9yKGxldCB3PWQ7dzw9bTt3Kz0yKXt3PT09ZHx8dzxtJiZfW3ctMV0+PV9bdysxXT9vPV9bdysxXS0xOm89X1t3LTFdLHU9by0ody14KS1iO2NvbnN0IFM9bztmb3IoO28+dCYmdT5yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwobyx1KTspby0tLHUtLTtpZihfW3ddPW8sQSYmTWF0aC5hYnMody1OKTw9UiYmbzw9dlt3XSlyZXR1cm4gc1swXT1vLGFbMF09dSxTPj12W3ddJiZSPD0xNDQ4P3RoaXMuV0FMS1RSQUNFKE4saCxjLHkseCxkLG0sYix2LF8sbyxuLHMsdSxpLGEsQSxsKTpudWxsfWlmKFI8PTE0NDcpe2xldCB3PW5ldyBJbnQzMkFycmF5KGMtaCsyKTt3WzBdPU4taCsxLG10LkNvcHkyKHYsaCx3LDEsYy1oKzEpLHRoaXMubV9mb3J3YXJkSGlzdG9yeS5wdXNoKHcpLHc9bmV3IEludDMyQXJyYXkobS1kKzIpLHdbMF09eC1kKzEsbXQuQ29weTIoXyxkLHcsMSxtLWQrMSksdGhpcy5tX3JldmVyc2VIaXN0b3J5LnB1c2godyl9fXJldHVybiB0aGlzLldBTEtUUkFDRShOLGgsYyx5LHgsZCxtLGIsdixfLG8sbixzLHUsaSxhLEEsbCl9UHJldHRpZnlDaGFuZ2VzKHQpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXtjb25zdCByPXRbbl0saT1uPHQubGVuZ3RoLTE/dFtuKzFdLm9yaWdpbmFsU3RhcnQ6dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgscz1uPHQubGVuZ3RoLTE/dFtuKzFdLm1vZGlmaWVkU3RhcnQ6dGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgsYT1yLm9yaWdpbmFsTGVuZ3RoPjAsbD1yLm1vZGlmaWVkTGVuZ3RoPjA7Zm9yKDtyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aDxpJiZyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aDxzJiYoIWF8fHRoaXMuT3JpZ2luYWxFbGVtZW50c0FyZUVxdWFsKHIub3JpZ2luYWxTdGFydCxyLm9yaWdpbmFsU3RhcnQrci5vcmlnaW5hbExlbmd0aCkpJiYoIWx8fHRoaXMuTW9kaWZpZWRFbGVtZW50c0FyZUVxdWFsKHIubW9kaWZpZWRTdGFydCxyLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCkpOyl7Y29uc3QgdT10aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwoci5vcmlnaW5hbFN0YXJ0LHIubW9kaWZpZWRTdGFydCk7aWYodGhpcy5FbGVtZW50c0FyZVN0cmljdEVxdWFsKHIub3JpZ2luYWxTdGFydCtyLm9yaWdpbmFsTGVuZ3RoLHIubW9kaWZpZWRTdGFydCtyLm1vZGlmaWVkTGVuZ3RoKSYmIXUpYnJlYWs7ci5vcmlnaW5hbFN0YXJ0Kyssci5tb2RpZmllZFN0YXJ0Kyt9Y29uc3Qgbz1bbnVsbF07aWYobjx0Lmxlbmd0aC0xJiZ0aGlzLkNoYW5nZXNPdmVybGFwKHRbbl0sdFtuKzFdLG8pKXt0W25dPW9bMF0sdC5zcGxpY2UobisxLDEpLG4tLTtjb250aW51ZX19Zm9yKGxldCBuPXQubGVuZ3RoLTE7bj49MDtuLS0pe2NvbnN0IHI9dFtuXTtsZXQgaT0wLHM9MDtpZihuPjApe2NvbnN0IGM9dFtuLTFdO2k9Yy5vcmlnaW5hbFN0YXJ0K2Mub3JpZ2luYWxMZW5ndGgscz1jLm1vZGlmaWVkU3RhcnQrYy5tb2RpZmllZExlbmd0aH1jb25zdCBhPXIub3JpZ2luYWxMZW5ndGg+MCxsPXIubW9kaWZpZWRMZW5ndGg+MDtsZXQgbz0wLHU9dGhpcy5fYm91bmRhcnlTY29yZShyLm9yaWdpbmFsU3RhcnQsci5vcmlnaW5hbExlbmd0aCxyLm1vZGlmaWVkU3RhcnQsci5tb2RpZmllZExlbmd0aCk7Zm9yKGxldCBjPTE7O2MrKyl7Y29uc3QgZD1yLm9yaWdpbmFsU3RhcnQtYyxtPXIubW9kaWZpZWRTdGFydC1jO2lmKGQ8aXx8bTxzfHxhJiYhdGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwoZCxkK3Iub3JpZ2luYWxMZW5ndGgpfHxsJiYhdGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwobSxtK3IubW9kaWZpZWRMZW5ndGgpKWJyZWFrO2NvbnN0IHA9KGQ9PT1pJiZtPT09cz81OjApK3RoaXMuX2JvdW5kYXJ5U2NvcmUoZCxyLm9yaWdpbmFsTGVuZ3RoLG0sci5tb2RpZmllZExlbmd0aCk7cD51JiYodT1wLG89Yyl9ci5vcmlnaW5hbFN0YXJ0LT1vLHIubW9kaWZpZWRTdGFydC09bztjb25zdCBoPVtudWxsXTtpZihuPjAmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuLTFdLHRbbl0saCkpe3Rbbi0xXT1oWzBdLHQuc3BsaWNlKG4sMSksbisrO2NvbnRpbnVlfX1pZih0aGlzLl9oYXNTdHJpbmdzKWZvcihsZXQgbj0xLHI9dC5sZW5ndGg7bjxyO24rKyl7Y29uc3QgaT10W24tMV0scz10W25dLGE9cy5vcmlnaW5hbFN0YXJ0LWkub3JpZ2luYWxTdGFydC1pLm9yaWdpbmFsTGVuZ3RoLGw9aS5vcmlnaW5hbFN0YXJ0LG89cy5vcmlnaW5hbFN0YXJ0K3Mub3JpZ2luYWxMZW5ndGgsdT1vLWwsaD1pLm1vZGlmaWVkU3RhcnQsYz1zLm1vZGlmaWVkU3RhcnQrcy5tb2RpZmllZExlbmd0aCxkPWMtaDtpZihhPDUmJnU8MjAmJmQ8MjApe2NvbnN0IG09dGhpcy5fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZShsLHUsaCxkLGEpO2lmKG0pe2NvbnN0W2cscF09bTsoZyE9PWkub3JpZ2luYWxTdGFydCtpLm9yaWdpbmFsTGVuZ3RofHxwIT09aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgpJiYoaS5vcmlnaW5hbExlbmd0aD1nLWkub3JpZ2luYWxTdGFydCxpLm1vZGlmaWVkTGVuZ3RoPXAtaS5tb2RpZmllZFN0YXJ0LHMub3JpZ2luYWxTdGFydD1nK2Escy5tb2RpZmllZFN0YXJ0PXArYSxzLm9yaWdpbmFsTGVuZ3RoPW8tcy5vcmlnaW5hbFN0YXJ0LHMubW9kaWZpZWRMZW5ndGg9Yy1zLm1vZGlmaWVkU3RhcnQpfX19cmV0dXJuIHR9X2ZpbmRCZXR0ZXJDb250aWd1b3VzU2VxdWVuY2UodCxuLHIsaSxzKXtpZihuPHN8fGk8cylyZXR1cm4gbnVsbDtjb25zdCBhPXQrbi1zKzEsbD1yK2ktcysxO2xldCBvPTAsdT0wLGg9MDtmb3IobGV0IGM9dDtjPGE7YysrKWZvcihsZXQgZD1yO2Q8bDtkKyspe2NvbnN0IG09dGhpcy5fY29udGlndW91c1NlcXVlbmNlU2NvcmUoYyxkLHMpO20+MCYmbT5vJiYobz1tLHU9YyxoPWQpfXJldHVybiBvPjA/W3UsaF06bnVsbH1fY29udGlndW91c1NlcXVlbmNlU2NvcmUodCxuLHIpe2xldCBpPTA7Zm9yKGxldCBzPTA7czxyO3MrKyl7aWYoIXRoaXMuRWxlbWVudHNBcmVFcXVhbCh0K3MsbitzKSlyZXR1cm4gMDtpKz10aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3Qrc10ubGVuZ3RofXJldHVybiBpfV9PcmlnaW5hbElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdF0pfV9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkodCl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3Qgcj10K247aWYodGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHItMSl8fHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeShyKSlyZXR1cm4hMH1yZXR1cm4hMX1fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpe3JldHVybiB0PD0wfHx0Pj10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xPyEwOnRoaXMuX2hhc1N0cmluZ3MmJi9eXHMqJC8udGVzdCh0aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdKX1fTW9kaWZpZWRSZWdpb25Jc0JvdW5kYXJ5KHQsbil7aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHQpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodC0xKSlyZXR1cm4hMDtpZihuPjApe2NvbnN0IHI9dCtuO2lmKHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShyLTEpfHx0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkocikpcmV0dXJuITB9cmV0dXJuITF9X2JvdW5kYXJ5U2NvcmUodCxuLHIsaSl7Y29uc3Qgcz10aGlzLl9PcmlnaW5hbFJlZ2lvbklzQm91bmRhcnkodCxuKT8xOjAsYT10aGlzLl9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkocixpKT8xOjA7cmV0dXJuIHMrYX1Db25jYXRlbmF0ZUNoYW5nZXModCxuKXtjb25zdCByPVtdO2lmKHQubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0wKXJldHVybiBuLmxlbmd0aD4wP246dDtpZih0aGlzLkNoYW5nZXNPdmVybGFwKHRbdC5sZW5ndGgtMV0sblswXSxyKSl7Y29uc3QgaT1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgtMSk7cmV0dXJuIG10LkNvcHkodCwwLGksMCx0Lmxlbmd0aC0xKSxpW3QubGVuZ3RoLTFdPXJbMF0sbXQuQ29weShuLDEsaSx0Lmxlbmd0aCxuLmxlbmd0aC0xKSxpfWVsc2V7Y29uc3QgaT1uZXcgQXJyYXkodC5sZW5ndGgrbi5sZW5ndGgpO3JldHVybiBtdC5Db3B5KHQsMCxpLDAsdC5sZW5ndGgpLG10LkNvcHkobiwwLGksdC5sZW5ndGgsbi5sZW5ndGgpLGl9fUNoYW5nZXNPdmVybGFwKHQsbixyKXtpZihkdC5Bc3NlcnQodC5vcmlnaW5hbFN0YXJ0PD1uLm9yaWdpbmFsU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksZHQuQXNzZXJ0KHQubW9kaWZpZWRTdGFydDw9bi5tb2RpZmllZFN0YXJ0LCJMZWZ0IGNoYW5nZSBpcyBub3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHJpZ2h0IGNoYW5nZSIpLHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoPj1uLm9yaWdpbmFsU3RhcnR8fHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQpe2NvbnN0IGk9dC5vcmlnaW5hbFN0YXJ0O2xldCBzPXQub3JpZ2luYWxMZW5ndGg7Y29uc3QgYT10Lm1vZGlmaWVkU3RhcnQ7bGV0IGw9dC5tb2RpZmllZExlbmd0aDtyZXR1cm4gdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydCYmKHM9bi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtdC5vcmlnaW5hbFN0YXJ0KSx0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aD49bi5tb2RpZmllZFN0YXJ0JiYobD1uLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC10Lm1vZGlmaWVkU3RhcnQpLHJbMF09bmV3IGplKGkscyxhLGwpLCEwfWVsc2UgcmV0dXJuIHJbMF09bnVsbCwhMX1DbGlwRGlhZ29uYWxCb3VuZCh0LG4scixpKXtpZih0Pj0wJiZ0PGkpcmV0dXJuIHQ7Y29uc3Qgcz1yLGE9aS1yLTEsbD1uJTI9PT0wO2lmKHQ8MCl7Y29uc3Qgbz1zJTI9PT0wO3JldHVybiBsPT09bz8wOjF9ZWxzZXtjb25zdCBvPWElMj09PTA7cmV0dXJuIGw9PT1vP2ktMTppLTJ9fX12YXIgcGk9e0VOVl9UWVBFOiJsb2NhbCIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifTtsZXQgZ3Q7Y29uc3QgS249Z2xvYmFsVGhpcy52c2NvZGU7aWYodHlwZW9mIEtuPCJ1IiYmdHlwZW9mIEtuLnByb2Nlc3M8InUiKXtjb25zdCBlPUtuLnByb2Nlc3M7Z3Q9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZCgpe3JldHVybiBlLmN3ZCgpfX19ZWxzZSB0eXBlb2YgcHJvY2VzczwidSI/Z3Q9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gcGl9LGN3ZCgpe3JldHVybiBwaS5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06Z3Q9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBWdD8id2luMzIiOmVsPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZCgpe3JldHVybiIvIn19O2NvbnN0IG9uPWd0LmN3ZCxMbD1ndC5lbnYsTmw9Z3QucGxhdGZvcm0sU2w9NjUsQWw9OTcsa2w9OTAsRWw9MTIyLFdlPTQ2LGFlPTQ3LGhlPTkyLHplPTU4LFJsPTYzO2NsYXNzIGJpIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IodCxuLHIpe2xldCBpO3R5cGVvZiBuPT0ic3RyaW5nIiYmbi5pbmRleE9mKCJub3QgIik9PT0wPyhpPSJtdXN0IG5vdCBiZSIsbj1uLnJlcGxhY2UoL15ub3QgLywiIikpOmk9Im11c3QgYmUiO2NvbnN0IHM9dC5pbmRleE9mKCIuIikhPT0tMT8icHJvcGVydHkiOiJhcmd1bWVudCI7bGV0IGE9YFRoZSAiJHt0fSIgJHtzfSAke2l9IG9mIHR5cGUgJHtufWA7YSs9YC4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiByfWAsc3VwZXIoYSksdGhpcy5jb2RlPSJFUlJfSU5WQUxJRF9BUkdfVFlQRSJ9fWZ1bmN0aW9uIE1sKGUsdCl7aWYoZT09PW51bGx8fHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgYmkodCwiT2JqZWN0IixlKX1mdW5jdGlvbiBLKGUsdCl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBiaSh0LCJzdHJpbmciLGUpfWNvbnN0IEdlPU5sPT09IndpbjMyIjtmdW5jdGlvbiBCKGUpe3JldHVybiBlPT09YWV8fGU9PT1oZX1mdW5jdGlvbiBlcihlKXtyZXR1cm4gZT09PWFlfWZ1bmN0aW9uIEplKGUpe3JldHVybiBlPj1TbCYmZTw9a2x8fGU+PUFsJiZlPD1FbH1mdW5jdGlvbiBsbihlLHQsbixyKXtsZXQgaT0iIixzPTAsYT0tMSxsPTAsbz0wO2ZvcihsZXQgdT0wO3U8PWUubGVuZ3RoOysrdSl7aWYodTxlLmxlbmd0aClvPWUuY2hhckNvZGVBdCh1KTtlbHNle2lmKHIobykpYnJlYWs7bz1hZX1pZihyKG8pKXtpZighKGE9PT11LTF8fGw9PT0xKSlpZihsPT09Mil7aWYoaS5sZW5ndGg8Mnx8cyE9PTJ8fGkuY2hhckNvZGVBdChpLmxlbmd0aC0xKSE9PVdlfHxpLmNoYXJDb2RlQXQoaS5sZW5ndGgtMikhPT1XZSl7aWYoaS5sZW5ndGg+Mil7Y29uc3QgaD1pLmxhc3RJbmRleE9mKG4pO2g9PT0tMT8oaT0iIixzPTApOihpPWkuc2xpY2UoMCxoKSxzPWkubGVuZ3RoLTEtaS5sYXN0SW5kZXhPZihuKSksYT11LGw9MDtjb250aW51ZX1lbHNlIGlmKGkubGVuZ3RoIT09MCl7aT0iIixzPTAsYT11LGw9MDtjb250aW51ZX19dCYmKGkrPWkubGVuZ3RoPjA/YCR7bn0uLmA6Ii4uIixzPTIpfWVsc2UgaS5sZW5ndGg+MD9pKz1gJHtufSR7ZS5zbGljZShhKzEsdSl9YDppPWUuc2xpY2UoYSsxLHUpLHM9dS1hLTE7YT11LGw9MH1lbHNlIG89PT1XZSYmbCE9PS0xPysrbDpsPS0xfXJldHVybiBpfWZ1bmN0aW9uIENsKGUpe3JldHVybiBlP2Ake2VbMF09PT0iLiI/IiI6Ii4ifSR7ZX1gOiIifWZ1bmN0aW9uIHZpKGUsdCl7TWwodCwicGF0aE9iamVjdCIpO2NvbnN0IG49dC5kaXJ8fHQucm9vdCxyPXQuYmFzZXx8YCR7dC5uYW1lfHwiIn0ke0NsKHQuZXh0KX1gO3JldHVybiBuP249PT10LnJvb3Q/YCR7bn0ke3J9YDpgJHtufSR7ZX0ke3J9YDpyfWNvbnN0IGNlPXtyZXNvbHZlKC4uLmUpe2xldCB0PSIiLG49IiIscj0hMTtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0tMTtpLS0pe2xldCBzO2lmKGk+PTApe2lmKHM9ZVtpXSxLKHMsYHBhdGhzWyR7aX1dYCkscy5sZW5ndGg9PT0wKWNvbnRpbnVlfWVsc2UgdC5sZW5ndGg9PT0wP3M9b24oKToocz1MbFtgPSR7dH1gXXx8b24oKSwocz09PXZvaWQgMHx8cy5zbGljZSgwLDIpLnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkmJnMuY2hhckNvZGVBdCgyKT09PWhlKSYmKHM9YCR7dH1cXGApKTtjb25zdCBhPXMubGVuZ3RoO2xldCBsPTAsbz0iIix1PSExO2NvbnN0IGg9cy5jaGFyQ29kZUF0KDApO2lmKGE9PT0xKUIoaCkmJihsPTEsdT0hMCk7ZWxzZSBpZihCKGgpKWlmKHU9ITAsQihzLmNoYXJDb2RlQXQoMSkpKXtsZXQgYz0yLGQ9Yztmb3IoO2M8YSYmIUIocy5jaGFyQ29kZUF0KGMpKTspYysrO2lmKGM8YSYmYyE9PWQpe2NvbnN0IG09cy5zbGljZShkLGMpO2ZvcihkPWM7YzxhJiZCKHMuY2hhckNvZGVBdChjKSk7KWMrKztpZihjPGEmJmMhPT1kKXtmb3IoZD1jO2M8YSYmIUIocy5jaGFyQ29kZUF0KGMpKTspYysrOyhjPT09YXx8YyE9PWQpJiYobz1gXFxcXCR7bX1cXCR7cy5zbGljZShkLGMpfWAsbD1jKX19fWVsc2UgbD0xO2Vsc2UgSmUoaCkmJnMuY2hhckNvZGVBdCgxKT09PXplJiYobz1zLnNsaWNlKDAsMiksbD0yLGE+MiYmQihzLmNoYXJDb2RlQXQoMikpJiYodT0hMCxsPTMpKTtpZihvLmxlbmd0aD4wKWlmKHQubGVuZ3RoPjApe2lmKG8udG9Mb3dlckNhc2UoKSE9PXQudG9Mb3dlckNhc2UoKSljb250aW51ZX1lbHNlIHQ9bztpZihyKXtpZih0Lmxlbmd0aD4wKWJyZWFrfWVsc2UgaWYobj1gJHtzLnNsaWNlKGwpfVxcJHtufWAscj11LHUmJnQubGVuZ3RoPjApYnJlYWt9cmV0dXJuIG49bG4obiwhciwiXFwiLEIpLHI/YCR7dH1cXCR7bn1gOmAke3R9JHtufWB8fCIuIn0sbm9ybWFsaXplKGUpe0soZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuIi4iO2xldCBuPTAscixpPSExO2NvbnN0IHM9ZS5jaGFyQ29kZUF0KDApO2lmKHQ9PT0xKXJldHVybiBlcihzKT8iXFwiOmU7aWYoQihzKSlpZihpPSEwLEIoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGw9MixvPWw7Zm9yKDtsPHQmJiFCKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPHQmJmwhPT1vKXtjb25zdCB1PWUuc2xpY2UobyxsKTtmb3Iobz1sO2w8dCYmQihlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobDx0JiZsIT09byl7Zm9yKG89bDtsPHQmJiFCKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPT09dClyZXR1cm5gXFxcXCR7dX1cXCR7ZS5zbGljZShvKX1cXGA7bCE9PW8mJihyPWBcXFxcJHt1fVxcJHtlLnNsaWNlKG8sbCl9YCxuPWwpfX19ZWxzZSBuPTE7ZWxzZSBKZShzKSYmZS5jaGFyQ29kZUF0KDEpPT09emUmJihyPWUuc2xpY2UoMCwyKSxuPTIsdD4yJiZCKGUuY2hhckNvZGVBdCgyKSkmJihpPSEwLG49MykpO2xldCBhPW48dD9sbihlLnNsaWNlKG4pLCFpLCJcXCIsQik6IiI7cmV0dXJuIGEubGVuZ3RoPT09MCYmIWkmJihhPSIuIiksYS5sZW5ndGg+MCYmQihlLmNoYXJDb2RlQXQodC0xKSkmJihhKz0iXFwiKSxyPT09dm9pZCAwP2k/YFxcJHthfWA6YTppP2Ake3J9XFwke2F9YDpgJHtyfSR7YX1gfSxpc0Fic29sdXRlKGUpe0soZSwicGF0aCIpO2NvbnN0IHQ9ZS5sZW5ndGg7aWYodD09PTApcmV0dXJuITE7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIEIobil8fHQ+MiYmSmUobikmJmUuY2hhckNvZGVBdCgxKT09PXplJiZCKGUuY2hhckNvZGVBdCgyKSl9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdCxuO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7KytzKXtjb25zdCBhPWVbc107SyhhLCJwYXRoIiksYS5sZW5ndGg+MCYmKHQ9PT12b2lkIDA/dD1uPWE6dCs9YFxcJHthfWApfWlmKHQ9PT12b2lkIDApcmV0dXJuIi4iO2xldCByPSEwLGk9MDtpZih0eXBlb2Ygbj09InN0cmluZyImJkIobi5jaGFyQ29kZUF0KDApKSl7KytpO2NvbnN0IHM9bi5sZW5ndGg7cz4xJiZCKG4uY2hhckNvZGVBdCgxKSkmJigrK2kscz4yJiYoQihuLmNoYXJDb2RlQXQoMikpPysraTpyPSExKSl9aWYocil7Zm9yKDtpPHQubGVuZ3RoJiZCKHQuY2hhckNvZGVBdChpKSk7KWkrKztpPj0yJiYodD1gXFwke3Quc2xpY2UoaSl9YCl9cmV0dXJuIGNlLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihLKGUsImZyb20iKSxLKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1jZS5yZXNvbHZlKGUpLHI9Y2UucmVzb2x2ZSh0KTtpZihuPT09cnx8KGU9bi50b0xvd2VyQ2FzZSgpLHQ9ci50b0xvd2VyQ2FzZSgpLGU9PT10KSlyZXR1cm4iIjtsZXQgaT0wO2Zvcig7aTxlLmxlbmd0aCYmZS5jaGFyQ29kZUF0KGkpPT09aGU7KWkrKztsZXQgcz1lLmxlbmd0aDtmb3IoO3MtMT5pJiZlLmNoYXJDb2RlQXQocy0xKT09PWhlOylzLS07Y29uc3QgYT1zLWk7bGV0IGw9MDtmb3IoO2w8dC5sZW5ndGgmJnQuY2hhckNvZGVBdChsKT09PWhlOylsKys7bGV0IG89dC5sZW5ndGg7Zm9yKDtvLTE+bCYmdC5jaGFyQ29kZUF0KG8tMSk9PT1oZTspby0tO2NvbnN0IHU9by1sLGg9YTx1P2E6dTtsZXQgYz0tMSxkPTA7Zm9yKDtkPGg7ZCsrKXtjb25zdCBnPWUuY2hhckNvZGVBdChpK2QpO2lmKGchPT10LmNoYXJDb2RlQXQobCtkKSlicmVhaztnPT09aGUmJihjPWQpfWlmKGQhPT1oKXtpZihjPT09LTEpcmV0dXJuIHJ9ZWxzZXtpZih1Pmgpe2lmKHQuY2hhckNvZGVBdChsK2QpPT09aGUpcmV0dXJuIHIuc2xpY2UobCtkKzEpO2lmKGQ9PT0yKXJldHVybiByLnNsaWNlKGwrZCl9YT5oJiYoZS5jaGFyQ29kZUF0KGkrZCk9PT1oZT9jPWQ6ZD09PTImJihjPTMpKSxjPT09LTEmJihjPTApfWxldCBtPSIiO2ZvcihkPWkrYysxO2Q8PXM7KytkKShkPT09c3x8ZS5jaGFyQ29kZUF0KGQpPT09aGUpJiYobSs9bS5sZW5ndGg9PT0wPyIuLiI6IlxcLi4iKTtyZXR1cm4gbCs9YyxtLmxlbmd0aD4wP2Ake219JHtyLnNsaWNlKGwsbyl9YDooci5jaGFyQ29kZUF0KGwpPT09aGUmJisrbCxyLnNsaWNlKGwsbykpfSx0b05hbWVzcGFjZWRQYXRoKGUpe2lmKHR5cGVvZiBlIT0ic3RyaW5nInx8ZS5sZW5ndGg9PT0wKXJldHVybiBlO2NvbnN0IHQ9Y2UucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1oZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09aGUpe2NvbnN0IG49dC5jaGFyQ29kZUF0KDIpO2lmKG4hPT1SbCYmbiE9PVdlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihKZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT16ZSYmdC5jaGFyQ29kZUF0KDIpPT09aGUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtLKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVybiIuIjtsZXQgbj0tMSxyPTA7Y29uc3QgaT1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIEIoaSk/ZToiLiI7aWYoQihpKSl7aWYobj1yPTEsQihlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbD0yLG89bDtmb3IoO2w8dCYmIUIoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PW8pe2ZvcihvPWw7bDx0JiZCKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPHQmJmwhPT1vKXtmb3Iobz1sO2w8dCYmIUIoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw9PT10KXJldHVybiBlO2whPT1vJiYobj1yPWwrMSl9fX19ZWxzZSBKZShpKSYmZS5jaGFyQ29kZUF0KDEpPT09emUmJihuPXQ+MiYmQihlLmNoYXJDb2RlQXQoMikpPzM6MixyPW4pO2xldCBzPS0xLGE9ITA7Zm9yKGxldCBsPXQtMTtsPj1yOy0tbClpZihCKGUuY2hhckNvZGVBdChsKSkpe2lmKCFhKXtzPWw7YnJlYWt9fWVsc2UgYT0hMTtpZihzPT09LTEpe2lmKG49PT0tMSlyZXR1cm4iLiI7cz1ufXJldHVybiBlLnNsaWNlKDAscyl9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmSyh0LCJzdWZmaXgiKSxLKGUsInBhdGgiKTtsZXQgbj0wLHI9LTEsaT0hMCxzO2lmKGUubGVuZ3RoPj0yJiZKZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT16ZSYmKG49MiksdCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgYT10Lmxlbmd0aC0xLGw9LTE7Zm9yKHM9ZS5sZW5ndGgtMTtzPj1uOy0tcyl7Y29uc3Qgbz1lLmNoYXJDb2RlQXQocyk7aWYoQihvKSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIGw9PT0tMSYmKGk9ITEsbD1zKzEpLGE+PTAmJihvPT09dC5jaGFyQ29kZUF0KGEpPy0tYT09PS0xJiYocj1zKTooYT0tMSxyPWwpKX1yZXR1cm4gbj09PXI/cj1sOnI9PT0tMSYmKHI9ZS5sZW5ndGgpLGUuc2xpY2UobixyKX1mb3Iocz1lLmxlbmd0aC0xO3M+PW47LS1zKWlmKEIoZS5jaGFyQ29kZUF0KHMpKSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIHI9PT0tMSYmKGk9ITEscj1zKzEpO3JldHVybiByPT09LTE/IiI6ZS5zbGljZShuLHIpfSxleHRuYW1lKGUpe0soZSwicGF0aCIpO2xldCB0PTAsbj0tMSxyPTAsaT0tMSxzPSEwLGE9MDtlLmxlbmd0aD49MiYmZS5jaGFyQ29kZUF0KDEpPT09emUmJkplKGUuY2hhckNvZGVBdCgwKSkmJih0PXI9Mik7Zm9yKGxldCBsPWUubGVuZ3RoLTE7bD49dDstLWwpe2NvbnN0IG89ZS5jaGFyQ29kZUF0KGwpO2lmKEIobykpe2lmKCFzKXtyPWwrMTticmVha31jb250aW51ZX1pPT09LTEmJihzPSExLGk9bCsxKSxvPT09V2U/bj09PS0xP249bDphIT09MSYmKGE9MSk6biE9PS0xJiYoYT0tMSl9cmV0dXJuIG49PT0tMXx8aT09PS0xfHxhPT09MHx8YT09PTEmJm49PT1pLTEmJm49PT1yKzE/IiI6ZS5zbGljZShuLGkpfSxmb3JtYXQ6dmkuYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe0soZSwicGF0aCIpO2NvbnN0IHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdDtjb25zdCBuPWUubGVuZ3RoO2xldCByPTAsaT1lLmNoYXJDb2RlQXQoMCk7aWYobj09PTEpcmV0dXJuIEIoaSk/KHQucm9vdD10LmRpcj1lLHQpOih0LmJhc2U9dC5uYW1lPWUsdCk7aWYoQihpKSl7aWYocj0xLEIoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGM9MixkPWM7Zm9yKDtjPG4mJiFCKGUuY2hhckNvZGVBdChjKSk7KWMrKztpZihjPG4mJmMhPT1kKXtmb3IoZD1jO2M8biYmQihlLmNoYXJDb2RlQXQoYykpOyljKys7aWYoYzxuJiZjIT09ZCl7Zm9yKGQ9YztjPG4mJiFCKGUuY2hhckNvZGVBdChjKSk7KWMrKztjPT09bj9yPWM6YyE9PWQmJihyPWMrMSl9fX19ZWxzZSBpZihKZShpKSYmZS5jaGFyQ29kZUF0KDEpPT09emUpe2lmKG48PTIpcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7aWYocj0yLEIoZS5jaGFyQ29kZUF0KDIpKSl7aWYobj09PTMpcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7cj0zfX1yPjAmJih0LnJvb3Q9ZS5zbGljZSgwLHIpKTtsZXQgcz0tMSxhPXIsbD0tMSxvPSEwLHU9ZS5sZW5ndGgtMSxoPTA7Zm9yKDt1Pj1yOy0tdSl7aWYoaT1lLmNoYXJDb2RlQXQodSksQihpKSl7aWYoIW8pe2E9dSsxO2JyZWFrfWNvbnRpbnVlfWw9PT0tMSYmKG89ITEsbD11KzEpLGk9PT1XZT9zPT09LTE/cz11OmghPT0xJiYoaD0xKTpzIT09LTEmJihoPS0xKX1yZXR1cm4gbCE9PS0xJiYocz09PS0xfHxoPT09MHx8aD09PTEmJnM9PT1sLTEmJnM9PT1hKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGEsbCk6KHQubmFtZT1lLnNsaWNlKGEscyksdC5iYXNlPWUuc2xpY2UoYSxsKSx0LmV4dD1lLnNsaWNlKHMsbCkpKSxhPjAmJmEhPT1yP3QuZGlyPWUuc2xpY2UoMCxhLTEpOnQuZGlyPXQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sVGw9KCgpPT57aWYoR2Upe2NvbnN0IGU9L1xcL2c7cmV0dXJuKCk9Pntjb25zdCB0PW9uKCkucmVwbGFjZShlLCIvIik7cmV0dXJuIHQuc2xpY2UodC5pbmRleE9mKCIvIikpfX1yZXR1cm4oKT0+b24oKX0pKCksZGU9e3Jlc29sdmUoLi4uZSl7bGV0IHQ9IiIsbj0hMTtmb3IobGV0IHI9ZS5sZW5ndGgtMTtyPj0tMSYmIW47ci0tKXtjb25zdCBpPXI+PTA/ZVtyXTpUbCgpO0soaSxgcGF0aHNbJHtyfV1gKSxpLmxlbmd0aCE9PTAmJih0PWAke2l9LyR7dH1gLG49aS5jaGFyQ29kZUF0KDApPT09YWUpfXJldHVybiB0PWxuKHQsIW4sIi8iLGVyKSxuP2AvJHt0fWA6dC5sZW5ndGg+MD90OiIuIn0sbm9ybWFsaXplKGUpe2lmKEsoZSwicGF0aCIpLGUubGVuZ3RoPT09MClyZXR1cm4iLiI7Y29uc3QgdD1lLmNoYXJDb2RlQXQoMCk9PT1hZSxuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PWFlO3JldHVybiBlPWxuKGUsIXQsIi8iLGVyKSxlLmxlbmd0aD09PTA/dD8iLyI6bj8iLi8iOiIuIjoobiYmKGUrPSIvIiksdD9gLyR7ZX1gOmUpfSxpc0Fic29sdXRlKGUpe3JldHVybiBLKGUsInBhdGgiKSxlLmxlbmd0aD4wJiZlLmNoYXJDb2RlQXQoMCk9PT1hZX0sam9pbiguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIi4iO2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7KytuKXtjb25zdCByPWVbbl07SyhyLCJwYXRoIiksci5sZW5ndGg+MCYmKHQ9PT12b2lkIDA/dD1yOnQrPWAvJHtyfWApfXJldHVybiB0PT09dm9pZCAwPyIuIjpkZS5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoSyhlLCJmcm9tIiksSyh0LCJ0byIpLGU9PT10fHwoZT1kZS5yZXNvbHZlKGUpLHQ9ZGUucmVzb2x2ZSh0KSxlPT09dCkpcmV0dXJuIiI7Y29uc3Qgbj0xLHI9ZS5sZW5ndGgsaT1yLW4scz0xLGE9dC5sZW5ndGgtcyxsPWk8YT9pOmE7bGV0IG89LTEsdT0wO2Zvcig7dTxsO3UrKyl7Y29uc3QgYz1lLmNoYXJDb2RlQXQobit1KTtpZihjIT09dC5jaGFyQ29kZUF0KHMrdSkpYnJlYWs7Yz09PWFlJiYobz11KX1pZih1PT09bClpZihhPmwpe2lmKHQuY2hhckNvZGVBdChzK3UpPT09YWUpcmV0dXJuIHQuc2xpY2Uocyt1KzEpO2lmKHU9PT0wKXJldHVybiB0LnNsaWNlKHMrdSl9ZWxzZSBpPmwmJihlLmNoYXJDb2RlQXQobit1KT09PWFlP289dTp1PT09MCYmKG89MCkpO2xldCBoPSIiO2Zvcih1PW4rbysxO3U8PXI7Kyt1KSh1PT09cnx8ZS5jaGFyQ29kZUF0KHUpPT09YWUpJiYoaCs9aC5sZW5ndGg9PT0wPyIuLiI6Ii8uLiIpO3JldHVybmAke2h9JHt0LnNsaWNlKHMrbyl9YH0sdG9OYW1lc3BhY2VkUGF0aChlKXtyZXR1cm4gZX0sZGlybmFtZShlKXtpZihLKGUsInBhdGgiKSxlLmxlbmd0aD09PTApcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09YWU7bGV0IG49LTEscj0hMDtmb3IobGV0IGk9ZS5sZW5ndGgtMTtpPj0xOy0taSlpZihlLmNoYXJDb2RlQXQoaSk9PT1hZSl7aWYoIXIpe249aTticmVha319ZWxzZSByPSExO3JldHVybiBuPT09LTE/dD8iLyI6Ii4iOnQmJm49PT0xPyIvLyI6ZS5zbGljZSgwLG4pfSxiYXNlbmFtZShlLHQpe3QhPT12b2lkIDAmJksodCwiZXh0IiksSyhlLCJwYXRoIik7bGV0IG49MCxyPS0xLGk9ITAscztpZih0IT09dm9pZCAwJiZ0Lmxlbmd0aD4wJiZ0Lmxlbmd0aDw9ZS5sZW5ndGgpe2lmKHQ9PT1lKXJldHVybiIiO2xldCBhPXQubGVuZ3RoLTEsbD0tMTtmb3Iocz1lLmxlbmd0aC0xO3M+PTA7LS1zKXtjb25zdCBvPWUuY2hhckNvZGVBdChzKTtpZihvPT09YWUpe2lmKCFpKXtuPXMrMTticmVha319ZWxzZSBsPT09LTEmJihpPSExLGw9cysxKSxhPj0wJiYobz09PXQuY2hhckNvZGVBdChhKT8tLWE9PT0tMSYmKHI9cyk6KGE9LTEscj1sKSl9cmV0dXJuIG49PT1yP3I9bDpyPT09LTEmJihyPWUubGVuZ3RoKSxlLnNsaWNlKG4scil9Zm9yKHM9ZS5sZW5ndGgtMTtzPj0wOy0tcylpZihlLmNoYXJDb2RlQXQocyk9PT1hZSl7aWYoIWkpe249cysxO2JyZWFrfX1lbHNlIHI9PT0tMSYmKGk9ITEscj1zKzEpO3JldHVybiByPT09LTE/IiI6ZS5zbGljZShuLHIpfSxleHRuYW1lKGUpe0soZSwicGF0aCIpO2xldCB0PS0xLG49MCxyPS0xLGk9ITAscz0wO2ZvcihsZXQgYT1lLmxlbmd0aC0xO2E+PTA7LS1hKXtjb25zdCBsPWUuY2hhckNvZGVBdChhKTtpZihsPT09YWUpe2lmKCFpKXtuPWErMTticmVha31jb250aW51ZX1yPT09LTEmJihpPSExLHI9YSsxKSxsPT09V2U/dD09PS0xP3Q9YTpzIT09MSYmKHM9MSk6dCE9PS0xJiYocz0tMSl9cmV0dXJuIHQ9PT0tMXx8cj09PS0xfHxzPT09MHx8cz09PTEmJnQ9PT1yLTEmJnQ9PT1uKzE/IiI6ZS5zbGljZSh0LHIpfSxmb3JtYXQ6dmkuYmluZChudWxsLCIvIikscGFyc2UoZSl7SyhlLCJwYXRoIik7Y29uc3QgdD17cm9vdDoiIixkaXI6IiIsYmFzZToiIixleHQ6IiIsbmFtZToiIn07aWYoZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApPT09YWU7bGV0IHI7bj8odC5yb290PSIvIixyPTEpOnI9MDtsZXQgaT0tMSxzPTAsYT0tMSxsPSEwLG89ZS5sZW5ndGgtMSx1PTA7Zm9yKDtvPj1yOy0tbyl7Y29uc3QgaD1lLmNoYXJDb2RlQXQobyk7aWYoaD09PWFlKXtpZighbCl7cz1vKzE7YnJlYWt9Y29udGludWV9YT09PS0xJiYobD0hMSxhPW8rMSksaD09PVdlP2k9PT0tMT9pPW86dSE9PTEmJih1PTEpOmkhPT0tMSYmKHU9LTEpfWlmKGEhPT0tMSl7Y29uc3QgaD1zPT09MCYmbj8xOnM7aT09PS0xfHx1PT09MHx8dT09PTEmJmk9PT1hLTEmJmk9PT1zKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKGgsYSk6KHQubmFtZT1lLnNsaWNlKGgsaSksdC5iYXNlPWUuc2xpY2UoaCxhKSx0LmV4dD1lLnNsaWNlKGksYSkpfXJldHVybiBzPjA/dC5kaXI9ZS5zbGljZSgwLHMtMSk6biYmKHQuZGlyPSIvIiksdH0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07ZGUud2luMzI9Y2Uud2luMzI9Y2UsZGUucG9zaXg9Y2UucG9zaXg9ZGUsR2U/Y2Uubm9ybWFsaXplOmRlLm5vcm1hbGl6ZSxHZT9jZS5yZXNvbHZlOmRlLnJlc29sdmUsR2U/Y2UucmVsYXRpdmU6ZGUucmVsYXRpdmUsR2U/Y2UuZGlybmFtZTpkZS5kaXJuYW1lLEdlP2NlLmJhc2VuYW1lOmRlLmJhc2VuYW1lLEdlP2NlLmV4dG5hbWU6ZGUuZXh0bmFtZSxHZT9jZS5zZXA6ZGUuc2VwO2NvbnN0IFBsPS9eXHdbXHdcZCsuLV0qJC8sSWw9L15cLy8sRmw9L15cL1wvLztmdW5jdGlvbiBWbChlLHQpe2lmKCFlLnNjaGVtZSYmdCl0aHJvdyBuZXcgRXJyb3IoYFtVcmlFcnJvcl06IFNjaGVtZSBpcyBtaXNzaW5nOiB7c2NoZW1lOiAiIiwgYXV0aG9yaXR5OiAiJHtlLmF1dGhvcml0eX0iLCBwYXRoOiAiJHtlLnBhdGh9IiwgcXVlcnk6ICIke2UucXVlcnl9IiwgZnJhZ21lbnQ6ICIke2UuZnJhZ21lbnR9In1gKTtpZihlLnNjaGVtZSYmIVBsLnRlc3QoZS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihlLnBhdGgpe2lmKGUuYXV0aG9yaXR5KXtpZighSWwudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgY29udGFpbnMgYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjb21wb25lbnQgbXVzdCBlaXRoZXIgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpIGNoYXJhY3RlcicpfWVsc2UgaWYoRmwudGVzdChlLnBhdGgpKXRocm93IG5ldyBFcnJvcignW1VyaUVycm9yXTogSWYgYSBVUkkgZG9lcyBub3QgY29udGFpbiBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNhbm5vdCBiZWdpbiB3aXRoIHR3byBzbGFzaCBjaGFyYWN0ZXJzICgiLy8iKScpfX1mdW5jdGlvbiBEbChlLHQpe3JldHVybiFlJiYhdD8iZmlsZSI6ZX1mdW5jdGlvbiBPbChlLHQpe3N3aXRjaChlKXtjYXNlImh0dHBzIjpjYXNlImh0dHAiOmNhc2UiZmlsZSI6dD90WzBdIT09TmUmJih0PU5lK3QpOnQ9TmU7YnJlYWt9cmV0dXJuIHR9Y29uc3QgSj0iIixOZT0iLyIsQmw9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy87bGV0IHRyPWNsYXNzIEJue3N0YXRpYyBpc1VyaSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIEJuPyEwOnQ/dHlwZW9mIHQuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIHQuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2YgdC5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2YgdC5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2YgdC5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2YgdC53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgdC50b1N0cmluZz09ImZ1bmN0aW9uIjohMX1jb25zdHJ1Y3Rvcih0LG4scixpLHMsYT0hMSl7dHlwZW9mIHQ9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT10LnNjaGVtZXx8Six0aGlzLmF1dGhvcml0eT10LmF1dGhvcml0eXx8Six0aGlzLnBhdGg9dC5wYXRofHxKLHRoaXMucXVlcnk9dC5xdWVyeXx8Six0aGlzLmZyYWdtZW50PXQuZnJhZ21lbnR8fEopOih0aGlzLnNjaGVtZT1EbCh0LGEpLHRoaXMuYXV0aG9yaXR5PW58fEosdGhpcy5wYXRoPU9sKHRoaXMuc2NoZW1lLHJ8fEopLHRoaXMucXVlcnk9aXx8Six0aGlzLmZyYWdtZW50PXN8fEosVmwodGhpcyxhKSl9Z2V0IGZzUGF0aCgpe3JldHVybiBucih0aGlzLCExKX13aXRoKHQpe2lmKCF0KXJldHVybiB0aGlzO2xldHtzY2hlbWU6bixhdXRob3JpdHk6cixwYXRoOmkscXVlcnk6cyxmcmFnbWVudDphfT10O3JldHVybiBuPT09dm9pZCAwP249dGhpcy5zY2hlbWU6bj09PW51bGwmJihuPUopLHI9PT12b2lkIDA/cj10aGlzLmF1dGhvcml0eTpyPT09bnVsbCYmKHI9SiksaT09PXZvaWQgMD9pPXRoaXMucGF0aDppPT09bnVsbCYmKGk9Sikscz09PXZvaWQgMD9zPXRoaXMucXVlcnk6cz09PW51bGwmJihzPUopLGE9PT12b2lkIDA/YT10aGlzLmZyYWdtZW50OmE9PT1udWxsJiYoYT1KKSxuPT09dGhpcy5zY2hlbWUmJnI9PT10aGlzLmF1dGhvcml0eSYmaT09PXRoaXMucGF0aCYmcz09PXRoaXMucXVlcnkmJmE9PT10aGlzLmZyYWdtZW50P3RoaXM6bmV3IHB0KG4scixpLHMsYSl9c3RhdGljIHBhcnNlKHQsbj0hMSl7Y29uc3Qgcj1CbC5leGVjKHQpO3JldHVybiByP25ldyBwdChyWzJdfHxKLHVuKHJbNF18fEopLHVuKHJbNV18fEopLHVuKHJbN118fEopLHVuKHJbOV18fEopLG4pOm5ldyBwdChKLEosSixKLEopfXN0YXRpYyBmaWxlKHQpe2xldCBuPUo7aWYoVnQmJih0PXQucmVwbGFjZSgvXFwvZyxOZSkpLHRbMF09PT1OZSYmdFsxXT09PU5lKXtjb25zdCByPXQuaW5kZXhPZihOZSwyKTtyPT09LTE/KG49dC5zdWJzdHJpbmcoMiksdD1OZSk6KG49dC5zdWJzdHJpbmcoMixyKSx0PXQuc3Vic3RyaW5nKHIpfHxOZSl9cmV0dXJuIG5ldyBwdCgiZmlsZSIsbix0LEosSil9c3RhdGljIGZyb20odCxuKXtyZXR1cm4gbmV3IHB0KHQuc2NoZW1lLHQuYXV0aG9yaXR5LHQucGF0aCx0LnF1ZXJ5LHQuZnJhZ21lbnQsbil9c3RhdGljIGpvaW5QYXRoKHQsLi4ubil7aWYoIXQucGF0aCl0aHJvdyBuZXcgRXJyb3IoIltVcmlFcnJvcl06IGNhbm5vdCBjYWxsIGpvaW5QYXRoIG9uIFVSSSB3aXRob3V0IHBhdGgiKTtsZXQgcjtyZXR1cm4gVnQmJnQuc2NoZW1lPT09ImZpbGUiP3I9Qm4uZmlsZShjZS5qb2luKG5yKHQsITApLC4uLm4pKS5wYXRoOnI9ZGUuam9pbih0LnBhdGgsLi4ubiksdC53aXRoKHtwYXRoOnJ9KX10b1N0cmluZyh0PSExKXtyZXR1cm4gcnIodGhpcyx0KX10b0pTT04oKXtyZXR1cm4gdGhpc31zdGF0aWMgcmV2aXZlKHQpe2lmKHQpe2lmKHQgaW5zdGFuY2VvZiBCbilyZXR1cm4gdDt7Y29uc3Qgbj1uZXcgcHQodCk7cmV0dXJuIG4uX2Zvcm1hdHRlZD10LmV4dGVybmFsPz9udWxsLG4uX2ZzUGF0aD10Ll9zZXA9PT14aT90LmZzUGF0aD8/bnVsbDpudWxsLG59fWVsc2UgcmV0dXJuIHR9fTtjb25zdCB4aT1WdD8xOnZvaWQgMDtjbGFzcyBwdCBleHRlbmRzIHRye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb3JtYXR0ZWQ9bnVsbCx0aGlzLl9mc1BhdGg9bnVsbH1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1ucih0aGlzLCExKSksdGhpcy5fZnNQYXRofXRvU3RyaW5nKHQ9ITEpe3JldHVybiB0P3JyKHRoaXMsITApOih0aGlzLl9mb3JtYXR0ZWR8fCh0aGlzLl9mb3JtYXR0ZWQ9cnIodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgdD17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYodC5mc1BhdGg9dGhpcy5fZnNQYXRoLHQuX3NlcD14aSksdGhpcy5fZm9ybWF0dGVkJiYodC5leHRlcm5hbD10aGlzLl9mb3JtYXR0ZWQpLHRoaXMucGF0aCYmKHQucGF0aD10aGlzLnBhdGgpLHRoaXMuc2NoZW1lJiYodC5zY2hlbWU9dGhpcy5zY2hlbWUpLHRoaXMuYXV0aG9yaXR5JiYodC5hdXRob3JpdHk9dGhpcy5hdXRob3JpdHkpLHRoaXMucXVlcnkmJih0LnF1ZXJ5PXRoaXMucXVlcnkpLHRoaXMuZnJhZ21lbnQmJih0LmZyYWdtZW50PXRoaXMuZnJhZ21lbnQpLHR9fWNvbnN0IHlpPXs1ODoiJTNBIiw0NzoiJTJGIiw2MzoiJTNGIiwzNToiJTIzIiw5MToiJTVCIiw5MzoiJTVEIiw2NDoiJTQwIiwzMzoiJTIxIiwzNjoiJTI0IiwzODoiJTI2IiwzOToiJTI3Iiw0MDoiJTI4Iiw0MToiJTI5Iiw0MjoiJTJBIiw0MzoiJTJCIiw0NDoiJTJDIiw1OToiJTNCIiw2MToiJTNEIiwzMjoiJTIwIn07ZnVuY3Rpb24gd2koZSx0LG4pe2xldCByLGk9LTE7Zm9yKGxldCBzPTA7czxlLmxlbmd0aDtzKyspe2NvbnN0IGE9ZS5jaGFyQ29kZUF0KHMpO2lmKGE+PTk3JiZhPD0xMjJ8fGE+PTY1JiZhPD05MHx8YT49NDgmJmE8PTU3fHxhPT09NDV8fGE9PT00Nnx8YT09PTk1fHxhPT09MTI2fHx0JiZhPT09NDd8fG4mJmE9PT05MXx8biYmYT09PTkzfHxuJiZhPT09NTgpaSE9PS0xJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKGkscykpLGk9LTEpLHIhPT12b2lkIDAmJihyKz1lLmNoYXJBdChzKSk7ZWxzZXtyPT09dm9pZCAwJiYocj1lLnN1YnN0cigwLHMpKTtjb25zdCBsPXlpW2FdO2whPT12b2lkIDA/KGkhPT0tMSYmKHIrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhpLHMpKSxpPS0xKSxyKz1sKTppPT09LTEmJihpPXMpfX1yZXR1cm4gaSE9PS0xJiYocis9ZW5jb2RlVVJJQ29tcG9uZW50KGUuc3Vic3RyaW5nKGkpKSksciE9PXZvaWQgMD9yOmV9ZnVuY3Rpb24gVWwoZSl7bGV0IHQ7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4pO3I9PT0zNXx8cj09PTYzPyh0PT09dm9pZCAwJiYodD1lLnN1YnN0cigwLG4pKSx0Kz15aVtyXSk6dCE9PXZvaWQgMCYmKHQrPWVbbl0pfXJldHVybiB0IT09dm9pZCAwP3Q6ZX1mdW5jdGlvbiBucihlLHQpe2xldCBuO3JldHVybiBlLmF1dGhvcml0eSYmZS5wYXRoLmxlbmd0aD4xJiZlLnNjaGVtZT09PSJmaWxlIj9uPWAvLyR7ZS5hdXRob3JpdHl9JHtlLnBhdGh9YDplLnBhdGguY2hhckNvZGVBdCgwKT09PTQ3JiYoZS5wYXRoLmNoYXJDb2RlQXQoMSk+PTY1JiZlLnBhdGguY2hhckNvZGVBdCgxKTw9OTB8fGUucGF0aC5jaGFyQ29kZUF0KDEpPj05NyYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTEyMikmJmUucGF0aC5jaGFyQ29kZUF0KDIpPT09NTg/dD9uPWUucGF0aC5zdWJzdHIoMSk6bj1lLnBhdGhbMV0udG9Mb3dlckNhc2UoKStlLnBhdGguc3Vic3RyKDIpOm49ZS5wYXRoLFZ0JiYobj1uLnJlcGxhY2UoL1wvL2csIlxcIikpLG59ZnVuY3Rpb24gcnIoZSx0KXtjb25zdCBuPXQ/VWw6d2k7bGV0IHI9IiIse3NjaGVtZTppLGF1dGhvcml0eTpzLHBhdGg6YSxxdWVyeTpsLGZyYWdtZW50Om99PWU7aWYoaSYmKHIrPWkscis9IjoiKSwoc3x8aT09PSJmaWxlIikmJihyKz1OZSxyKz1OZSkscyl7bGV0IHU9cy5pbmRleE9mKCJAIik7aWYodSE9PS0xKXtjb25zdCBoPXMuc3Vic3RyKDAsdSk7cz1zLnN1YnN0cih1KzEpLHU9aC5sYXN0SW5kZXhPZigiOiIpLHU9PT0tMT9yKz1uKGgsITEsITEpOihyKz1uKGguc3Vic3RyKDAsdSksITEsITEpLHIrPSI6IixyKz1uKGguc3Vic3RyKHUrMSksITEsITApKSxyKz0iQCJ9cz1zLnRvTG93ZXJDYXNlKCksdT1zLmxhc3RJbmRleE9mKCI6IiksdT09PS0xP3IrPW4ocywhMSwhMCk6KHIrPW4ocy5zdWJzdHIoMCx1KSwhMSwhMCkscis9cy5zdWJzdHIodSkpfWlmKGEpe2lmKGEubGVuZ3RoPj0zJiZhLmNoYXJDb2RlQXQoMCk9PT00NyYmYS5jaGFyQ29kZUF0KDIpPT09NTgpe2NvbnN0IHU9YS5jaGFyQ29kZUF0KDEpO3U+PTY1JiZ1PD05MCYmKGE9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUodSszMil9OiR7YS5zdWJzdHIoMyl9YCl9ZWxzZSBpZihhLmxlbmd0aD49MiYmYS5jaGFyQ29kZUF0KDEpPT09NTgpe2NvbnN0IHU9YS5jaGFyQ29kZUF0KDApO3U+PTY1JiZ1PD05MCYmKGE9YCR7U3RyaW5nLmZyb21DaGFyQ29kZSh1KzMyKX06JHthLnN1YnN0cigyKX1gKX1yKz1uKGEsITAsITEpfXJldHVybiBsJiYocis9Ij8iLHIrPW4obCwhMSwhMSkpLG8mJihyKz0iIyIscis9dD9vOndpKG8sITEsITEpKSxyfWZ1bmN0aW9uIF9pKGUpe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfWNhdGNoe3JldHVybiBlLmxlbmd0aD4zP2Uuc3Vic3RyKDAsMykrX2koZS5zdWJzdHIoMykpOmV9fWNvbnN0IExpPS8oJVswLTlBLVphLXpdWzAtOUEtWmEtel0pKy9nO2Z1bmN0aW9uIHVuKGUpe3JldHVybiBlLm1hdGNoKExpKT9lLnJlcGxhY2UoTGksdD0+X2kodCkpOmV9bGV0IGVlPWNsYXNzIHV0e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5saW5lTnVtYmVyPXQsdGhpcy5jb2x1bW49bn13aXRoKHQ9dGhpcy5saW5lTnVtYmVyLG49dGhpcy5jb2x1bW4pe3JldHVybiB0PT09dGhpcy5saW5lTnVtYmVyJiZuPT09dGhpcy5jb2x1bW4/dGhpczpuZXcgdXQodCxuKX1kZWx0YSh0PTAsbj0wKXtyZXR1cm4gdGhpcy53aXRoKHRoaXMubGluZU51bWJlcit0LHRoaXMuY29sdW1uK24pfWVxdWFscyh0KXtyZXR1cm4gdXQuZXF1YWxzKHRoaXMsdCl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5saW5lTnVtYmVyPT09bi5saW5lTnVtYmVyJiZ0LmNvbHVtbj09PW4uY29sdW1ufWlzQmVmb3JlKHQpe3JldHVybiB1dC5pc0JlZm9yZSh0aGlzLHQpfXN0YXRpYyBpc0JlZm9yZSh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI8bi5saW5lTnVtYmVyPyEwOm4ubGluZU51bWJlcjx0LmxpbmVOdW1iZXI/ITE6dC5jb2x1bW48bi5jb2x1bW59aXNCZWZvcmVPckVxdWFsKHQpe3JldHVybiB1dC5pc0JlZm9yZU9yRXF1YWwodGhpcyx0KX1zdGF0aWMgaXNCZWZvcmVPckVxdWFsKHQsbil7cmV0dXJuIHQubGluZU51bWJlcjxuLmxpbmVOdW1iZXI/ITA6bi5saW5lTnVtYmVyPHQubGluZU51bWJlcj8hMTp0LmNvbHVtbjw9bi5jb2x1bW59c3RhdGljIGNvbXBhcmUodCxuKXtjb25zdCByPXQubGluZU51bWJlcnwwLGk9bi5saW5lTnVtYmVyfDA7aWYocj09PWkpe2NvbnN0IHM9dC5jb2x1bW58MCxhPW4uY29sdW1ufDA7cmV0dXJuIHMtYX1yZXR1cm4gci1pfWNsb25lKCl7cmV0dXJuIG5ldyB1dCh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KHQpe3JldHVybiBuZXcgdXQodC5saW5lTnVtYmVyLHQuY29sdW1uKX1zdGF0aWMgaXNJUG9zaXRpb24odCl7cmV0dXJuIHQmJnR5cGVvZiB0LmxpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5jb2x1bW49PSJudW1iZXIifXRvSlNPTigpe3JldHVybntsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW46dGhpcy5jb2x1bW59fX0sVz1jbGFzcyBuZXtjb25zdHJ1Y3Rvcih0LG4scixpKXt0PnJ8fHQ9PT1yJiZuPmk/KHRoaXMuc3RhcnRMaW5lTnVtYmVyPXIsdGhpcy5zdGFydENvbHVtbj1pLHRoaXMuZW5kTGluZU51bWJlcj10LHRoaXMuZW5kQ29sdW1uPW4pOih0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuc3RhcnRDb2x1bW49bix0aGlzLmVuZExpbmVOdW1iZXI9cix0aGlzLmVuZENvbHVtbj1pKX1pc0VtcHR5KCl7cmV0dXJuIG5lLmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkodCl7cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbih0KXtyZXR1cm4gbmUuY29udGFpbnNQb3NpdGlvbih0aGlzLHQpfXN0YXRpYyBjb250YWluc1Bvc2l0aW9uKHQsbil7cmV0dXJuIShuLmxpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmNvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmxpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uY29sdW1uPnQuZW5kQ29sdW1uKX1zdGF0aWMgc3RyaWN0Q29udGFpbnNQb3NpdGlvbih0LG4pe3JldHVybiEobi5saW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI+dC5lbmRMaW5lTnVtYmVyfHxuLmxpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5jb2x1bW48PXQuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5jb2x1bW4+PXQuZW5kQ29sdW1uKX1jb250YWluc1JhbmdlKHQpe3JldHVybiBuZS5jb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjx0LnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPnQuZW5kQ29sdW1uKX1zdHJpY3RDb250YWluc1JhbmdlKHQpe3JldHVybiBuZS5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj49dC5lbmRDb2x1bW4pfXBsdXNSYW5nZSh0KXtyZXR1cm4gbmUucGx1c1JhbmdlKHRoaXMsdCl9c3RhdGljIHBsdXNSYW5nZSh0LG4pe2xldCByLGkscyxhO3JldHVybiBuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcj8ocj1uLnN0YXJ0TGluZU51bWJlcixpPW4uc3RhcnRDb2x1bW4pOm4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXI/KHI9bi5zdGFydExpbmVOdW1iZXIsaT1NYXRoLm1pbihuLnN0YXJ0Q29sdW1uLHQuc3RhcnRDb2x1bW4pKToocj10LnN0YXJ0TGluZU51bWJlcixpPXQuc3RhcnRDb2x1bW4pLG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXI/KHM9bi5lbmRMaW5lTnVtYmVyLGE9bi5lbmRDb2x1bW4pOm4uZW5kTGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcj8ocz1uLmVuZExpbmVOdW1iZXIsYT1NYXRoLm1heChuLmVuZENvbHVtbix0LmVuZENvbHVtbikpOihzPXQuZW5kTGluZU51bWJlcixhPXQuZW5kQ29sdW1uKSxuZXcgbmUocixpLHMsYSl9aW50ZXJzZWN0UmFuZ2VzKHQpe3JldHVybiBuZS5pbnRlcnNlY3RSYW5nZXModGhpcyx0KX1zdGF0aWMgaW50ZXJzZWN0UmFuZ2VzKHQsbil7bGV0IHI9dC5zdGFydExpbmVOdW1iZXIsaT10LnN0YXJ0Q29sdW1uLHM9dC5lbmRMaW5lTnVtYmVyLGE9dC5lbmRDb2x1bW47Y29uc3QgbD1uLnN0YXJ0TGluZU51bWJlcixvPW4uc3RhcnRDb2x1bW4sdT1uLmVuZExpbmVOdW1iZXIsaD1uLmVuZENvbHVtbjtyZXR1cm4gcjxsPyhyPWwsaT1vKTpyPT09bCYmKGk9TWF0aC5tYXgoaSxvKSkscz51PyhzPXUsYT1oKTpzPT09dSYmKGE9TWF0aC5taW4oYSxoKSkscj5zfHxyPT09cyYmaT5hP251bGw6bmV3IG5lKHIsaSxzLGEpfWVxdWFsc1JhbmdlKHQpe3JldHVybiBuZS5lcXVhbHNSYW5nZSh0aGlzLHQpfXN0YXRpYyBlcXVhbHNSYW5nZSh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlciYmdC5zdGFydENvbHVtbj09PW4uc3RhcnRDb2x1bW4mJnQuZW5kTGluZU51bWJlcj09PW4uZW5kTGluZU51bWJlciYmdC5lbmRDb2x1bW49PT1uLmVuZENvbHVtbn1nZXRFbmRQb3NpdGlvbigpe3JldHVybiBuZS5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24odCl7cmV0dXJuIG5ldyBlZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pfWdldFN0YXJ0UG9zaXRpb24oKXtyZXR1cm4gbmUuZ2V0U3RhcnRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0U3RhcnRQb3NpdGlvbih0KXtyZXR1cm4gbmV3IGVlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgbmUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pfXNldFN0YXJ0UG9zaXRpb24odCxuKXtyZXR1cm4gbmV3IG5lKHQsbix0aGlzLmVuZExpbmVOdW1iZXIsdGhpcy5lbmRDb2x1bW4pfWNvbGxhcHNlVG9TdGFydCgpe3JldHVybiBuZS5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydCh0KXtyZXR1cm4gbmV3IG5lKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9Y29sbGFwc2VUb0VuZCgpe3JldHVybiBuZS5jb2xsYXBzZVRvRW5kKHRoaXMpfXN0YXRpYyBjb2xsYXBzZVRvRW5kKHQpe3JldHVybiBuZXcgbmUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9ZGVsdGEodCl7cmV0dXJuIG5ldyBuZSh0aGlzLnN0YXJ0TGluZU51bWJlcit0LHRoaXMuc3RhcnRDb2x1bW4sdGhpcy5lbmRMaW5lTnVtYmVyK3QsdGhpcy5lbmRDb2x1bW4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IG5lKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBsaWZ0KHQpe3JldHVybiB0P25ldyBuZSh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UodCl7cmV0dXJuIHQmJnR5cGVvZiB0LnN0YXJ0TGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnN0YXJ0Q29sdW1uPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmVuZENvbHVtbj09Im51bWJlciJ9c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPG4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPD1uLnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyh0LG4pe2lmKHQmJm4pe2NvbnN0IHM9dC5zdGFydExpbmVOdW1iZXJ8MCxhPW4uc3RhcnRMaW5lTnVtYmVyfDA7aWYocz09PWEpe2NvbnN0IGw9dC5zdGFydENvbHVtbnwwLG89bi5zdGFydENvbHVtbnwwO2lmKGw9PT1vKXtjb25zdCB1PXQuZW5kTGluZU51bWJlcnwwLGg9bi5lbmRMaW5lTnVtYmVyfDA7aWYodT09PWgpe2NvbnN0IGM9dC5lbmRDb2x1bW58MCxkPW4uZW5kQ29sdW1ufDA7cmV0dXJuIGMtZH1yZXR1cm4gdS1ofXJldHVybiBsLW99cmV0dXJuIHMtYX1yZXR1cm4odD8xOjApLShuPzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHModCxuKXtyZXR1cm4gdC5lbmRMaW5lTnVtYmVyPT09bi5lbmRMaW5lTnVtYmVyP3QuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW4/dC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlcj90LnN0YXJ0Q29sdW1uLW4uc3RhcnRDb2x1bW46dC5zdGFydExpbmVOdW1iZXItbi5zdGFydExpbmVOdW1iZXI6dC5lbmRDb2x1bW4tbi5lbmRDb2x1bW46dC5lbmRMaW5lTnVtYmVyLW4uZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKHQpe3JldHVybiB0LmVuZExpbmVOdW1iZXI+dC5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fTtmdW5jdGlvbiBxbChlLHQsbj0ocixpKT0+cj09PWkpe2lmKGU9PT10KXJldHVybiEwO2lmKCFlfHwhdHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspaWYoIW4oZVtyXSx0W3JdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiokbChlLHQpe2xldCBuLHI7Zm9yKGNvbnN0IGkgb2YgZSlyIT09dm9pZCAwJiZ0KHIsaSk/bi5wdXNoKGkpOihuJiYoeWllbGQgbiksbj1baV0pLHI9aTtuJiYoeWllbGQgbil9ZnVuY3Rpb24gamwoZSx0KXtmb3IobGV0IG49MDtuPD1lLmxlbmd0aDtuKyspdChuPT09MD92b2lkIDA6ZVtuLTFdLG49PT1lLmxlbmd0aD92b2lkIDA6ZVtuXSl9ZnVuY3Rpb24gSGwoZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sZVtuXSxuKzE9PT1lLmxlbmd0aD92b2lkIDA6ZVtuKzFdKX1mdW5jdGlvbiBXbChlLHQpe2Zvcihjb25zdCBuIG9mIHQpZS5wdXNoKG4pfXZhciBpcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChzKXtyZXR1cm4gczwwfWUuaXNMZXNzVGhhbj10O2Z1bmN0aW9uIG4ocyl7cmV0dXJuIHM8PTB9ZS5pc0xlc3NUaGFuT3JFcXVhbD1uO2Z1bmN0aW9uIHIocyl7cmV0dXJuIHM+MH1lLmlzR3JlYXRlclRoYW49cjtmdW5jdGlvbiBpKHMpe3JldHVybiBzPT09MH1lLmlzTmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPWksZS5ncmVhdGVyVGhhbj0xLGUubGVzc1RoYW49LTEsZS5uZWl0aGVyTGVzc09yR3JlYXRlclRoYW49MH0pKGlyfHwoaXI9e30pKTtmdW5jdGlvbiBjbihlLHQpe3JldHVybihuLHIpPT50KGUobiksZShyKSl9Y29uc3QgZm49KGUsdCk9PmUtdDtmdW5jdGlvbiB6bChlKXtyZXR1cm4odCxuKT0+LWUodCxuKX1jb25zdCBQdD1jbGFzcyBQdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLml0ZXJhdGU9dH10b0FycmF5KCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5pdGVyYXRlKG49Pih0LnB1c2gobiksITApKSx0fWZpbHRlcih0KXtyZXR1cm4gbmV3IFB0KG49PnRoaXMuaXRlcmF0ZShyPT50KHIpP24ocik6ITApKX1tYXAodCl7cmV0dXJuIG5ldyBQdChuPT50aGlzLml0ZXJhdGUocj0+bih0KHIpKSkpfWZpbmRMYXN0KHQpe2xldCBuO3JldHVybiB0aGlzLml0ZXJhdGUocj0+KHQocikmJihuPXIpLCEwKSksbn1maW5kTGFzdE1heEJ5KHQpe2xldCBuLHI9ITA7cmV0dXJuIHRoaXMuaXRlcmF0ZShpPT4oKHJ8fGlyLmlzR3JlYXRlclRoYW4odChpLG4pKSkmJihyPSExLG49aSksITApKSxufX07UHQuZW1wdHk9bmV3IFB0KHQ9Pnt9KTtsZXQgTmk9UHQ7ZnVuY3Rpb24gU2koZSl7cmV0dXJuIGU8MD8wOmU+MjU1PzI1NTplfDB9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIGU8MD8wOmU+NDI5NDk2NzI5NT80Mjk0OTY3Mjk1OmV8MH1jbGFzcyBHbHtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlcz10LHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0Lmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXModCxuKXt0PWJ0KHQpO2NvbnN0IHI9dGhpcy52YWx1ZXMsaT10aGlzLnByZWZpeFN1bSxzPW4ubGVuZ3RoO3JldHVybiBzPT09MD8hMToodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoK3MpLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KDAsdCksMCksdGhpcy52YWx1ZXMuc2V0KHIuc3ViYXJyYXkodCksdCtzKSx0aGlzLnZhbHVlcy5zZXQobix0KSx0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoaS5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKHQsbil7cmV0dXJuIHQ9YnQodCksbj1idChuKSx0aGlzLnZhbHVlc1t0XT09PW4/ITE6KHRoaXMudmFsdWVzW3RdPW4sdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLCEwKX1yZW1vdmVWYWx1ZXModCxuKXt0PWJ0KHQpLG49YnQobik7Y29uc3Qgcj10aGlzLnZhbHVlcyxpPXRoaXMucHJlZml4U3VtO2lmKHQ+PXIubGVuZ3RoKXJldHVybiExO2NvbnN0IHM9ci5sZW5ndGgtdDtyZXR1cm4gbj49cyYmKG49cyksbj09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShyLmxlbmd0aC1uKSx0aGlzLnZhbHVlcy5zZXQoci5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChyLnN1YmFycmF5KHQrbiksdCksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KGkuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg9PT0wPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0odCl7cmV0dXJuIHQ8MD8wOih0PWJ0KHQpLHRoaXMuX2dldFByZWZpeFN1bSh0KSl9X2dldFByZWZpeFN1bSh0KXtpZih0PD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW3RdO2xldCBuPXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxO249PT0wJiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sbisrKSx0Pj10aGlzLnZhbHVlcy5sZW5ndGgmJih0PXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IHI9bjtyPD10O3IrKyl0aGlzLnByZWZpeFN1bVtyXT10aGlzLnByZWZpeFN1bVtyLTFdK3RoaXMudmFsdWVzW3JdO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLHQpLHRoaXMucHJlZml4U3VtW3RdfWdldEluZGV4T2YodCl7dD1NYXRoLmZsb29yKHQpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgbj0wLHI9dGhpcy52YWx1ZXMubGVuZ3RoLTEsaT0wLHM9MCxhPTA7Zm9yKDtuPD1yOylpZihpPW4rKHItbikvMnwwLHM9dGhpcy5wcmVmaXhTdW1baV0sYT1zLXRoaXMudmFsdWVzW2ldLHQ8YSlyPWktMTtlbHNlIGlmKHQ+PXMpbj1pKzE7ZWxzZSBicmVhaztyZXR1cm4gbmV3IEpsKGksdC1hKX19Y2xhc3MgSmx7Y29uc3RydWN0b3IodCxuKXt0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bix0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9dCx0aGlzLnJlbWFpbmRlcj1ufX1jbGFzcyBYbHtjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLl91cmk9dCx0aGlzLl9saW5lcz1uLHRoaXMuX2VvbD1yLHRoaXMuX3ZlcnNpb25JZD1pLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gdGhpcy5fY2FjaGVkVGV4dFZhbHVlPT09bnVsbCYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyh0KXt0LmVvbCYmdC5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9dC5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtjb25zdCBuPXQuY2hhbmdlcztmb3IoY29uc3QgciBvZiBuKXRoaXMuX2FjY2VwdERlbGV0ZVJhbmdlKHIucmFuZ2UpLHRoaXMuX2FjY2VwdEluc2VydFRleHQobmV3IGVlKHIucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHIucmFuZ2Uuc3RhcnRDb2x1bW4pLHIudGV4dCk7dGhpcy5fdmVyc2lvbklkPXQudmVyc2lvbklkLHRoaXMuX2NhY2hlZFRleHRWYWx1ZT1udWxsfV9lbnN1cmVMaW5lU3RhcnRzKCl7aWYoIXRoaXMuX2xpbmVTdGFydHMpe2NvbnN0IHQ9dGhpcy5fZW9sLmxlbmd0aCxuPXRoaXMuX2xpbmVzLmxlbmd0aCxyPW5ldyBVaW50MzJBcnJheShuKTtmb3IobGV0IGk9MDtpPG47aSsrKXJbaV09dGhpcy5fbGluZXNbaV0ubGVuZ3RoK3Q7dGhpcy5fbGluZVN0YXJ0cz1uZXcgR2wocil9fV9zZXRMaW5lVGV4dCh0LG4pe3RoaXMuX2xpbmVzW3RdPW4sdGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5zZXRWYWx1ZSh0LHRoaXMuX2xpbmVzW3RdLmxlbmd0aCt0aGlzLl9lb2wubGVuZ3RoKX1fYWNjZXB0RGVsZXRlUmFuZ2UodCl7aWYodC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXIpe2lmKHQuc3RhcnRDb2x1bW49PT10LmVuZENvbHVtbilyZXR1cm47dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmVuZENvbHVtbi0xKSk7cmV0dXJufXRoaXMuX3NldExpbmVUZXh0KHQuc3RhcnRMaW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5zdGFydENvbHVtbi0xKSt0aGlzLl9saW5lc1t0LmVuZExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKSx0aGlzLl9saW5lcy5zcGxpY2UodC5zdGFydExpbmVOdW1iZXIsdC5lbmRMaW5lTnVtYmVyLXQuc3RhcnRMaW5lTnVtYmVyKSx0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnJlbW92ZVZhbHVlcyh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpfV9hY2NlcHRJbnNlcnRUZXh0KHQsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybjtjb25zdCByPWFsKG4pO2lmKHIubGVuZ3RoPT09MSl7dGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0rdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSk7cmV0dXJufXJbci5sZW5ndGgtMV0rPXRoaXMuX2xpbmVzW3QubGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5jb2x1bW4tMSksdGhpcy5fc2V0TGluZVRleHQodC5saW5lTnVtYmVyLTEsdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuY29sdW1uLTEpK3JbMF0pO2NvbnN0IGk9bmV3IFVpbnQzMkFycmF5KHIubGVuZ3RoLTEpO2ZvcihsZXQgcz0xO3M8ci5sZW5ndGg7cysrKXRoaXMuX2xpbmVzLnNwbGljZSh0LmxpbmVOdW1iZXIrcy0xLDAscltzXSksaVtzLTFdPXJbc10ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGg7dGhpcy5fbGluZVN0YXJ0cyYmdGhpcy5fbGluZVN0YXJ0cy5pbnNlcnRWYWx1ZXModC5saW5lTnVtYmVyLGkpfX1jb25zdCBRbD0iYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLC48Pi8/IjtmdW5jdGlvbiBabChlPSIiKXtsZXQgdD0iKC0/XFxkKlxcLlxcZFxcdyopfChbXiI7Zm9yKGNvbnN0IG4gb2YgUWwpZS5pbmRleE9mKG4pPj0wfHwodCs9IlxcIituKTtyZXR1cm4gdCs9Ilxcc10rKSIsbmV3IFJlZ0V4cCh0LCJnIil9Y29uc3QgQWk9WmwoKTtmdW5jdGlvbiBraShlKXtsZXQgdD1BaTtpZihlJiZlIGluc3RhbmNlb2YgUmVnRXhwKWlmKGUuZ2xvYmFsKXQ9ZTtlbHNle2xldCBuPSJnIjtlLmlnbm9yZUNhc2UmJihuKz0iaSIpLGUubXVsdGlsaW5lJiYobis9Im0iKSxlLnVuaWNvZGUmJihuKz0idSIpLHQ9bmV3IFJlZ0V4cChlLnNvdXJjZSxuKX1yZXR1cm4gdC5sYXN0SW5kZXg9MCx0fWNvbnN0IEVpPW5ldyBCbztFaS51bnNoaWZ0KHttYXhMZW46MWUzLHdpbmRvd1NpemU6MTUsdGltZUJ1ZGdldDoxNTB9KTtmdW5jdGlvbiBzcihlLHQsbixyLGkpe2lmKHQ9a2kodCksaXx8KGk9dG4uZmlyc3QoRWkpKSxuLmxlbmd0aD5pLm1heExlbil7bGV0IHU9ZS1pLm1heExlbi8yO3JldHVybiB1PDA/dT0wOnIrPXUsbj1uLnN1YnN0cmluZyh1LGUraS5tYXhMZW4vMiksc3IoZSx0LG4scixpKX1jb25zdCBzPURhdGUubm93KCksYT1lLTEtcjtsZXQgbD0tMSxvPW51bGw7Zm9yKGxldCB1PTE7IShEYXRlLm5vdygpLXM+PWkudGltZUJ1ZGdldCk7dSsrKXtjb25zdCBoPWEtaS53aW5kb3dTaXplKnU7dC5sYXN0SW5kZXg9TWF0aC5tYXgoMCxoKTtjb25zdCBjPVlsKHQsbixhLGwpO2lmKCFjJiZvfHwobz1jLGg8PTApKWJyZWFrO2w9aH1pZihvKXtjb25zdCB1PXt3b3JkOm9bMF0sc3RhcnRDb2x1bW46cisxK28uaW5kZXgsZW5kQ29sdW1uOnIrMStvLmluZGV4K29bMF0ubGVuZ3RofTtyZXR1cm4gdC5sYXN0SW5kZXg9MCx1fXJldHVybiBudWxsfWZ1bmN0aW9uIFlsKGUsdCxuLHIpe2xldCBpO2Zvcig7aT1lLmV4ZWModCk7KXtjb25zdCBzPWkuaW5kZXh8fDA7aWYoczw9biYmZS5sYXN0SW5kZXg+PW4pcmV0dXJuIGk7aWYocj4wJiZzPnIpcmV0dXJuIG51bGx9cmV0dXJuIG51bGx9Y2xhc3MgYXJ7Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1TaSh0KTt0aGlzLl9kZWZhdWx0VmFsdWU9bix0aGlzLl9hc2NpaU1hcD1hci5fY3JlYXRlQXNjaWlNYXAobiksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcCh0KXtjb25zdCBuPW5ldyBVaW50OEFycmF5KDI1Nik7cmV0dXJuIG4uZmlsbCh0KSxufXNldCh0LG4pe2NvbnN0IHI9U2kobik7dD49MCYmdDwyNTY/dGhpcy5fYXNjaWlNYXBbdF09cjp0aGlzLl9tYXAuc2V0KHQscil9Z2V0KHQpe3JldHVybiB0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XTp0aGlzLl9tYXAuZ2V0KHQpfHx0aGlzLl9kZWZhdWx0VmFsdWV9Y2xlYXIoKXt0aGlzLl9hc2NpaU1hcC5maWxsKHRoaXMuX2RlZmF1bHRWYWx1ZSksdGhpcy5fbWFwLmNsZWFyKCl9fWNsYXNzIEtse2NvbnN0cnVjdG9yKHQsbixyKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KHQqbik7Zm9yKGxldCBzPTAsYT10Km47czxhO3MrKylpW3NdPXI7dGhpcy5fZGF0YT1pLHRoaXMucm93cz10LHRoaXMuY29scz1ufWdldCh0LG4pe3JldHVybiB0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dfXNldCh0LG4scil7dGhpcy5fZGF0YVt0KnRoaXMuY29scytuXT1yfX1jbGFzcyBldXtjb25zdHJ1Y3Rvcih0KXtsZXQgbj0wLHI9MDtmb3IobGV0IHM9MCxhPXQubGVuZ3RoO3M8YTtzKyspe2NvbnN0W2wsbyx1XT10W3NdO28+biYmKG49byksbD5yJiYocj1sKSx1PnImJihyPXUpfW4rKyxyKys7Y29uc3QgaT1uZXcgS2wocixuLDApO2ZvcihsZXQgcz0wLGE9dC5sZW5ndGg7czxhO3MrKyl7Y29uc3RbbCxvLHVdPXRbc107aS5zZXQobCxvLHUpfXRoaXMuX3N0YXRlcz1pLHRoaXMuX21heENoYXJDb2RlPW59bmV4dFN0YXRlKHQsbil7cmV0dXJuIG48MHx8bj49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KHQsbil9fWxldCBvcj1udWxsO2Z1bmN0aW9uIHR1KCl7cmV0dXJuIG9yPT09bnVsbCYmKG9yPW5ldyBldShbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksb3J9bGV0IFV0PW51bGw7ZnVuY3Rpb24gbnUoKXtpZihVdD09PW51bGwpe1V0PW5ldyBhcigwKTtjb25zdCBlPWAgCTw+JyLjgIHjgILvvaHvvaTvvIzvvI7vvJrvvJvigJjjgIjjgIzjgI7jgJTvvIjvvLvvvZvvvaLvvaPvvZ3vvL3vvInjgJXjgI/jgI3jgInigJnvvYDvvZ7igKZgO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKVV0LnNldChlLmNoYXJDb2RlQXQobiksMSk7Y29uc3QgdD0iLiw7OiI7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspVXQuc2V0KHQuY2hhckNvZGVBdChuKSwyKX1yZXR1cm4gVXR9Y2xhc3MgaG57c3RhdGljIF9jcmVhdGVMaW5rKHQsbixyLGkscyl7bGV0IGE9cy0xO2Rve2NvbnN0IGw9bi5jaGFyQ29kZUF0KGEpO2lmKHQuZ2V0KGwpIT09MilicmVhazthLS19d2hpbGUoYT5pKTtpZihpPjApe2NvbnN0IGw9bi5jaGFyQ29kZUF0KGktMSksbz1uLmNoYXJDb2RlQXQoYSk7KGw9PT00MCYmbz09PTQxfHxsPT09OTEmJm89PT05M3x8bD09PTEyMyYmbz09PTEyNSkmJmEtLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpyLHN0YXJ0Q29sdW1uOmkrMSxlbmRMaW5lTnVtYmVyOnIsZW5kQ29sdW1uOmErMn0sdXJsOm4uc3Vic3RyaW5nKGksYSsxKX19c3RhdGljIGNvbXB1dGVMaW5rcyh0LG49dHUoKSl7Y29uc3Qgcj1udSgpLGk9W107Zm9yKGxldCBzPTEsYT10LmdldExpbmVDb3VudCgpO3M8PWE7cysrKXtjb25zdCBsPXQuZ2V0TGluZUNvbnRlbnQocyksbz1sLmxlbmd0aDtsZXQgdT0wLGg9MCxjPTAsZD0xLG09ITEsZz0hMSxwPSExLHY9ITE7Zm9yKDt1PG87KXtsZXQgXz0hMTtjb25zdCBOPWwuY2hhckNvZGVBdCh1KTtpZihkPT09MTMpe2xldCB4O3N3aXRjaChOKXtjYXNlIDQwOm09ITAseD0wO2JyZWFrO2Nhc2UgNDE6eD1tPzA6MTticmVhaztjYXNlIDkxOnA9ITAsZz0hMCx4PTA7YnJlYWs7Y2FzZSA5MzpwPSExLHg9Zz8wOjE7YnJlYWs7Y2FzZSAxMjM6dj0hMCx4PTA7YnJlYWs7Y2FzZSAxMjU6eD12PzA6MTticmVhaztjYXNlIDM5OmNhc2UgMzQ6Y2FzZSA5NjpjPT09Tj94PTE6Yz09PTM5fHxjPT09MzR8fGM9PT05Nj94PTA6eD0xO2JyZWFrO2Nhc2UgNDI6eD1jPT09NDI/MTowO2JyZWFrO2Nhc2UgMTI0Ong9Yz09PTEyND8xOjA7YnJlYWs7Y2FzZSAzMjp4PXA/MDoxO2JyZWFrO2RlZmF1bHQ6eD1yLmdldChOKX14PT09MSYmKGkucHVzaChobi5fY3JlYXRlTGluayhyLGwscyxoLHUpKSxfPSEwKX1lbHNlIGlmKGQ9PT0xMil7bGV0IHg7Tj09PTkxPyhnPSEwLHg9MCk6eD1yLmdldChOKSx4PT09MT9fPSEwOmQ9MTN9ZWxzZSBkPW4ubmV4dFN0YXRlKGQsTiksZD09PTAmJihfPSEwKTtfJiYoZD0xLG09ITEsZz0hMSx2PSExLGg9dSsxLGM9TiksdSsrfWQ9PT0xMyYmaS5wdXNoKGhuLl9jcmVhdGVMaW5rKHIsbCxzLGgsbykpfXJldHVybiBpfX1mdW5jdGlvbiBydShlKXtyZXR1cm4hZXx8dHlwZW9mIGUuZ2V0TGluZUNvdW50IT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5nZXRMaW5lQ29udGVudCE9ImZ1bmN0aW9uIj9bXTpobi5jb21wdXRlTGlua3MoZSl9Y29uc3QgSW49Y2xhc3MgSW57Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldCh0LG4scixpLHMpe2lmKHQmJm4pe2NvbnN0IGE9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQobixzKTtpZihhKXJldHVybntyYW5nZTp0LHZhbHVlOmF9fWlmKHImJmkpe2NvbnN0IGE9dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQoaSxzKTtpZihhKXJldHVybntyYW5nZTpyLHZhbHVlOmF9fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldCh0LG4pe2NvbnN0IHI9dGhpcy5udW1iZXJSZXBsYWNlKHQsbik7cmV0dXJuIHIhPT1udWxsP3I6dGhpcy50ZXh0UmVwbGFjZSh0LG4pfW51bWJlclJlcGxhY2UodCxuKXtjb25zdCByPU1hdGgucG93KDEwLHQubGVuZ3RoLSh0Lmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCBpPU51bWJlcih0KTtjb25zdCBzPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKGkpJiYhaXNOYU4ocykmJmk9PT1zP2k9PT0wJiYhbj9udWxsOihpPU1hdGguZmxvb3IoaSpyKSxpKz1uP3I6LXIsU3RyaW5nKGkvcikpOm51bGx9dGV4dFJlcGxhY2UodCxuKXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCx0LG4pfXZhbHVlU2V0c1JlcGxhY2UodCxuLHIpe2xldCBpPW51bGw7Zm9yKGxldCBzPTAsYT10Lmxlbmd0aDtpPT09bnVsbCYmczxhO3MrKylpPXRoaXMudmFsdWVTZXRSZXBsYWNlKHRbc10sbixyKTtyZXR1cm4gaX12YWx1ZVNldFJlcGxhY2UodCxuLHIpe2xldCBpPXQuaW5kZXhPZihuKTtyZXR1cm4gaT49MD8oaSs9cj8xOi0xLGk8MD9pPXQubGVuZ3RoLTE6aSU9dC5sZW5ndGgsdFtpXSk6bnVsbH19O0luLklOU1RBTkNFPW5ldyBJbjtsZXQgbHI9SW47Y29uc3QgUmk9T2JqZWN0LmZyZWV6ZShmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pO3ZhciBkbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj09PWUuTm9uZXx8bj09PWUuQ2FuY2VsbGVkfHxuIGluc3RhbmNlb2YgbW4/ITA6IW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD09ImJvb2xlYW4iJiZ0eXBlb2Ygbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZD09ImZ1bmN0aW9uIn1lLmlzQ2FuY2VsbGF0aW9uVG9rZW49dCxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6cW4uTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOlJpfSl9KShkbnx8KGRuPXt9KSk7Y2xhc3MgbW57Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP1JpOih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgTGUpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgaXV7Y29uc3RydWN0b3IodCl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj10JiZ0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBtbiksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBtbiYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49ZG4uQ2FuY2VsbGVkfWRpc3Bvc2UodD0hMSl7dCYmdGhpcy5jYW5jZWwoKSx0aGlzLl9wYXJlbnRMaXN0ZW5lcj8uZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgbW4mJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj1kbi5Ob25lfX1jbGFzcyB1cntjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUodCxuKXt0aGlzLl9rZXlDb2RlVG9TdHJbdF09bix0aGlzLl9zdHJUb0tleUNvZGVbbi50b0xvd2VyQ2FzZSgpXT10fWtleUNvZGVUb1N0cih0KXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW3RdfXN0clRvS2V5Q29kZSh0KXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IGduPW5ldyB1cixjcj1uZXcgdXIsZnI9bmV3IHVyLHN1PW5ldyBBcnJheSgyMzApLGF1PU9iamVjdC5jcmVhdGUobnVsbCksb3U9T2JqZWN0LmNyZWF0ZShudWxsKTsoZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1sxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFsxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFsxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFsxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFswLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFswLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFswLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFswLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFswLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFswLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFswLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFswLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFswLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFswLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFswLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFswLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFsxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFswLDUxLCJNaW51cyIsODgsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFswLDUyLCJFcXVhbCIsODYsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbMCw1MywiQnJhY2tldExlZnQiLDkyLCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzAsNTQsIkJyYWNrZXRSaWdodCIsOTQsIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbMCw1NSwiQmFja3NsYXNoIiw5MywiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzAsNTcsIlNlbWljb2xvbiIsODUsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbMCw1OCwiUXVvdGUiLDk1LCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzAsNTksIkJhY2txdW90ZSIsOTEsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbMCw2MCwiQ29tbWEiLDg3LCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbMCw2MSwiUGVyaW9kIiw4OSwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbMCw2MiwiU2xhc2giLDkwLCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzEsNzcsIlNjcm9sbExvY2siLDg0LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFsxLDg5LCJOdW1Mb2NrIiw4MywiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxLDkwLCJOdW1wYWREaXZpZGUiLDExMywiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDgsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMSw5MiwiTnVtcGFkU3VidHJhY3QiLDExMSwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxLDkzLCJOdW1wYWRBZGQiLDEwOSwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzEsOTUsIk51bXBhZDEiLDk5LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbMSw5NiwiTnVtcGFkMiIsMTAwLCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbMSw5NywiTnVtcGFkMyIsMTAxLCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbMSw5OCwiTnVtcGFkNCIsMTAyLCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzEsOTksIk51bXBhZDUiLDEwMywiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFsxLDEwMCwiTnVtcGFkNiIsMTA0LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEsMTAxLCJOdW1wYWQ3IiwxMDUsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMSwxMDIsIk51bXBhZDgiLDEwNiwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxLDEwMywiTnVtcGFkOSIsMTA3LCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzEsMTA0LCJOdW1wYWQwIiw5OCwiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMTIsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzAsMTA2LCJJbnRsQmFja3NsYXNoIiw5NywiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFsxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFsxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFsxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFsxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFsxLDExNywiRjIwIiw3OCwiRjIwIiwxMzEsIlZLX0YyMCIsZSxlXSxbMSwxMTgsIkYyMSIsNzksIkYyMSIsMTMyLCJWS19GMjEiLGUsZV0sWzEsMTE5LCJGMjIiLDgwLCJGMjIiLDEzMywiVktfRjIyIixlLGVdLFsxLDEyMCwiRjIzIiw4MSwiRjIzIiwxMzQsIlZLX0YyMyIsZSxlXSxbMSwxMjEsIkYyNCIsODIsIkYyNCIsMTM1LCJWS19GMjQiLGUsZV0sWzEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExNywiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFsxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTE4LCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE5LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEsMTM0LCJOdW1wYWRDb21tYSIsMTEwLCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMCwxMzUsIkludGxSbyIsMTE1LCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFsxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFsxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFsxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFsxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFsxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFsxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFsxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFsxLDE1NSwiTnVtcGFkQ2xlYXIiLDEzMSwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzEsMCxlLDU3LCJNZXRhIiw5MSwiVktfQ09NTUFORCIsZSxlXSxbMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFsxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFsxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFsxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFsxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFsxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMjQsIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyNSwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzEsMTczLCJNZWRpYVN0b3AiLDEyNiwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyNywiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjgsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzEsMTc3LCJMYXVuY2hNYWlsIiwxMjksIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzEsMTc4LCJMYXVuY2hBcHAyIiwxMzAsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFsxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTIwLCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFsxLDE4MywiQnJvd3NlckhvbWUiLDEyMSwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxLDE4NCwiQnJvd3NlckJhY2siLDEyMiwiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxLDE4NSwiQnJvd3NlckZvcndhcmQiLDEyMywiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFsxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFsxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEsMCxlLDExNCwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMSwwLGUsMTE2LCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzEsMCxlLDk2LCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLHI9W107Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3RbcyxhLGwsbyx1LGgsYyxkLG1dPWk7aWYoclthXXx8KHJbYV09ITAsYXVbbF09YSxvdVtsLnRvTG93ZXJDYXNlKCldPWEpLCFuW29dKXtpZihuW29dPSEwLCF1KXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7b30gYXJvdW5kIHNjYW4gY29kZSAke2x9YCk7Z24uZGVmaW5lKG8sdSksY3IuZGVmaW5lKG8sZHx8dSksZnIuZGVmaW5lKG8sbXx8ZHx8dSl9aCYmKHN1W2hdPW8pfX0pKCk7dmFyIE1pOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGwpe3JldHVybiBnbi5rZXlDb2RlVG9TdHIobCl9ZS50b1N0cmluZz10O2Z1bmN0aW9uIG4obCl7cmV0dXJuIGduLnN0clRvS2V5Q29kZShsKX1lLmZyb21TdHJpbmc9bjtmdW5jdGlvbiByKGwpe3JldHVybiBjci5rZXlDb2RlVG9TdHIobCl9ZS50b1VzZXJTZXR0aW5nc1VTPXI7ZnVuY3Rpb24gaShsKXtyZXR1cm4gZnIua2V5Q29kZVRvU3RyKGwpfWUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPWk7ZnVuY3Rpb24gcyhsKXtyZXR1cm4gY3Iuc3RyVG9LZXlDb2RlKGwpfHxmci5zdHJUb0tleUNvZGUobCl9ZS5mcm9tVXNlclNldHRpbmdzPXM7ZnVuY3Rpb24gYShsKXtpZihsPj05OCYmbDw9MTEzKXJldHVybiBudWxsO3N3aXRjaChsKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBnbi5rZXlDb2RlVG9TdHIobCl9ZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9YX0pKE1pfHwoTWk9e30pKTtmdW5jdGlvbiBsdShlLHQpe2NvbnN0IG49KHQmNjU1MzUpPDwxNj4+PjA7cmV0dXJuKGV8bik+Pj4wfWNsYXNzIHBlIGV4dGVuZHMgV3tjb25zdHJ1Y3Rvcih0LG4scixpKXtzdXBlcih0LG4scixpKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj10LHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49bix0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1yLHRoaXMucG9zaXRpb25Db2x1bW49aX10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbih0KXtyZXR1cm4gcGUuc2VsZWN0aW9uc0VxdWFsKHRoaXMsdCl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbCh0LG4pe3JldHVybiB0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PW4uc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZ0LnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09bi5zZWxlY3Rpb25TdGFydENvbHVtbiYmdC5wb3NpdGlvbkxpbmVOdW1iZXI9PT1uLnBvc2l0aW9uTGluZU51bWJlciYmdC5wb3NpdGlvbkNvbHVtbj09PW4ucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgcGUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pOm5ldyBwZSh0LG4sdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IGVlKHRoaXMucG9zaXRpb25MaW5lTnVtYmVyLHRoaXMucG9zaXRpb25Db2x1bW4pfWdldFNlbGVjdGlvblN0YXJ0KCl7cmV0dXJuIG5ldyBlZSh0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0aGlzLnNlbGVjdGlvblN0YXJ0Q29sdW1uKX1zZXRTdGFydFBvc2l0aW9uKHQsbil7cmV0dXJuIHRoaXMuZ2V0RGlyZWN0aW9uKCk9PT0wP25ldyBwZSh0LG4sdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKTpuZXcgcGUodGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uLHQsbil9c3RhdGljIGZyb21Qb3NpdGlvbnModCxuPXQpe3JldHVybiBuZXcgcGUodC5saW5lTnVtYmVyLHQuY29sdW1uLG4ubGluZU51bWJlcixuLmNvbHVtbil9c3RhdGljIGZyb21SYW5nZSh0LG4pe3JldHVybiBuPT09MD9uZXcgcGUodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4pOm5ldyBwZSh0LmVuZExpbmVOdW1iZXIsdC5lbmRDb2x1bW4sdC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbil9c3RhdGljIGxpZnRTZWxlY3Rpb24odCl7cmV0dXJuIG5ldyBwZSh0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcix0LnNlbGVjdGlvblN0YXJ0Q29sdW1uLHQucG9zaXRpb25MaW5lTnVtYmVyLHQucG9zaXRpb25Db2x1bW4pfXN0YXRpYyBzZWxlY3Rpb25zQXJyRXF1YWwodCxuKXtpZih0JiYhbnx8IXQmJm4pcmV0dXJuITE7aWYoIXQmJiFuKXJldHVybiEwO2lmKHQubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCByPTAsaT10Lmxlbmd0aDtyPGk7cisrKWlmKCF0aGlzLnNlbGVjdGlvbnNFcXVhbCh0W3JdLG5bcl0pKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBpc0lTZWxlY3Rpb24odCl7cmV0dXJuIHQmJnR5cGVvZiB0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnNlbGVjdGlvblN0YXJ0Q29sdW1uPT0ibnVtYmVyIiYmdHlwZW9mIHQucG9zaXRpb25MaW5lTnVtYmVyPT0ibnVtYmVyIiYmdHlwZW9mIHQucG9zaXRpb25Db2x1bW49PSJudW1iZXIifXN0YXRpYyBjcmVhdGVXaXRoRGlyZWN0aW9uKHQsbixyLGkscyl7cmV0dXJuIHM9PT0wP25ldyBwZSh0LG4scixpKTpuZXcgcGUocixpLHQsbil9fWNvbnN0IENpPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gZihlLHQpe2lmKHpvKHQpKXtjb25zdCBuPUNpW3RdO2lmKG49PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGAke2V9IHJlZmVyZW5jZXMgYW4gdW5rbm93biBjb2RpY29uOiAke3R9YCk7dD1ufXJldHVybiBDaVtlXT10LHtpZDplfX1jb25zdCB1dT17YWRkOmYoImFkZCIsNmU0KSxwbHVzOmYoInBsdXMiLDZlNCksZ2lzdE5ldzpmKCJnaXN0LW5ldyIsNmU0KSxyZXBvQ3JlYXRlOmYoInJlcG8tY3JlYXRlIiw2ZTQpLGxpZ2h0YnVsYjpmKCJsaWdodGJ1bGIiLDYwMDAxKSxsaWdodEJ1bGI6ZigibGlnaHQtYnVsYiIsNjAwMDEpLHJlcG86ZigicmVwbyIsNjAwMDIpLHJlcG9EZWxldGU6ZigicmVwby1kZWxldGUiLDYwMDAyKSxnaXN0Rm9yazpmKCJnaXN0LWZvcmsiLDYwMDAzKSxyZXBvRm9ya2VkOmYoInJlcG8tZm9ya2VkIiw2MDAwMyksZ2l0UHVsbFJlcXVlc3Q6ZigiZ2l0LXB1bGwtcmVxdWVzdCIsNjAwMDQpLGdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkOmYoImdpdC1wdWxsLXJlcXVlc3QtYWJhbmRvbmVkIiw2MDAwNCkscmVjb3JkS2V5czpmKCJyZWNvcmQta2V5cyIsNjAwMDUpLGtleWJvYXJkOmYoImtleWJvYXJkIiw2MDAwNSksdGFnOmYoInRhZyIsNjAwMDYpLGdpdFB1bGxSZXF1ZXN0TGFiZWw6ZigiZ2l0LXB1bGwtcmVxdWVzdC1sYWJlbCIsNjAwMDYpLHRhZ0FkZDpmKCJ0YWctYWRkIiw2MDAwNiksdGFnUmVtb3ZlOmYoInRhZy1yZW1vdmUiLDYwMDA2KSxwZXJzb246ZigicGVyc29uIiw2MDAwNykscGVyc29uRm9sbG93OmYoInBlcnNvbi1mb2xsb3ciLDYwMDA3KSxwZXJzb25PdXRsaW5lOmYoInBlcnNvbi1vdXRsaW5lIiw2MDAwNykscGVyc29uRmlsbGVkOmYoInBlcnNvbi1maWxsZWQiLDYwMDA3KSxnaXRCcmFuY2g6ZigiZ2l0LWJyYW5jaCIsNjAwMDgpLGdpdEJyYW5jaENyZWF0ZTpmKCJnaXQtYnJhbmNoLWNyZWF0ZSIsNjAwMDgpLGdpdEJyYW5jaERlbGV0ZTpmKCJnaXQtYnJhbmNoLWRlbGV0ZSIsNjAwMDgpLHNvdXJjZUNvbnRyb2w6Zigic291cmNlLWNvbnRyb2wiLDYwMDA4KSxtaXJyb3I6ZigibWlycm9yIiw2MDAwOSksbWlycm9yUHVibGljOmYoIm1pcnJvci1wdWJsaWMiLDYwMDA5KSxzdGFyOmYoInN0YXIiLDYwMDEwKSxzdGFyQWRkOmYoInN0YXItYWRkIiw2MDAxMCksc3RhckRlbGV0ZTpmKCJzdGFyLWRlbGV0ZSIsNjAwMTApLHN0YXJFbXB0eTpmKCJzdGFyLWVtcHR5Iiw2MDAxMCksY29tbWVudDpmKCJjb21tZW50Iiw2MDAxMSksY29tbWVudEFkZDpmKCJjb21tZW50LWFkZCIsNjAwMTEpLGFsZXJ0OmYoImFsZXJ0Iiw2MDAxMiksd2FybmluZzpmKCJ3YXJuaW5nIiw2MDAxMiksc2VhcmNoOmYoInNlYXJjaCIsNjAwMTMpLHNlYXJjaFNhdmU6Zigic2VhcmNoLXNhdmUiLDYwMDEzKSxsb2dPdXQ6ZigibG9nLW91dCIsNjAwMTQpLHNpZ25PdXQ6Zigic2lnbi1vdXQiLDYwMDE0KSxsb2dJbjpmKCJsb2ctaW4iLDYwMDE1KSxzaWduSW46Zigic2lnbi1pbiIsNjAwMTUpLGV5ZTpmKCJleWUiLDYwMDE2KSxleWVVbndhdGNoOmYoImV5ZS11bndhdGNoIiw2MDAxNiksZXllV2F0Y2g6ZigiZXllLXdhdGNoIiw2MDAxNiksY2lyY2xlRmlsbGVkOmYoImNpcmNsZS1maWxsZWQiLDYwMDE3KSxwcmltaXRpdmVEb3Q6ZigicHJpbWl0aXZlLWRvdCIsNjAwMTcpLGNsb3NlRGlydHk6ZigiY2xvc2UtZGlydHkiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnQ6ZigiZGVidWctYnJlYWtwb2ludCIsNjAwMTcpLGRlYnVnQnJlYWtwb2ludERpc2FibGVkOmYoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLDYwMDE3KSxkZWJ1Z0hpbnQ6ZigiZGVidWctaGludCIsNjAwMTcpLHRlcm1pbmFsRGVjb3JhdGlvblN1Y2Nlc3M6ZigidGVybWluYWwtZGVjb3JhdGlvbi1zdWNjZXNzIiw2MDAxNykscHJpbWl0aXZlU3F1YXJlOmYoInByaW1pdGl2ZS1zcXVhcmUiLDYwMDE4KSxlZGl0OmYoImVkaXQiLDYwMDE5KSxwZW5jaWw6ZigicGVuY2lsIiw2MDAxOSksaW5mbzpmKCJpbmZvIiw2MDAyMCksaXNzdWVPcGVuZWQ6ZigiaXNzdWUtb3BlbmVkIiw2MDAyMCksZ2lzdFByaXZhdGU6ZigiZ2lzdC1wcml2YXRlIiw2MDAyMSksZ2l0Rm9ya1ByaXZhdGU6ZigiZ2l0LWZvcmstcHJpdmF0ZSIsNjAwMjEpLGxvY2s6ZigibG9jayIsNjAwMjEpLG1pcnJvclByaXZhdGU6ZigibWlycm9yLXByaXZhdGUiLDYwMDIxKSxjbG9zZTpmKCJjbG9zZSIsNjAwMjIpLHJlbW92ZUNsb3NlOmYoInJlbW92ZS1jbG9zZSIsNjAwMjIpLHg6ZigieCIsNjAwMjIpLHJlcG9TeW5jOmYoInJlcG8tc3luYyIsNjAwMjMpLHN5bmM6Zigic3luYyIsNjAwMjMpLGNsb25lOmYoImNsb25lIiw2MDAyNCksZGVza3RvcERvd25sb2FkOmYoImRlc2t0b3AtZG93bmxvYWQiLDYwMDI0KSxiZWFrZXI6ZigiYmVha2VyIiw2MDAyNSksbWljcm9zY29wZTpmKCJtaWNyb3Njb3BlIiw2MDAyNSksdm06Zigidm0iLDYwMDI2KSxkZXZpY2VEZXNrdG9wOmYoImRldmljZS1kZXNrdG9wIiw2MDAyNiksZmlsZTpmKCJmaWxlIiw2MDAyNyksZmlsZVRleHQ6ZigiZmlsZS10ZXh0Iiw2MDAyNyksbW9yZTpmKCJtb3JlIiw2MDAyOCksZWxsaXBzaXM6ZigiZWxsaXBzaXMiLDYwMDI4KSxrZWJhYkhvcml6b250YWw6Zigia2ViYWItaG9yaXpvbnRhbCIsNjAwMjgpLG1haWxSZXBseTpmKCJtYWlsLXJlcGx5Iiw2MDAyOSkscmVwbHk6ZigicmVwbHkiLDYwMDI5KSxvcmdhbml6YXRpb246Zigib3JnYW5pemF0aW9uIiw2MDAzMCksb3JnYW5pemF0aW9uRmlsbGVkOmYoIm9yZ2FuaXphdGlvbi1maWxsZWQiLDYwMDMwKSxvcmdhbml6YXRpb25PdXRsaW5lOmYoIm9yZ2FuaXphdGlvbi1vdXRsaW5lIiw2MDAzMCksbmV3RmlsZTpmKCJuZXctZmlsZSIsNjAwMzEpLGZpbGVBZGQ6ZigiZmlsZS1hZGQiLDYwMDMxKSxuZXdGb2xkZXI6ZigibmV3LWZvbGRlciIsNjAwMzIpLGZpbGVEaXJlY3RvcnlDcmVhdGU6ZigiZmlsZS1kaXJlY3RvcnktY3JlYXRlIiw2MDAzMiksdHJhc2g6ZigidHJhc2giLDYwMDMzKSx0cmFzaGNhbjpmKCJ0cmFzaGNhbiIsNjAwMzMpLGhpc3Rvcnk6ZigiaGlzdG9yeSIsNjAwMzQpLGNsb2NrOmYoImNsb2NrIiw2MDAzNCksZm9sZGVyOmYoImZvbGRlciIsNjAwMzUpLGZpbGVEaXJlY3Rvcnk6ZigiZmlsZS1kaXJlY3RvcnkiLDYwMDM1KSxzeW1ib2xGb2xkZXI6Zigic3ltYm9sLWZvbGRlciIsNjAwMzUpLGxvZ29HaXRodWI6ZigibG9nby1naXRodWIiLDYwMDM2KSxtYXJrR2l0aHViOmYoIm1hcmstZ2l0aHViIiw2MDAzNiksZ2l0aHViOmYoImdpdGh1YiIsNjAwMzYpLHRlcm1pbmFsOmYoInRlcm1pbmFsIiw2MDAzNyksY29uc29sZTpmKCJjb25zb2xlIiw2MDAzNykscmVwbDpmKCJyZXBsIiw2MDAzNyksemFwOmYoInphcCIsNjAwMzgpLHN5bWJvbEV2ZW50OmYoInN5bWJvbC1ldmVudCIsNjAwMzgpLGVycm9yOmYoImVycm9yIiw2MDAzOSksc3RvcDpmKCJzdG9wIiw2MDAzOSksdmFyaWFibGU6ZigidmFyaWFibGUiLDYwMDQwKSxzeW1ib2xWYXJpYWJsZTpmKCJzeW1ib2wtdmFyaWFibGUiLDYwMDQwKSxhcnJheTpmKCJhcnJheSIsNjAwNDIpLHN5bWJvbEFycmF5OmYoInN5bWJvbC1hcnJheSIsNjAwNDIpLHN5bWJvbE1vZHVsZTpmKCJzeW1ib2wtbW9kdWxlIiw2MDA0Myksc3ltYm9sUGFja2FnZTpmKCJzeW1ib2wtcGFja2FnZSIsNjAwNDMpLHN5bWJvbE5hbWVzcGFjZTpmKCJzeW1ib2wtbmFtZXNwYWNlIiw2MDA0Myksc3ltYm9sT2JqZWN0OmYoInN5bWJvbC1vYmplY3QiLDYwMDQzKSxzeW1ib2xNZXRob2Q6Zigic3ltYm9sLW1ldGhvZCIsNjAwNDQpLHN5bWJvbEZ1bmN0aW9uOmYoInN5bWJvbC1mdW5jdGlvbiIsNjAwNDQpLHN5bWJvbENvbnN0cnVjdG9yOmYoInN5bWJvbC1jb25zdHJ1Y3RvciIsNjAwNDQpLHN5bWJvbEJvb2xlYW46Zigic3ltYm9sLWJvb2xlYW4iLDYwMDQ3KSxzeW1ib2xOdWxsOmYoInN5bWJvbC1udWxsIiw2MDA0Nyksc3ltYm9sTnVtZXJpYzpmKCJzeW1ib2wtbnVtZXJpYyIsNjAwNDgpLHN5bWJvbE51bWJlcjpmKCJzeW1ib2wtbnVtYmVyIiw2MDA0OCksc3ltYm9sU3RydWN0dXJlOmYoInN5bWJvbC1zdHJ1Y3R1cmUiLDYwMDQ5KSxzeW1ib2xTdHJ1Y3Q6Zigic3ltYm9sLXN0cnVjdCIsNjAwNDkpLHN5bWJvbFBhcmFtZXRlcjpmKCJzeW1ib2wtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sVHlwZVBhcmFtZXRlcjpmKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLDYwMDUwKSxzeW1ib2xLZXk6Zigic3ltYm9sLWtleSIsNjAwNTEpLHN5bWJvbFRleHQ6Zigic3ltYm9sLXRleHQiLDYwMDUxKSxzeW1ib2xSZWZlcmVuY2U6Zigic3ltYm9sLXJlZmVyZW5jZSIsNjAwNTIpLGdvVG9GaWxlOmYoImdvLXRvLWZpbGUiLDYwMDUyKSxzeW1ib2xFbnVtOmYoInN5bWJvbC1lbnVtIiw2MDA1Myksc3ltYm9sVmFsdWU6Zigic3ltYm9sLXZhbHVlIiw2MDA1Myksc3ltYm9sUnVsZXI6Zigic3ltYm9sLXJ1bGVyIiw2MDA1NCksc3ltYm9sVW5pdDpmKCJzeW1ib2wtdW5pdCIsNjAwNTQpLGFjdGl2YXRlQnJlYWtwb2ludHM6ZigiYWN0aXZhdGUtYnJlYWtwb2ludHMiLDYwMDU1KSxhcmNoaXZlOmYoImFyY2hpdmUiLDYwMDU2KSxhcnJvd0JvdGg6ZigiYXJyb3ctYm90aCIsNjAwNTcpLGFycm93RG93bjpmKCJhcnJvdy1kb3duIiw2MDA1OCksYXJyb3dMZWZ0OmYoImFycm93LWxlZnQiLDYwMDU5KSxhcnJvd1JpZ2h0OmYoImFycm93LXJpZ2h0Iiw2MDA2MCksYXJyb3dTbWFsbERvd246ZigiYXJyb3ctc21hbGwtZG93biIsNjAwNjEpLGFycm93U21hbGxMZWZ0OmYoImFycm93LXNtYWxsLWxlZnQiLDYwMDYyKSxhcnJvd1NtYWxsUmlnaHQ6ZigiYXJyb3ctc21hbGwtcmlnaHQiLDYwMDYzKSxhcnJvd1NtYWxsVXA6ZigiYXJyb3ctc21hbGwtdXAiLDYwMDY0KSxhcnJvd1VwOmYoImFycm93LXVwIiw2MDA2NSksYmVsbDpmKCJiZWxsIiw2MDA2NiksYm9sZDpmKCJib2xkIiw2MDA2NyksYm9vazpmKCJib29rIiw2MDA2OCksYm9va21hcms6ZigiYm9va21hcmsiLDYwMDY5KSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbFVudmVyaWZpZWQ6ZigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIiw2MDA3MCksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw6ZigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsRGlzYWJsZWQ6ZigiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludERhdGFVbnZlcmlmaWVkOmYoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIiw2MDA3MiksZGVidWdCcmVha3BvaW50RGF0YTpmKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnREYXRhRGlzYWJsZWQ6ZigiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIiw2MDA3MyksZGVidWdCcmVha3BvaW50TG9nVW52ZXJpZmllZDpmKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIiw2MDA3NCksZGVidWdCcmVha3BvaW50TG9nOmYoImRlYnVnLWJyZWFrcG9pbnQtbG9nIiw2MDA3NSksZGVidWdCcmVha3BvaW50TG9nRGlzYWJsZWQ6ZigiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLDYwMDc1KSxicmllZmNhc2U6ZigiYnJpZWZjYXNlIiw2MDA3NiksYnJvYWRjYXN0OmYoImJyb2FkY2FzdCIsNjAwNzcpLGJyb3dzZXI6ZigiYnJvd3NlciIsNjAwNzgpLGJ1ZzpmKCJidWciLDYwMDc5KSxjYWxlbmRhcjpmKCJjYWxlbmRhciIsNjAwODApLGNhc2VTZW5zaXRpdmU6ZigiY2FzZS1zZW5zaXRpdmUiLDYwMDgxKSxjaGVjazpmKCJjaGVjayIsNjAwODIpLGNoZWNrbGlzdDpmKCJjaGVja2xpc3QiLDYwMDgzKSxjaGV2cm9uRG93bjpmKCJjaGV2cm9uLWRvd24iLDYwMDg0KSxjaGV2cm9uTGVmdDpmKCJjaGV2cm9uLWxlZnQiLDYwMDg1KSxjaGV2cm9uUmlnaHQ6ZigiY2hldnJvbi1yaWdodCIsNjAwODYpLGNoZXZyb25VcDpmKCJjaGV2cm9uLXVwIiw2MDA4NyksY2hyb21lQ2xvc2U6ZigiY2hyb21lLWNsb3NlIiw2MDA4OCksY2hyb21lTWF4aW1pemU6ZigiY2hyb21lLW1heGltaXplIiw2MDA4OSksY2hyb21lTWluaW1pemU6ZigiY2hyb21lLW1pbmltaXplIiw2MDA5MCksY2hyb21lUmVzdG9yZTpmKCJjaHJvbWUtcmVzdG9yZSIsNjAwOTEpLGNpcmNsZU91dGxpbmU6ZigiY2lyY2xlLW91dGxpbmUiLDYwMDkyKSxjaXJjbGU6ZigiY2lyY2xlIiw2MDA5MiksZGVidWdCcmVha3BvaW50VW52ZXJpZmllZDpmKCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLDYwMDkyKSx0ZXJtaW5hbERlY29yYXRpb25JbmNvbXBsZXRlOmYoInRlcm1pbmFsLWRlY29yYXRpb24taW5jb21wbGV0ZSIsNjAwOTIpLGNpcmNsZVNsYXNoOmYoImNpcmNsZS1zbGFzaCIsNjAwOTMpLGNpcmN1aXRCb2FyZDpmKCJjaXJjdWl0LWJvYXJkIiw2MDA5NCksY2xlYXJBbGw6ZigiY2xlYXItYWxsIiw2MDA5NSksY2xpcHB5OmYoImNsaXBweSIsNjAwOTYpLGNsb3NlQWxsOmYoImNsb3NlLWFsbCIsNjAwOTcpLGNsb3VkRG93bmxvYWQ6ZigiY2xvdWQtZG93bmxvYWQiLDYwMDk4KSxjbG91ZFVwbG9hZDpmKCJjbG91ZC11cGxvYWQiLDYwMDk5KSxjb2RlOmYoImNvZGUiLDYwMTAwKSxjb2xsYXBzZUFsbDpmKCJjb2xsYXBzZS1hbGwiLDYwMTAxKSxjb2xvck1vZGU6ZigiY29sb3ItbW9kZSIsNjAxMDIpLGNvbW1lbnREaXNjdXNzaW9uOmYoImNvbW1lbnQtZGlzY3Vzc2lvbiIsNjAxMDMpLGNyZWRpdENhcmQ6ZigiY3JlZGl0LWNhcmQiLDYwMTA1KSxkYXNoOmYoImRhc2giLDYwMTA4KSxkYXNoYm9hcmQ6ZigiZGFzaGJvYXJkIiw2MDEwOSksZGF0YWJhc2U6ZigiZGF0YWJhc2UiLDYwMTEwKSxkZWJ1Z0NvbnRpbnVlOmYoImRlYnVnLWNvbnRpbnVlIiw2MDExMSksZGVidWdEaXNjb25uZWN0OmYoImRlYnVnLWRpc2Nvbm5lY3QiLDYwMTEyKSxkZWJ1Z1BhdXNlOmYoImRlYnVnLXBhdXNlIiw2MDExMyksZGVidWdSZXN0YXJ0OmYoImRlYnVnLXJlc3RhcnQiLDYwMTE0KSxkZWJ1Z1N0YXJ0OmYoImRlYnVnLXN0YXJ0Iiw2MDExNSksZGVidWdTdGVwSW50bzpmKCJkZWJ1Zy1zdGVwLWludG8iLDYwMTE2KSxkZWJ1Z1N0ZXBPdXQ6ZigiZGVidWctc3RlcC1vdXQiLDYwMTE3KSxkZWJ1Z1N0ZXBPdmVyOmYoImRlYnVnLXN0ZXAtb3ZlciIsNjAxMTgpLGRlYnVnU3RvcDpmKCJkZWJ1Zy1zdG9wIiw2MDExOSksZGVidWc6ZigiZGVidWciLDYwMTIwKSxkZXZpY2VDYW1lcmFWaWRlbzpmKCJkZXZpY2UtY2FtZXJhLXZpZGVvIiw2MDEyMSksZGV2aWNlQ2FtZXJhOmYoImRldmljZS1jYW1lcmEiLDYwMTIyKSxkZXZpY2VNb2JpbGU6ZigiZGV2aWNlLW1vYmlsZSIsNjAxMjMpLGRpZmZBZGRlZDpmKCJkaWZmLWFkZGVkIiw2MDEyNCksZGlmZklnbm9yZWQ6ZigiZGlmZi1pZ25vcmVkIiw2MDEyNSksZGlmZk1vZGlmaWVkOmYoImRpZmYtbW9kaWZpZWQiLDYwMTI2KSxkaWZmUmVtb3ZlZDpmKCJkaWZmLXJlbW92ZWQiLDYwMTI3KSxkaWZmUmVuYW1lZDpmKCJkaWZmLXJlbmFtZWQiLDYwMTI4KSxkaWZmOmYoImRpZmYiLDYwMTI5KSxkaWZmU2lkZWJ5c2lkZTpmKCJkaWZmLXNpZGVieXNpZGUiLDYwMTI5KSxkaXNjYXJkOmYoImRpc2NhcmQiLDYwMTMwKSxlZGl0b3JMYXlvdXQ6ZigiZWRpdG9yLWxheW91dCIsNjAxMzEpLGVtcHR5V2luZG93OmYoImVtcHR5LXdpbmRvdyIsNjAxMzIpLGV4Y2x1ZGU6ZigiZXhjbHVkZSIsNjAxMzMpLGV4dGVuc2lvbnM6ZigiZXh0ZW5zaW9ucyIsNjAxMzQpLGV5ZUNsb3NlZDpmKCJleWUtY2xvc2VkIiw2MDEzNSksZmlsZUJpbmFyeTpmKCJmaWxlLWJpbmFyeSIsNjAxMzYpLGZpbGVDb2RlOmYoImZpbGUtY29kZSIsNjAxMzcpLGZpbGVNZWRpYTpmKCJmaWxlLW1lZGlhIiw2MDEzOCksZmlsZVBkZjpmKCJmaWxlLXBkZiIsNjAxMzkpLGZpbGVTdWJtb2R1bGU6ZigiZmlsZS1zdWJtb2R1bGUiLDYwMTQwKSxmaWxlU3ltbGlua0RpcmVjdG9yeTpmKCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iiw2MDE0MSksZmlsZVN5bWxpbmtGaWxlOmYoImZpbGUtc3ltbGluay1maWxlIiw2MDE0MiksZmlsZVppcDpmKCJmaWxlLXppcCIsNjAxNDMpLGZpbGVzOmYoImZpbGVzIiw2MDE0NCksZmlsdGVyOmYoImZpbHRlciIsNjAxNDUpLGZsYW1lOmYoImZsYW1lIiw2MDE0NiksZm9sZERvd246ZigiZm9sZC1kb3duIiw2MDE0NyksZm9sZFVwOmYoImZvbGQtdXAiLDYwMTQ4KSxmb2xkOmYoImZvbGQiLDYwMTQ5KSxmb2xkZXJBY3RpdmU6ZigiZm9sZGVyLWFjdGl2ZSIsNjAxNTApLGZvbGRlck9wZW5lZDpmKCJmb2xkZXItb3BlbmVkIiw2MDE1MSksZ2VhcjpmKCJnZWFyIiw2MDE1MiksZ2lmdDpmKCJnaWZ0Iiw2MDE1MyksZ2lzdFNlY3JldDpmKCJnaXN0LXNlY3JldCIsNjAxNTQpLGdpc3Q6ZigiZ2lzdCIsNjAxNTUpLGdpdENvbW1pdDpmKCJnaXQtY29tbWl0Iiw2MDE1NiksZ2l0Q29tcGFyZTpmKCJnaXQtY29tcGFyZSIsNjAxNTcpLGNvbXBhcmVDaGFuZ2VzOmYoImNvbXBhcmUtY2hhbmdlcyIsNjAxNTcpLGdpdE1lcmdlOmYoImdpdC1tZXJnZSIsNjAxNTgpLGdpdGh1YkFjdGlvbjpmKCJnaXRodWItYWN0aW9uIiw2MDE1OSksZ2l0aHViQWx0OmYoImdpdGh1Yi1hbHQiLDYwMTYwKSxnbG9iZTpmKCJnbG9iZSIsNjAxNjEpLGdyYWJiZXI6ZigiZ3JhYmJlciIsNjAxNjIpLGdyYXBoOmYoImdyYXBoIiw2MDE2MyksZ3JpcHBlcjpmKCJncmlwcGVyIiw2MDE2NCksaGVhcnQ6ZigiaGVhcnQiLDYwMTY1KSxob21lOmYoImhvbWUiLDYwMTY2KSxob3Jpem9udGFsUnVsZTpmKCJob3Jpem9udGFsLXJ1bGUiLDYwMTY3KSxodWJvdDpmKCJodWJvdCIsNjAxNjgpLGluYm94OmYoImluYm94Iiw2MDE2OSksaXNzdWVSZW9wZW5lZDpmKCJpc3N1ZS1yZW9wZW5lZCIsNjAxNzEpLGlzc3VlczpmKCJpc3N1ZXMiLDYwMTcyKSxpdGFsaWM6ZigiaXRhbGljIiw2MDE3MyksamVyc2V5OmYoImplcnNleSIsNjAxNzQpLGpzb246ZigianNvbiIsNjAxNzUpLGtlYmFiVmVydGljYWw6Zigia2ViYWItdmVydGljYWwiLDYwMTc2KSxrZXk6Zigia2V5Iiw2MDE3NyksbGF3OmYoImxhdyIsNjAxNzgpLGxpZ2h0YnVsYkF1dG9maXg6ZigibGlnaHRidWxiLWF1dG9maXgiLDYwMTc5KSxsaW5rRXh0ZXJuYWw6ZigibGluay1leHRlcm5hbCIsNjAxODApLGxpbms6ZigibGluayIsNjAxODEpLGxpc3RPcmRlcmVkOmYoImxpc3Qtb3JkZXJlZCIsNjAxODIpLGxpc3RVbm9yZGVyZWQ6ZigibGlzdC11bm9yZGVyZWQiLDYwMTgzKSxsaXZlU2hhcmU6ZigibGl2ZS1zaGFyZSIsNjAxODQpLGxvYWRpbmc6ZigibG9hZGluZyIsNjAxODUpLGxvY2F0aW9uOmYoImxvY2F0aW9uIiw2MDE4NiksbWFpbFJlYWQ6ZigibWFpbC1yZWFkIiw2MDE4NyksbWFpbDpmKCJtYWlsIiw2MDE4OCksbWFya2Rvd246ZigibWFya2Rvd24iLDYwMTg5KSxtZWdhcGhvbmU6ZigibWVnYXBob25lIiw2MDE5MCksbWVudGlvbjpmKCJtZW50aW9uIiw2MDE5MSksbWlsZXN0b25lOmYoIm1pbGVzdG9uZSIsNjAxOTIpLGdpdFB1bGxSZXF1ZXN0TWlsZXN0b25lOmYoImdpdC1wdWxsLXJlcXVlc3QtbWlsZXN0b25lIiw2MDE5MiksbW9ydGFyQm9hcmQ6ZigibW9ydGFyLWJvYXJkIiw2MDE5MyksbW92ZTpmKCJtb3ZlIiw2MDE5NCksbXVsdGlwbGVXaW5kb3dzOmYoIm11bHRpcGxlLXdpbmRvd3MiLDYwMTk1KSxtdXRlOmYoIm11dGUiLDYwMTk2KSxub05ld2xpbmU6Zigibm8tbmV3bGluZSIsNjAxOTcpLG5vdGU6Zigibm90ZSIsNjAxOTgpLG9jdG9mYWNlOmYoIm9jdG9mYWNlIiw2MDE5OSksb3BlblByZXZpZXc6Zigib3Blbi1wcmV2aWV3Iiw2MDIwMCkscGFja2FnZTpmKCJwYWNrYWdlIiw2MDIwMSkscGFpbnRjYW46ZigicGFpbnRjYW4iLDYwMjAyKSxwaW46ZigicGluIiw2MDIwMykscGxheTpmKCJwbGF5Iiw2MDIwNCkscnVuOmYoInJ1biIsNjAyMDQpLHBsdWc6ZigicGx1ZyIsNjAyMDUpLHByZXNlcnZlQ2FzZTpmKCJwcmVzZXJ2ZS1jYXNlIiw2MDIwNikscHJldmlldzpmKCJwcmV2aWV3Iiw2MDIwNykscHJvamVjdDpmKCJwcm9qZWN0Iiw2MDIwOCkscHVsc2U6ZigicHVsc2UiLDYwMjA5KSxxdWVzdGlvbjpmKCJxdWVzdGlvbiIsNjAyMTApLHF1b3RlOmYoInF1b3RlIiw2MDIxMSkscmFkaW9Ub3dlcjpmKCJyYWRpby10b3dlciIsNjAyMTIpLHJlYWN0aW9uczpmKCJyZWFjdGlvbnMiLDYwMjEzKSxyZWZlcmVuY2VzOmYoInJlZmVyZW5jZXMiLDYwMjE0KSxyZWZyZXNoOmYoInJlZnJlc2giLDYwMjE1KSxyZWdleDpmKCJyZWdleCIsNjAyMTYpLHJlbW90ZUV4cGxvcmVyOmYoInJlbW90ZS1leHBsb3JlciIsNjAyMTcpLHJlbW90ZTpmKCJyZW1vdGUiLDYwMjE4KSxyZW1vdmU6ZigicmVtb3ZlIiw2MDIxOSkscmVwbGFjZUFsbDpmKCJyZXBsYWNlLWFsbCIsNjAyMjApLHJlcGxhY2U6ZigicmVwbGFjZSIsNjAyMjEpLHJlcG9DbG9uZTpmKCJyZXBvLWNsb25lIiw2MDIyMikscmVwb0ZvcmNlUHVzaDpmKCJyZXBvLWZvcmNlLXB1c2giLDYwMjIzKSxyZXBvUHVsbDpmKCJyZXBvLXB1bGwiLDYwMjI0KSxyZXBvUHVzaDpmKCJyZXBvLXB1c2giLDYwMjI1KSxyZXBvcnQ6ZigicmVwb3J0Iiw2MDIyNikscmVxdWVzdENoYW5nZXM6ZigicmVxdWVzdC1jaGFuZ2VzIiw2MDIyNykscm9ja2V0OmYoInJvY2tldCIsNjAyMjgpLHJvb3RGb2xkZXJPcGVuZWQ6Zigicm9vdC1mb2xkZXItb3BlbmVkIiw2MDIyOSkscm9vdEZvbGRlcjpmKCJyb290LWZvbGRlciIsNjAyMzApLHJzczpmKCJyc3MiLDYwMjMxKSxydWJ5OmYoInJ1YnkiLDYwMjMyKSxzYXZlQWxsOmYoInNhdmUtYWxsIiw2MDIzMyksc2F2ZUFzOmYoInNhdmUtYXMiLDYwMjM0KSxzYXZlOmYoInNhdmUiLDYwMjM1KSxzY3JlZW5GdWxsOmYoInNjcmVlbi1mdWxsIiw2MDIzNiksc2NyZWVuTm9ybWFsOmYoInNjcmVlbi1ub3JtYWwiLDYwMjM3KSxzZWFyY2hTdG9wOmYoInNlYXJjaC1zdG9wIiw2MDIzOCksc2VydmVyOmYoInNlcnZlciIsNjAyNDApLHNldHRpbmdzR2VhcjpmKCJzZXR0aW5ncy1nZWFyIiw2MDI0MSksc2V0dGluZ3M6Zigic2V0dGluZ3MiLDYwMjQyKSxzaGllbGQ6Zigic2hpZWxkIiw2MDI0Myksc21pbGV5OmYoInNtaWxleSIsNjAyNDQpLHNvcnRQcmVjZWRlbmNlOmYoInNvcnQtcHJlY2VkZW5jZSIsNjAyNDUpLHNwbGl0SG9yaXpvbnRhbDpmKCJzcGxpdC1ob3Jpem9udGFsIiw2MDI0Niksc3BsaXRWZXJ0aWNhbDpmKCJzcGxpdC12ZXJ0aWNhbCIsNjAyNDcpLHNxdWlycmVsOmYoInNxdWlycmVsIiw2MDI0OCksc3RhckZ1bGw6Zigic3Rhci1mdWxsIiw2MDI0OSksc3RhckhhbGY6Zigic3Rhci1oYWxmIiw2MDI1MCksc3ltYm9sQ2xhc3M6Zigic3ltYm9sLWNsYXNzIiw2MDI1MSksc3ltYm9sQ29sb3I6Zigic3ltYm9sLWNvbG9yIiw2MDI1Miksc3ltYm9sQ29uc3RhbnQ6Zigic3ltYm9sLWNvbnN0YW50Iiw2MDI1Myksc3ltYm9sRW51bU1lbWJlcjpmKCJzeW1ib2wtZW51bS1tZW1iZXIiLDYwMjU0KSxzeW1ib2xGaWVsZDpmKCJzeW1ib2wtZmllbGQiLDYwMjU1KSxzeW1ib2xGaWxlOmYoInN5bWJvbC1maWxlIiw2MDI1Niksc3ltYm9sSW50ZXJmYWNlOmYoInN5bWJvbC1pbnRlcmZhY2UiLDYwMjU3KSxzeW1ib2xLZXl3b3JkOmYoInN5bWJvbC1rZXl3b3JkIiw2MDI1OCksc3ltYm9sTWlzYzpmKCJzeW1ib2wtbWlzYyIsNjAyNTkpLHN5bWJvbE9wZXJhdG9yOmYoInN5bWJvbC1vcGVyYXRvciIsNjAyNjApLHN5bWJvbFByb3BlcnR5OmYoInN5bWJvbC1wcm9wZXJ0eSIsNjAyNjEpLHdyZW5jaDpmKCJ3cmVuY2giLDYwMjYxKSx3cmVuY2hTdWJhY3Rpb246Zigid3JlbmNoLXN1YmFjdGlvbiIsNjAyNjEpLHN5bWJvbFNuaXBwZXQ6Zigic3ltYm9sLXNuaXBwZXQiLDYwMjYyKSx0YXNrbGlzdDpmKCJ0YXNrbGlzdCIsNjAyNjMpLHRlbGVzY29wZTpmKCJ0ZWxlc2NvcGUiLDYwMjY0KSx0ZXh0U2l6ZTpmKCJ0ZXh0LXNpemUiLDYwMjY1KSx0aHJlZUJhcnM6ZigidGhyZWUtYmFycyIsNjAyNjYpLHRodW1ic2Rvd246ZigidGh1bWJzZG93biIsNjAyNjcpLHRodW1ic3VwOmYoInRodW1ic3VwIiw2MDI2OCksdG9vbHM6ZigidG9vbHMiLDYwMjY5KSx0cmlhbmdsZURvd246ZigidHJpYW5nbGUtZG93biIsNjAyNzApLHRyaWFuZ2xlTGVmdDpmKCJ0cmlhbmdsZS1sZWZ0Iiw2MDI3MSksdHJpYW5nbGVSaWdodDpmKCJ0cmlhbmdsZS1yaWdodCIsNjAyNzIpLHRyaWFuZ2xlVXA6ZigidHJpYW5nbGUtdXAiLDYwMjczKSx0d2l0dGVyOmYoInR3aXR0ZXIiLDYwMjc0KSx1bmZvbGQ6ZigidW5mb2xkIiw2MDI3NSksdW5sb2NrOmYoInVubG9jayIsNjAyNzYpLHVubXV0ZTpmKCJ1bm11dGUiLDYwMjc3KSx1bnZlcmlmaWVkOmYoInVudmVyaWZpZWQiLDYwMjc4KSx2ZXJpZmllZDpmKCJ2ZXJpZmllZCIsNjAyNzkpLHZlcnNpb25zOmYoInZlcnNpb25zIiw2MDI4MCksdm1BY3RpdmU6Zigidm0tYWN0aXZlIiw2MDI4MSksdm1PdXRsaW5lOmYoInZtLW91dGxpbmUiLDYwMjgyKSx2bVJ1bm5pbmc6Zigidm0tcnVubmluZyIsNjAyODMpLHdhdGNoOmYoIndhdGNoIiw2MDI4NCksd2hpdGVzcGFjZTpmKCJ3aGl0ZXNwYWNlIiw2MDI4NSksd2hvbGVXb3JkOmYoIndob2xlLXdvcmQiLDYwMjg2KSx3aW5kb3c6Zigid2luZG93Iiw2MDI4Nyksd29yZFdyYXA6Zigid29yZC13cmFwIiw2MDI4OCksem9vbUluOmYoInpvb20taW4iLDYwMjg5KSx6b29tT3V0OmYoInpvb20tb3V0Iiw2MDI5MCksbGlzdEZpbHRlcjpmKCJsaXN0LWZpbHRlciIsNjAyOTEpLGxpc3RGbGF0OmYoImxpc3QtZmxhdCIsNjAyOTIpLGxpc3RTZWxlY3Rpb246ZigibGlzdC1zZWxlY3Rpb24iLDYwMjkzKSxzZWxlY3Rpb246Zigic2VsZWN0aW9uIiw2MDI5MyksbGlzdFRyZWU6ZigibGlzdC10cmVlIiw2MDI5NCksZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkOmYoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZCIsNjAyOTUpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uOmYoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24iLDYwMjk2KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbkRpc2FibGVkOmYoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLDYwMjk2KSxkZWJ1Z1N0YWNrZnJhbWVBY3RpdmU6ZigiZGVidWctc3RhY2tmcmFtZS1hY3RpdmUiLDYwMjk3KSxjaXJjbGVTbWFsbEZpbGxlZDpmKCJjaXJjbGUtc21hbGwtZmlsbGVkIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lRG90OmYoImRlYnVnLXN0YWNrZnJhbWUtZG90Iiw2MDI5OCksdGVybWluYWxEZWNvcmF0aW9uTWFyazpmKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLW1hcmsiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWU6ZigiZGVidWctc3RhY2tmcmFtZSIsNjAyOTkpLGRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ6ZigiZGVidWctc3RhY2tmcmFtZS1mb2N1c2VkIiw2MDI5OSksZGVidWdCcmVha3BvaW50VW5zdXBwb3J0ZWQ6ZigiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIsNjAzMDApLHN5bWJvbFN0cmluZzpmKCJzeW1ib2wtc3RyaW5nIiw2MDMwMSksZGVidWdSZXZlcnNlQ29udGludWU6ZigiZGVidWctcmV2ZXJzZS1jb250aW51ZSIsNjAzMDIpLGRlYnVnU3RlcEJhY2s6ZigiZGVidWctc3RlcC1iYWNrIiw2MDMwMyksZGVidWdSZXN0YXJ0RnJhbWU6ZigiZGVidWctcmVzdGFydC1mcmFtZSIsNjAzMDQpLGRlYnVnQWx0OmYoImRlYnVnLWFsdCIsNjAzMDUpLGNhbGxJbmNvbWluZzpmKCJjYWxsLWluY29taW5nIiw2MDMwNiksY2FsbE91dGdvaW5nOmYoImNhbGwtb3V0Z29pbmciLDYwMzA3KSxtZW51OmYoIm1lbnUiLDYwMzA4KSxleHBhbmRBbGw6ZigiZXhwYW5kLWFsbCIsNjAzMDkpLGZlZWRiYWNrOmYoImZlZWRiYWNrIiw2MDMxMCksZ2l0UHVsbFJlcXVlc3RSZXZpZXdlcjpmKCJnaXQtcHVsbC1yZXF1ZXN0LXJldmlld2VyIiw2MDMxMCksZ3JvdXBCeVJlZlR5cGU6ZigiZ3JvdXAtYnktcmVmLXR5cGUiLDYwMzExKSx1bmdyb3VwQnlSZWZUeXBlOmYoInVuZ3JvdXAtYnktcmVmLXR5cGUiLDYwMzEyKSxhY2NvdW50OmYoImFjY291bnQiLDYwMzEzKSxnaXRQdWxsUmVxdWVzdEFzc2lnbmVlOmYoImdpdC1wdWxsLXJlcXVlc3QtYXNzaWduZWUiLDYwMzEzKSxiZWxsRG90OmYoImJlbGwtZG90Iiw2MDMxNCksZGVidWdDb25zb2xlOmYoImRlYnVnLWNvbnNvbGUiLDYwMzE1KSxsaWJyYXJ5OmYoImxpYnJhcnkiLDYwMzE2KSxvdXRwdXQ6Zigib3V0cHV0Iiw2MDMxNykscnVuQWxsOmYoInJ1bi1hbGwiLDYwMzE4KSxzeW5jSWdub3JlZDpmKCJzeW5jLWlnbm9yZWQiLDYwMzE5KSxwaW5uZWQ6ZigicGlubmVkIiw2MDMyMCksZ2l0aHViSW52ZXJ0ZWQ6ZigiZ2l0aHViLWludmVydGVkIiw2MDMyMSksc2VydmVyUHJvY2VzczpmKCJzZXJ2ZXItcHJvY2VzcyIsNjAzMjIpLHNlcnZlckVudmlyb25tZW50OmYoInNlcnZlci1lbnZpcm9ubWVudCIsNjAzMjMpLHBhc3M6ZigicGFzcyIsNjAzMjQpLGlzc3VlQ2xvc2VkOmYoImlzc3VlLWNsb3NlZCIsNjAzMjQpLHN0b3BDaXJjbGU6Zigic3RvcC1jaXJjbGUiLDYwMzI1KSxwbGF5Q2lyY2xlOmYoInBsYXktY2lyY2xlIiw2MDMyNikscmVjb3JkOmYoInJlY29yZCIsNjAzMjcpLGRlYnVnQWx0U21hbGw6ZigiZGVidWctYWx0LXNtYWxsIiw2MDMyOCksdm1Db25uZWN0OmYoInZtLWNvbm5lY3QiLDYwMzI5KSxjbG91ZDpmKCJjbG91ZCIsNjAzMzApLG1lcmdlOmYoIm1lcmdlIiw2MDMzMSksZXhwb3J0OmYoImV4cG9ydCIsNjAzMzIpLGdyYXBoTGVmdDpmKCJncmFwaC1sZWZ0Iiw2MDMzMyksbWFnbmV0OmYoIm1hZ25ldCIsNjAzMzQpLG5vdGVib29rOmYoIm5vdGVib29rIiw2MDMzNSkscmVkbzpmKCJyZWRvIiw2MDMzNiksY2hlY2tBbGw6ZigiY2hlY2stYWxsIiw2MDMzNykscGlubmVkRGlydHk6ZigicGlubmVkLWRpcnR5Iiw2MDMzOCkscGFzc0ZpbGxlZDpmKCJwYXNzLWZpbGxlZCIsNjAzMzkpLGNpcmNsZUxhcmdlRmlsbGVkOmYoImNpcmNsZS1sYXJnZS1maWxsZWQiLDYwMzQwKSxjaXJjbGVMYXJnZTpmKCJjaXJjbGUtbGFyZ2UiLDYwMzQxKSxjaXJjbGVMYXJnZU91dGxpbmU6ZigiY2lyY2xlLWxhcmdlLW91dGxpbmUiLDYwMzQxKSxjb21iaW5lOmYoImNvbWJpbmUiLDYwMzQyKSxnYXRoZXI6ZigiZ2F0aGVyIiw2MDM0MiksdGFibGU6ZigidGFibGUiLDYwMzQzKSx2YXJpYWJsZUdyb3VwOmYoInZhcmlhYmxlLWdyb3VwIiw2MDM0NCksdHlwZUhpZXJhcmNoeTpmKCJ0eXBlLWhpZXJhcmNoeSIsNjAzNDUpLHR5cGVIaWVyYXJjaHlTdWI6ZigidHlwZS1oaWVyYXJjaHktc3ViIiw2MDM0NiksdHlwZUhpZXJhcmNoeVN1cGVyOmYoInR5cGUtaGllcmFyY2h5LXN1cGVyIiw2MDM0NyksZ2l0UHVsbFJlcXVlc3RDcmVhdGU6ZigiZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUiLDYwMzQ4KSxydW5BYm92ZTpmKCJydW4tYWJvdmUiLDYwMzQ5KSxydW5CZWxvdzpmKCJydW4tYmVsb3ciLDYwMzUwKSxub3RlYm9va1RlbXBsYXRlOmYoIm5vdGVib29rLXRlbXBsYXRlIiw2MDM1MSksZGVidWdSZXJ1bjpmKCJkZWJ1Zy1yZXJ1biIsNjAzNTIpLHdvcmtzcGFjZVRydXN0ZWQ6Zigid29ya3NwYWNlLXRydXN0ZWQiLDYwMzUzKSx3b3Jrc3BhY2VVbnRydXN0ZWQ6Zigid29ya3NwYWNlLXVudHJ1c3RlZCIsNjAzNTQpLHdvcmtzcGFjZVVua25vd246Zigid29ya3NwYWNlLXVua25vd24iLDYwMzU1KSx0ZXJtaW5hbENtZDpmKCJ0ZXJtaW5hbC1jbWQiLDYwMzU2KSx0ZXJtaW5hbERlYmlhbjpmKCJ0ZXJtaW5hbC1kZWJpYW4iLDYwMzU3KSx0ZXJtaW5hbExpbnV4OmYoInRlcm1pbmFsLWxpbnV4Iiw2MDM1OCksdGVybWluYWxQb3dlcnNoZWxsOmYoInRlcm1pbmFsLXBvd2Vyc2hlbGwiLDYwMzU5KSx0ZXJtaW5hbFRtdXg6ZigidGVybWluYWwtdG11eCIsNjAzNjApLHRlcm1pbmFsVWJ1bnR1OmYoInRlcm1pbmFsLXVidW50dSIsNjAzNjEpLHRlcm1pbmFsQmFzaDpmKCJ0ZXJtaW5hbC1iYXNoIiw2MDM2MiksYXJyb3dTd2FwOmYoImFycm93LXN3YXAiLDYwMzYzKSxjb3B5OmYoImNvcHkiLDYwMzY0KSxwZXJzb25BZGQ6ZigicGVyc29uLWFkZCIsNjAzNjUpLGZpbHRlckZpbGxlZDpmKCJmaWx0ZXItZmlsbGVkIiw2MDM2Niksd2FuZDpmKCJ3YW5kIiw2MDM2NyksZGVidWdMaW5lQnlMaW5lOmYoImRlYnVnLWxpbmUtYnktbGluZSIsNjAzNjgpLGluc3BlY3Q6ZigiaW5zcGVjdCIsNjAzNjkpLGxheWVyczpmKCJsYXllcnMiLDYwMzcwKSxsYXllcnNEb3Q6ZigibGF5ZXJzLWRvdCIsNjAzNzEpLGxheWVyc0FjdGl2ZTpmKCJsYXllcnMtYWN0aXZlIiw2MDM3MiksY29tcGFzczpmKCJjb21wYXNzIiw2MDM3MyksY29tcGFzc0RvdDpmKCJjb21wYXNzLWRvdCIsNjAzNzQpLGNvbXBhc3NBY3RpdmU6ZigiY29tcGFzcy1hY3RpdmUiLDYwMzc1KSxhenVyZTpmKCJhenVyZSIsNjAzNzYpLGlzc3VlRHJhZnQ6ZigiaXNzdWUtZHJhZnQiLDYwMzc3KSxnaXRQdWxsUmVxdWVzdENsb3NlZDpmKCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIsNjAzNzgpLGdpdFB1bGxSZXF1ZXN0RHJhZnQ6ZigiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIsNjAzNzkpLGRlYnVnQWxsOmYoImRlYnVnLWFsbCIsNjAzODApLGRlYnVnQ292ZXJhZ2U6ZigiZGVidWctY292ZXJhZ2UiLDYwMzgxKSxydW5FcnJvcnM6ZigicnVuLWVycm9ycyIsNjAzODIpLGZvbGRlckxpYnJhcnk6ZigiZm9sZGVyLWxpYnJhcnkiLDYwMzgzKSxkZWJ1Z0NvbnRpbnVlU21hbGw6ZigiZGVidWctY29udGludWUtc21hbGwiLDYwMzg0KSxiZWFrZXJTdG9wOmYoImJlYWtlci1zdG9wIiw2MDM4NSksZ3JhcGhMaW5lOmYoImdyYXBoLWxpbmUiLDYwMzg2KSxncmFwaFNjYXR0ZXI6ZigiZ3JhcGgtc2NhdHRlciIsNjAzODcpLHBpZUNoYXJ0OmYoInBpZS1jaGFydCIsNjAzODgpLGJyYWNrZXQ6ZigiYnJhY2tldCIsNjAxNzUpLGJyYWNrZXREb3Q6ZigiYnJhY2tldC1kb3QiLDYwMzg5KSxicmFja2V0RXJyb3I6ZigiYnJhY2tldC1lcnJvciIsNjAzOTApLGxvY2tTbWFsbDpmKCJsb2NrLXNtYWxsIiw2MDM5MSksYXp1cmVEZXZvcHM6ZigiYXp1cmUtZGV2b3BzIiw2MDM5MiksdmVyaWZpZWRGaWxsZWQ6ZigidmVyaWZpZWQtZmlsbGVkIiw2MDM5MyksbmV3bGluZTpmKCJuZXdsaW5lIiw2MDM5NCksbGF5b3V0OmYoImxheW91dCIsNjAzOTUpLGxheW91dEFjdGl2aXR5YmFyTGVmdDpmKCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIsNjAzOTYpLGxheW91dEFjdGl2aXR5YmFyUmlnaHQ6ZigibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iiw2MDM5NyksbGF5b3V0UGFuZWxMZWZ0OmYoImxheW91dC1wYW5lbC1sZWZ0Iiw2MDM5OCksbGF5b3V0UGFuZWxDZW50ZXI6ZigibGF5b3V0LXBhbmVsLWNlbnRlciIsNjAzOTkpLGxheW91dFBhbmVsSnVzdGlmeTpmKCJsYXlvdXQtcGFuZWwtanVzdGlmeSIsNjA0MDApLGxheW91dFBhbmVsUmlnaHQ6ZigibGF5b3V0LXBhbmVsLXJpZ2h0Iiw2MDQwMSksbGF5b3V0UGFuZWw6ZigibGF5b3V0LXBhbmVsIiw2MDQwMiksbGF5b3V0U2lkZWJhckxlZnQ6ZigibGF5b3V0LXNpZGViYXItbGVmdCIsNjA0MDMpLGxheW91dFNpZGViYXJSaWdodDpmKCJsYXlvdXQtc2lkZWJhci1yaWdodCIsNjA0MDQpLGxheW91dFN0YXR1c2JhcjpmKCJsYXlvdXQtc3RhdHVzYmFyIiw2MDQwNSksbGF5b3V0TWVudWJhcjpmKCJsYXlvdXQtbWVudWJhciIsNjA0MDYpLGxheW91dENlbnRlcmVkOmYoImxheW91dC1jZW50ZXJlZCIsNjA0MDcpLHRhcmdldDpmKCJ0YXJnZXQiLDYwNDA4KSxpbmRlbnQ6ZigiaW5kZW50Iiw2MDQwOSkscmVjb3JkU21hbGw6ZigicmVjb3JkLXNtYWxsIiw2MDQxMCksZXJyb3JTbWFsbDpmKCJlcnJvci1zbWFsbCIsNjA0MTEpLHRlcm1pbmFsRGVjb3JhdGlvbkVycm9yOmYoInRlcm1pbmFsLWRlY29yYXRpb24tZXJyb3IiLDYwNDExKSxhcnJvd0NpcmNsZURvd246ZigiYXJyb3ctY2lyY2xlLWRvd24iLDYwNDEyKSxhcnJvd0NpcmNsZUxlZnQ6ZigiYXJyb3ctY2lyY2xlLWxlZnQiLDYwNDEzKSxhcnJvd0NpcmNsZVJpZ2h0OmYoImFycm93LWNpcmNsZS1yaWdodCIsNjA0MTQpLGFycm93Q2lyY2xlVXA6ZigiYXJyb3ctY2lyY2xlLXVwIiw2MDQxNSksbGF5b3V0U2lkZWJhclJpZ2h0T2ZmOmYoImxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZiIsNjA0MTYpLGxheW91dFBhbmVsT2ZmOmYoImxheW91dC1wYW5lbC1vZmYiLDYwNDE3KSxsYXlvdXRTaWRlYmFyTGVmdE9mZjpmKCJsYXlvdXQtc2lkZWJhci1sZWZ0LW9mZiIsNjA0MTgpLGJsYW5rOmYoImJsYW5rIiw2MDQxOSksaGVhcnRGaWxsZWQ6ZigiaGVhcnQtZmlsbGVkIiw2MDQyMCksbWFwOmYoIm1hcCIsNjA0MjEpLG1hcEhvcml6b250YWw6ZigibWFwLWhvcml6b250YWwiLDYwNDIxKSxmb2xkSG9yaXpvbnRhbDpmKCJmb2xkLWhvcml6b250YWwiLDYwNDIxKSxtYXBGaWxsZWQ6ZigibWFwLWZpbGxlZCIsNjA0MjIpLG1hcEhvcml6b250YWxGaWxsZWQ6ZigibWFwLWhvcml6b250YWwtZmlsbGVkIiw2MDQyMiksZm9sZEhvcml6b250YWxGaWxsZWQ6ZigiZm9sZC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGNpcmNsZVNtYWxsOmYoImNpcmNsZS1zbWFsbCIsNjA0MjMpLGJlbGxTbGFzaDpmKCJiZWxsLXNsYXNoIiw2MDQyNCksYmVsbFNsYXNoRG90OmYoImJlbGwtc2xhc2gtZG90Iiw2MDQyNSksY29tbWVudFVucmVzb2x2ZWQ6ZigiY29tbWVudC11bnJlc29sdmVkIiw2MDQyNiksZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlczpmKCJnaXQtcHVsbC1yZXF1ZXN0LWdvLXRvLWNoYW5nZXMiLDYwNDI3KSxnaXRQdWxsUmVxdWVzdE5ld0NoYW5nZXM6ZigiZ2l0LXB1bGwtcmVxdWVzdC1uZXctY2hhbmdlcyIsNjA0MjgpLHNlYXJjaEZ1enp5OmYoInNlYXJjaC1mdXp6eSIsNjA0MjkpLGNvbW1lbnREcmFmdDpmKCJjb21tZW50LWRyYWZ0Iiw2MDQzMCksc2VuZDpmKCJzZW5kIiw2MDQzMSksc3BhcmtsZTpmKCJzcGFya2xlIiw2MDQzMiksaW5zZXJ0OmYoImluc2VydCIsNjA0MzMpLG1pYzpmKCJtaWMiLDYwNDM0KSx0aHVtYnNkb3duRmlsbGVkOmYoInRodW1ic2Rvd24tZmlsbGVkIiw2MDQzNSksdGh1bWJzdXBGaWxsZWQ6ZigidGh1bWJzdXAtZmlsbGVkIiw2MDQzNiksY29mZmVlOmYoImNvZmZlZSIsNjA0MzcpLHNuYWtlOmYoInNuYWtlIiw2MDQzOCksZ2FtZTpmKCJnYW1lIiw2MDQzOSksdnI6ZigidnIiLDYwNDQwKSxjaGlwOmYoImNoaXAiLDYwNDQxKSxwaWFubzpmKCJwaWFubyIsNjA0NDIpLG11c2ljOmYoIm11c2ljIiw2MDQ0MyksbWljRmlsbGVkOmYoIm1pYy1maWxsZWQiLDYwNDQ0KSxyZXBvRmV0Y2g6ZigicmVwby1mZXRjaCIsNjA0NDUpLGNvcGlsb3Q6ZigiY29waWxvdCIsNjA0NDYpLGxpZ2h0YnVsYlNwYXJrbGU6ZigibGlnaHRidWxiLXNwYXJrbGUiLDYwNDQ3KSxyb2JvdDpmKCJyb2JvdCIsNjA0NDgpLHNwYXJrbGVGaWxsZWQ6Zigic3BhcmtsZS1maWxsZWQiLDYwNDQ5KSxkaWZmU2luZ2xlOmYoImRpZmYtc2luZ2xlIiw2MDQ1MCksZGlmZk11bHRpcGxlOmYoImRpZmYtbXVsdGlwbGUiLDYwNDUxKSxzdXJyb3VuZFdpdGg6Zigic3Vycm91bmQtd2l0aCIsNjA0NTIpLHNoYXJlOmYoInNoYXJlIiw2MDQ1MyksZ2l0U3Rhc2g6ZigiZ2l0LXN0YXNoIiw2MDQ1NCksZ2l0U3Rhc2hBcHBseTpmKCJnaXQtc3Rhc2gtYXBwbHkiLDYwNDU1KSxnaXRTdGFzaFBvcDpmKCJnaXQtc3Rhc2gtcG9wIiw2MDQ1NiksdnNjb2RlOmYoInZzY29kZSIsNjA0NTcpLHZzY29kZUluc2lkZXJzOmYoInZzY29kZS1pbnNpZGVycyIsNjA0NTgpLGNvZGVPc3M6ZigiY29kZS1vc3MiLDYwNDU5KSxydW5Db3ZlcmFnZTpmKCJydW4tY292ZXJhZ2UiLDYwNDYwKSxydW5BbGxDb3ZlcmFnZTpmKCJydW4tYWxsLWNvdmVyYWdlIiw2MDQ2MSksY292ZXJhZ2U6ZigiY292ZXJhZ2UiLDYwNDYyKSxnaXRodWJQcm9qZWN0OmYoImdpdGh1Yi1wcm9qZWN0Iiw2MDQ2MyksbWFwVmVydGljYWw6ZigibWFwLXZlcnRpY2FsIiw2MDQ2NCksZm9sZFZlcnRpY2FsOmYoImZvbGQtdmVydGljYWwiLDYwNDY0KSxtYXBWZXJ0aWNhbEZpbGxlZDpmKCJtYXAtdmVydGljYWwtZmlsbGVkIiw2MDQ2NSksZm9sZFZlcnRpY2FsRmlsbGVkOmYoImZvbGQtdmVydGljYWwtZmlsbGVkIiw2MDQ2NSksZ29Ub1NlYXJjaDpmKCJnby10by1zZWFyY2giLDYwNDY2KSxwZXJjZW50YWdlOmYoInBlcmNlbnRhZ2UiLDYwNDY3KSxzb3J0UGVyY2VudGFnZTpmKCJzb3J0LXBlcmNlbnRhZ2UiLDYwNDY3KSxhdHRhY2g6ZigiYXR0YWNoIiw2MDQ2OCl9LGN1PXtkaWFsb2dFcnJvcjpmKCJkaWFsb2ctZXJyb3IiLCJlcnJvciIpLGRpYWxvZ1dhcm5pbmc6ZigiZGlhbG9nLXdhcm5pbmciLCJ3YXJuaW5nIiksZGlhbG9nSW5mbzpmKCJkaWFsb2ctaW5mbyIsImluZm8iKSxkaWFsb2dDbG9zZTpmKCJkaWFsb2ctY2xvc2UiLCJjbG9zZSIpLHRyZWVJdGVtRXhwYW5kZWQ6ZigidHJlZS1pdGVtLWV4cGFuZGVkIiwiY2hldnJvbi1kb3duIiksdHJlZUZpbHRlck9uVHlwZU9uOmYoInRyZWUtZmlsdGVyLW9uLXR5cGUtb24iLCJsaXN0LWZpbHRlciIpLHRyZWVGaWx0ZXJPblR5cGVPZmY6ZigidHJlZS1maWx0ZXItb24tdHlwZS1vZmYiLCJsaXN0LXNlbGVjdGlvbiIpLHRyZWVGaWx0ZXJDbGVhcjpmKCJ0cmVlLWZpbHRlci1jbGVhciIsImNsb3NlIiksdHJlZUl0ZW1Mb2FkaW5nOmYoInRyZWUtaXRlbS1sb2FkaW5nIiwibG9hZGluZyIpLG1lbnVTZWxlY3Rpb246ZigibWVudS1zZWxlY3Rpb24iLCJjaGVjayIpLG1lbnVTdWJtZW51OmYoIm1lbnUtc3VibWVudSIsImNoZXZyb24tcmlnaHQiKSxtZW51QmFyTW9yZTpmKCJtZW51YmFyLW1vcmUiLCJtb3JlIiksc2Nyb2xsYmFyQnV0dG9uTGVmdDpmKCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLCJ0cmlhbmdsZS1sZWZ0Iiksc2Nyb2xsYmFyQnV0dG9uUmlnaHQ6Zigic2Nyb2xsYmFyLWJ1dHRvbi1yaWdodCIsInRyaWFuZ2xlLXJpZ2h0Iiksc2Nyb2xsYmFyQnV0dG9uVXA6Zigic2Nyb2xsYmFyLWJ1dHRvbi11cCIsInRyaWFuZ2xlLXVwIiksc2Nyb2xsYmFyQnV0dG9uRG93bjpmKCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLCJ0cmlhbmdsZS1kb3duIiksdG9vbEJhck1vcmU6ZigidG9vbGJhci1tb3JlIiwibW9yZSIpLHF1aWNrSW5wdXRCYWNrOmYoInF1aWNrLWlucHV0LWJhY2siLCJhcnJvdy1sZWZ0IiksZHJvcERvd25CdXR0b246ZigiZHJvcC1kb3duLWJ1dHRvbiIsNjAwODQpLHN5bWJvbEN1c3RvbUNvbG9yOmYoInN5bWJvbC1jdXN0b21jb2xvciIsNjAyNTIpLGV4cG9ydEljb246ZigiZXhwb3J0Iiw2MDMzMiksd29ya3NwYWNlVW5zcGVjaWZpZWQ6Zigid29ya3NwYWNlLXVuc3BlY2lmaWVkIiw2MDM1NSksbmV3TGluZTpmKCJuZXdsaW5lIiw2MDM5NCksdGh1bWJzRG93bkZpbGxlZDpmKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic1VwRmlsbGVkOmYoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGdpdEZldGNoOmYoImdpdC1mZXRjaCIsNjA0NDUpLGxpZ2h0YnVsYlNwYXJrbGVBdXRvZml4OmYoImxpZ2h0YnVsYi1zcGFya2xlLWF1dG9maXgiLDYwNDQ3KSxkZWJ1Z0JyZWFrcG9pbnRQZW5kaW5nOmYoImRlYnVnLWJyZWFrcG9pbnQtcGVuZGluZyIsNjAzNzcpfSxWPXsuLi51dSwuLi5jdX07Y2xhc3MgZnV7Y29uc3RydWN0b3IoKXt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cz1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBMZSx0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9aGFuZGxlQ2hhbmdlKHQpe3RoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6dCxjaGFuZ2VkQ29sb3JNYXA6ITF9KX1yZWdpc3Rlcih0LG4pe3JldHVybiB0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5zZXQodCxuKSx0aGlzLmhhbmRsZUNoYW5nZShbdF0pLG5uKCgpPT57dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KHQpPT09biYmKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmRlbGV0ZSh0KSx0aGlzLmhhbmRsZUNoYW5nZShbdF0pKX0pfWdldCh0KXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KHQpfHxudWxsfXJlZ2lzdGVyRmFjdG9yeSh0LG4pe3RoaXMuX2ZhY3Rvcmllcy5nZXQodCk/LmRpc3Bvc2UoKTtjb25zdCByPW5ldyBodSh0aGlzLHQsbik7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQodCxyKSxubigoKT0+e2NvbnN0IGk9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTshaXx8aSE9PXJ8fCh0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKHQpLGkuZGlzcG9zZSgpKX0pfWFzeW5jIGdldE9yQ3JlYXRlKHQpe2NvbnN0IG49dGhpcy5nZXQodCk7aWYobilyZXR1cm4gbjtjb25zdCByPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuIXJ8fHIuaXNSZXNvbHZlZD9udWxsOihhd2FpdCByLnJlc29sdmUoKSx0aGlzLmdldCh0KSl9aXNSZXNvbHZlZCh0KXtpZih0aGlzLmdldCh0KSlyZXR1cm4hMDtjb25zdCByPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuISEoIXJ8fHIuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAodCl7dGhpcy5fY29sb3JNYXA9dCx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19Y2xhc3MgaHUgZXh0ZW5kcyBmdHtnZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWNvbnN0cnVjdG9yKHQsbixyKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX2ZhY3Rvcnk9cix0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9YXN5bmMgcmVzb2x2ZSgpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX1hc3luYyBfY3JlYXRlKCl7Y29uc3QgdD1hd2FpdCB0aGlzLl9mYWN0b3J5LnRva2VuaXphdGlvblN1cHBvcnQ7dGhpcy5faXNSZXNvbHZlZD0hMCx0JiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCx0KSl9fWNsYXNzIGR1e2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLm9mZnNldD10LHRoaXMudHlwZT1uLHRoaXMubGFuZ3VhZ2U9cix0aGlzLl90b2tlbkJyYW5kPXZvaWQgMH10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fXZhciBUaTsoZnVuY3Rpb24oZSl7ZVtlLkluY3JlYXNlPTBdPSJJbmNyZWFzZSIsZVtlLkRlY3JlYXNlPTFdPSJEZWNyZWFzZSJ9KShUaXx8KFRpPXt9KSk7dmFyIFBpOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxWLnN5bWJvbE1ldGhvZCksdC5zZXQoMSxWLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgyLFYuc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsVi5zeW1ib2xGaWVsZCksdC5zZXQoNCxWLnN5bWJvbFZhcmlhYmxlKSx0LnNldCg1LFYuc3ltYm9sQ2xhc3MpLHQuc2V0KDYsVi5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsVi5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDgsVi5zeW1ib2xNb2R1bGUpLHQuc2V0KDksVi5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsVi5zeW1ib2xFdmVudCksdC5zZXQoMTEsVi5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsVi5zeW1ib2xVbml0KSx0LnNldCgxMyxWLnN5bWJvbFZhbHVlKSx0LnNldCgxNSxWLnN5bWJvbEVudW0pLHQuc2V0KDE0LFYuc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LFYuc3ltYm9sRW51bSksdC5zZXQoMTYsVi5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxWLnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LFYuc3ltYm9sU25pcHBldCksdC5zZXQoMTgsVi5zeW1ib2xUZXh0KSx0LnNldCgxOSxWLnN5bWJvbENvbG9yKSx0LnNldCgyMCxWLnN5bWJvbEZpbGUpLHQuc2V0KDIxLFYuc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixWLnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxWLnN5bWJvbEZvbGRlciksdC5zZXQoMjQsVi5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxWLmFjY291bnQpLHQuc2V0KDI2LFYuaXNzdWVzKTtmdW5jdGlvbiBuKHMpe2xldCBhPXQuZ2V0KHMpO3JldHVybiBhfHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitzKSxhPVYuc3ltYm9sUHJvcGVydHkpLGF9ZS50b0ljb249bjtjb25zdCByPW5ldyBNYXA7ci5zZXQoIm1ldGhvZCIsMCksci5zZXQoImZ1bmN0aW9uIiwxKSxyLnNldCgiY29uc3RydWN0b3IiLDIpLHIuc2V0KCJmaWVsZCIsMyksci5zZXQoInZhcmlhYmxlIiw0KSxyLnNldCgiY2xhc3MiLDUpLHIuc2V0KCJzdHJ1Y3QiLDYpLHIuc2V0KCJpbnRlcmZhY2UiLDcpLHIuc2V0KCJtb2R1bGUiLDgpLHIuc2V0KCJwcm9wZXJ0eSIsOSksci5zZXQoImV2ZW50IiwxMCksci5zZXQoIm9wZXJhdG9yIiwxMSksci5zZXQoInVuaXQiLDEyKSxyLnNldCgidmFsdWUiLDEzKSxyLnNldCgiY29uc3RhbnQiLDE0KSxyLnNldCgiZW51bSIsMTUpLHIuc2V0KCJlbnVtLW1lbWJlciIsMTYpLHIuc2V0KCJlbnVtTWVtYmVyIiwxNiksci5zZXQoImtleXdvcmQiLDE3KSxyLnNldCgic25pcHBldCIsMjcpLHIuc2V0KCJ0ZXh0IiwxOCksci5zZXQoImNvbG9yIiwxOSksci5zZXQoImZpbGUiLDIwKSxyLnNldCgicmVmZXJlbmNlIiwyMSksci5zZXQoImN1c3RvbWNvbG9yIiwyMiksci5zZXQoImZvbGRlciIsMjMpLHIuc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLHIuc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCksci5zZXQoImFjY291bnQiLDI1KSxyLnNldCgiaXNzdWUiLDI2KTtmdW5jdGlvbiBpKHMsYSl7bGV0IGw9ci5nZXQocyk7cmV0dXJuIHR5cGVvZiBsPiJ1IiYmIWEmJihsPTkpLGx9ZS5mcm9tU3RyaW5nPWl9KShQaXx8KFBpPXt9KSk7dmFyIElpOyhmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSkoSWl8fChJaT17fSkpO3ZhciBGaTsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuUGFzdGVBcz0xXT0iUGFzdGVBcyJ9KShGaXx8KEZpPXt9KSk7dmFyIFZpOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KShWaXx8KFZpPXt9KSk7dmFyIERpOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoRGl8fChEaT17fSkpLFgoIkFycmF5IiwiYXJyYXkiKSxYKCJCb29sZWFuIiwiYm9vbGVhbiIpLFgoIkNsYXNzIiwiY2xhc3MiKSxYKCJDb25zdGFudCIsImNvbnN0YW50IiksWCgiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIpLFgoIkVudW0iLCJlbnVtZXJhdGlvbiIpLFgoIkVudW1NZW1iZXIiLCJlbnVtZXJhdGlvbiBtZW1iZXIiKSxYKCJFdmVudCIsImV2ZW50IiksWCgiRmllbGQiLCJmaWVsZCIpLFgoIkZpbGUiLCJmaWxlIiksWCgiRnVuY3Rpb24iLCJmdW5jdGlvbiIpLFgoIkludGVyZmFjZSIsImludGVyZmFjZSIpLFgoIktleSIsImtleSIpLFgoIk1ldGhvZCIsIm1ldGhvZCIpLFgoIk1vZHVsZSIsIm1vZHVsZSIpLFgoIk5hbWVzcGFjZSIsIm5hbWVzcGFjZSIpLFgoIk51bGwiLCJudWxsIiksWCgiTnVtYmVyIiwibnVtYmVyIiksWCgiT2JqZWN0Iiwib2JqZWN0IiksWCgiT3BlcmF0b3IiLCJvcGVyYXRvciIpLFgoIlBhY2thZ2UiLCJwYWNrYWdlIiksWCgiUHJvcGVydHkiLCJwcm9wZXJ0eSIpLFgoIlN0cmluZyIsInN0cmluZyIpLFgoIlN0cnVjdCIsInN0cnVjdCIpLFgoIlR5cGVQYXJhbWV0ZXIiLCJ0eXBlIHBhcmFtZXRlciIpLFgoIlZhcmlhYmxlIiwidmFyaWFibGUiKTt2YXIgT2k7KGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLFYuc3ltYm9sRmlsZSksdC5zZXQoMSxWLnN5bWJvbE1vZHVsZSksdC5zZXQoMixWLnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxWLnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsVi5zeW1ib2xDbGFzcyksdC5zZXQoNSxWLnN5bWJvbE1ldGhvZCksdC5zZXQoNixWLnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LFYuc3ltYm9sRmllbGQpLHQuc2V0KDgsVi5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxWLnN5bWJvbEVudW0pLHQuc2V0KDEwLFYuc3ltYm9sSW50ZXJmYWNlKSx0LnNldCgxMSxWLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixWLnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxWLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNCxWLnN5bWJvbFN0cmluZyksdC5zZXQoMTUsVi5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LFYuc3ltYm9sQm9vbGVhbiksdC5zZXQoMTcsVi5zeW1ib2xBcnJheSksdC5zZXQoMTgsVi5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LFYuc3ltYm9sS2V5KSx0LnNldCgyMCxWLnN5bWJvbE51bGwpLHQuc2V0KDIxLFYuc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsVi5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDIzLFYuc3ltYm9sRXZlbnQpLHQuc2V0KDI0LFYuc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LFYuc3ltYm9sVHlwZVBhcmFtZXRlcik7ZnVuY3Rpb24gbihyKXtsZXQgaT10LmdldChyKTtyZXR1cm4gaXx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK3IpLGk9Vi5zeW1ib2xQcm9wZXJ0eSksaX1lLnRvSWNvbj1ufSkoT2l8fChPaT17fSkpO2xldCBBMT0oZmU9Y2xhc3N7c3RhdGljIGZyb21WYWx1ZSh0KXtzd2l0Y2godCl7Y2FzZSJjb21tZW50IjpyZXR1cm4gZmUuQ29tbWVudDtjYXNlImltcG9ydHMiOnJldHVybiBmZS5JbXBvcnRzO2Nhc2UicmVnaW9uIjpyZXR1cm4gZmUuUmVnaW9ufXJldHVybiBuZXcgZmUodCl9Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10fX0sZmUuQ29tbWVudD1uZXcgZmUoImNvbW1lbnQiKSxmZS5JbXBvcnRzPW5ldyBmZSgiaW1wb3J0cyIpLGZlLlJlZ2lvbj1uZXcgZmUoInJlZ2lvbiIpLGZlKTt2YXIgQmk7KGZ1bmN0aW9uKGUpe2VbZS5BSUdlbmVyYXRlZD0xXT0iQUlHZW5lcmF0ZWQifSkoQml8fChCaT17fSkpO3ZhciBVaTsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoVWl8fChVaT17fSkpO3ZhciBxaTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4hbnx8dHlwZW9mIG4hPSJvYmplY3QiPyExOnR5cGVvZiBuLmlkPT0ic3RyaW5nIiYmdHlwZW9mIG4udGl0bGU9PSJzdHJpbmcifWUuaXM9dH0pKHFpfHwocWk9e30pKTt2YXIgJGk7KGZ1bmN0aW9uKGUpe2VbZS5UeXBlPTFdPSJUeXBlIixlW2UuUGFyYW1ldGVyPTJdPSJQYXJhbWV0ZXIifSkoJGl8fCgkaT17fSkpLG5ldyBmdTt2YXIgamk7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKGppfHwoamk9e30pKTt2YXIgSGk7KGZ1bmN0aW9uKGUpe2VbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuRGlzYWJsZWQ9MV09IkRpc2FibGVkIixlW2UuRW5hYmxlZD0yXT0iRW5hYmxlZCJ9KShIaXx8KEhpPXt9KSk7dmFyIFdpOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5BdXRvPTJdPSJBdXRvIn0pKFdpfHwoV2k9e30pKTt2YXIgemk7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuS2VlcFdoaXRlc3BhY2U9MV09IktlZXBXaGl0ZXNwYWNlIixlW2UuSW5zZXJ0QXNTbmlwcGV0PTRdPSJJbnNlcnRBc1NuaXBwZXQifSkoeml8fCh6aT17fSkpO3ZhciBHaTsoZnVuY3Rpb24oZSl7ZVtlLk1ldGhvZD0wXT0iTWV0aG9kIixlW2UuRnVuY3Rpb249MV09IkZ1bmN0aW9uIixlW2UuQ29uc3RydWN0b3I9Ml09IkNvbnN0cnVjdG9yIixlW2UuRmllbGQ9M109IkZpZWxkIixlW2UuVmFyaWFibGU9NF09IlZhcmlhYmxlIixlW2UuQ2xhc3M9NV09IkNsYXNzIixlW2UuU3RydWN0PTZdPSJTdHJ1Y3QiLGVbZS5JbnRlcmZhY2U9N109IkludGVyZmFjZSIsZVtlLk1vZHVsZT04XT0iTW9kdWxlIixlW2UuUHJvcGVydHk9OV09IlByb3BlcnR5IixlW2UuRXZlbnQ9MTBdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTExXT0iT3BlcmF0b3IiLGVbZS5Vbml0PTEyXT0iVW5pdCIsZVtlLlZhbHVlPTEzXT0iVmFsdWUiLGVbZS5Db25zdGFudD0xNF09IkNvbnN0YW50IixlW2UuRW51bT0xNV09IkVudW0iLGVbZS5FbnVtTWVtYmVyPTE2XT0iRW51bU1lbWJlciIsZVtlLktleXdvcmQ9MTddPSJLZXl3b3JkIixlW2UuVGV4dD0xOF09IlRleHQiLGVbZS5Db2xvcj0xOV09IkNvbG9yIixlW2UuRmlsZT0yMF09IkZpbGUiLGVbZS5SZWZlcmVuY2U9MjFdPSJSZWZlcmVuY2UiLGVbZS5DdXN0b21jb2xvcj0yMl09IkN1c3RvbWNvbG9yIixlW2UuRm9sZGVyPTIzXT0iRm9sZGVyIixlW2UuVHlwZVBhcmFtZXRlcj0yNF09IlR5cGVQYXJhbWV0ZXIiLGVbZS5Vc2VyPTI1XT0iVXNlciIsZVtlLklzc3VlPTI2XT0iSXNzdWUiLGVbZS5TbmlwcGV0PTI3XT0iU25pcHBldCJ9KShHaXx8KEdpPXt9KSk7dmFyIEppOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShKaXx8KEppPXt9KSk7dmFyIFhpOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTFdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucz0yXT0iVHJpZ2dlckZvckluY29tcGxldGVDb21wbGV0aW9ucyJ9KShYaXx8KFhpPXt9KSk7dmFyIFFpOyhmdW5jdGlvbihlKXtlW2UuRVhBQ1Q9MF09IkVYQUNUIixlW2UuQUJPVkU9MV09IkFCT1ZFIixlW2UuQkVMT1c9Ml09IkJFTE9XIn0pKFFpfHwoUWk9e30pKTt2YXIgWmk7KGZ1bmN0aW9uKGUpe2VbZS5Ob3RTZXQ9MF09Ik5vdFNldCIsZVtlLkNvbnRlbnRGbHVzaD0xXT0iQ29udGVudEZsdXNoIixlW2UuUmVjb3ZlckZyb21NYXJrZXJzPTJdPSJSZWNvdmVyRnJvbU1hcmtlcnMiLGVbZS5FeHBsaWNpdD0zXT0iRXhwbGljaXQiLGVbZS5QYXN0ZT00XT0iUGFzdGUiLGVbZS5VbmRvPTVdPSJVbmRvIixlW2UuUmVkbz02XT0iUmVkbyJ9KShaaXx8KFppPXt9KSk7dmFyIFlpOyhmdW5jdGlvbihlKXtlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShZaXx8KFlpPXt9KSk7dmFyIEtpOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoS2l8fChLaT17fSkpO3ZhciBlczsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwPTFdPSJLZWVwIixlW2UuQnJhY2tldHM9Ml09IkJyYWNrZXRzIixlW2UuQWR2YW5jZWQ9M109IkFkdmFuY2VkIixlW2UuRnVsbD00XT0iRnVsbCJ9KShlc3x8KGVzPXt9KSk7dmFyIHRzOyhmdW5jdGlvbihlKXtlW2UuYWNjZXB0U3VnZ2VzdGlvbk9uQ29tbWl0Q2hhcmFjdGVyPTBdPSJhY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXIiLGVbZS5hY2NlcHRTdWdnZXN0aW9uT25FbnRlcj0xXT0iYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXIiLGVbZS5hY2Nlc3NpYmlsaXR5U3VwcG9ydD0yXT0iYWNjZXNzaWJpbGl0eVN1cHBvcnQiLGVbZS5hY2Nlc3NpYmlsaXR5UGFnZVNpemU9M109ImFjY2Vzc2liaWxpdHlQYWdlU2l6ZSIsZVtlLmFyaWFMYWJlbD00XT0iYXJpYUxhYmVsIixlW2UuYXJpYVJlcXVpcmVkPTVdPSJhcmlhUmVxdWlyZWQiLGVbZS5hdXRvQ2xvc2luZ0JyYWNrZXRzPTZdPSJhdXRvQ2xvc2luZ0JyYWNrZXRzIixlW2UuYXV0b0Nsb3NpbmdDb21tZW50cz03XT0iYXV0b0Nsb3NpbmdDb21tZW50cyIsZVtlLnNjcmVlblJlYWRlckFubm91bmNlSW5saW5lU3VnZ2VzdGlvbj04XT0ic2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uIixlW2UuYXV0b0Nsb3NpbmdEZWxldGU9OV09ImF1dG9DbG9zaW5nRGVsZXRlIixlW2UuYXV0b0Nsb3NpbmdPdmVydHlwZT0xMF09ImF1dG9DbG9zaW5nT3ZlcnR5cGUiLGVbZS5hdXRvQ2xvc2luZ1F1b3Rlcz0xMV09ImF1dG9DbG9zaW5nUXVvdGVzIixlW2UuYXV0b0luZGVudD0xMl09ImF1dG9JbmRlbnQiLGVbZS5hdXRvbWF0aWNMYXlvdXQ9MTNdPSJhdXRvbWF0aWNMYXlvdXQiLGVbZS5hdXRvU3Vycm91bmQ9MTRdPSJhdXRvU3Vycm91bmQiLGVbZS5icmFja2V0UGFpckNvbG9yaXphdGlvbj0xNV09ImJyYWNrZXRQYWlyQ29sb3JpemF0aW9uIixlW2UuZ3VpZGVzPTE2XT0iZ3VpZGVzIixlW2UuY29kZUxlbnM9MTddPSJjb2RlTGVucyIsZVtlLmNvZGVMZW5zRm9udEZhbWlseT0xOF09ImNvZGVMZW5zRm9udEZhbWlseSIsZVtlLmNvZGVMZW5zRm9udFNpemU9MTldPSJjb2RlTGVuc0ZvbnRTaXplIixlW2UuY29sb3JEZWNvcmF0b3JzPTIwXT0iY29sb3JEZWNvcmF0b3JzIixlW2UuY29sb3JEZWNvcmF0b3JzTGltaXQ9MjFdPSJjb2xvckRlY29yYXRvcnNMaW1pdCIsZVtlLmNvbHVtblNlbGVjdGlvbj0yMl09ImNvbHVtblNlbGVjdGlvbiIsZVtlLmNvbW1lbnRzPTIzXT0iY29tbWVudHMiLGVbZS5jb250ZXh0bWVudT0yNF09ImNvbnRleHRtZW51IixlW2UuY29weVdpdGhTeW50YXhIaWdobGlnaHRpbmc9MjVdPSJjb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZyIsZVtlLmN1cnNvckJsaW5raW5nPTI2XT0iY3Vyc29yQmxpbmtpbmciLGVbZS5jdXJzb3JTbW9vdGhDYXJldEFuaW1hdGlvbj0yN109ImN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uIixlW2UuY3Vyc29yU3R5bGU9MjhdPSJjdXJzb3JTdHlsZSIsZVtlLmN1cnNvclN1cnJvdW5kaW5nTGluZXM9MjldPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlPTMwXT0iY3Vyc29yU3Vycm91bmRpbmdMaW5lc1N0eWxlIixlW2UuY3Vyc29yV2lkdGg9MzFdPSJjdXJzb3JXaWR0aCIsZVtlLmRpc2FibGVMYXllckhpbnRpbmc9MzJdPSJkaXNhYmxlTGF5ZXJIaW50aW5nIixlW2UuZGlzYWJsZU1vbm9zcGFjZU9wdGltaXphdGlvbnM9MzNdPSJkaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucyIsZVtlLmRvbVJlYWRPbmx5PTM0XT0iZG9tUmVhZE9ubHkiLGVbZS5kcmFnQW5kRHJvcD0zNV09ImRyYWdBbmREcm9wIixlW2UuZHJvcEludG9FZGl0b3I9MzZdPSJkcm9wSW50b0VkaXRvciIsZVtlLmVtcHR5U2VsZWN0aW9uQ2xpcGJvYXJkPTM3XT0iZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQiLGVbZS5leHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nPTM4XT0iZXhwZXJpbWVudGFsV2hpdGVzcGFjZVJlbmRlcmluZyIsZVtlLmV4dHJhRWRpdG9yQ2xhc3NOYW1lPTM5XT0iZXh0cmFFZGl0b3JDbGFzc05hbWUiLGVbZS5mYXN0U2Nyb2xsU2Vuc2l0aXZpdHk9NDBdPSJmYXN0U2Nyb2xsU2Vuc2l0aXZpdHkiLGVbZS5maW5kPTQxXT0iZmluZCIsZVtlLmZpeGVkT3ZlcmZsb3dXaWRnZXRzPTQyXT0iZml4ZWRPdmVyZmxvd1dpZGdldHMiLGVbZS5mb2xkaW5nPTQzXT0iZm9sZGluZyIsZVtlLmZvbGRpbmdTdHJhdGVneT00NF09ImZvbGRpbmdTdHJhdGVneSIsZVtlLmZvbGRpbmdIaWdobGlnaHQ9NDVdPSJmb2xkaW5nSGlnaGxpZ2h0IixlW2UuZm9sZGluZ0ltcG9ydHNCeURlZmF1bHQ9NDZdPSJmb2xkaW5nSW1wb3J0c0J5RGVmYXVsdCIsZVtlLmZvbGRpbmdNYXhpbXVtUmVnaW9ucz00N109ImZvbGRpbmdNYXhpbXVtUmVnaW9ucyIsZVtlLnVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZT00OF09InVuZm9sZE9uQ2xpY2tBZnRlckVuZE9mTGluZSIsZVtlLmZvbnRGYW1pbHk9NDldPSJmb250RmFtaWx5IixlW2UuZm9udEluZm89NTBdPSJmb250SW5mbyIsZVtlLmZvbnRMaWdhdHVyZXM9NTFdPSJmb250TGlnYXR1cmVzIixlW2UuZm9udFNpemU9NTJdPSJmb250U2l6ZSIsZVtlLmZvbnRXZWlnaHQ9NTNdPSJmb250V2VpZ2h0IixlW2UuZm9udFZhcmlhdGlvbnM9NTRdPSJmb250VmFyaWF0aW9ucyIsZVtlLmZvcm1hdE9uUGFzdGU9NTVdPSJmb3JtYXRPblBhc3RlIixlW2UuZm9ybWF0T25UeXBlPTU2XT0iZm9ybWF0T25UeXBlIixlW2UuZ2x5cGhNYXJnaW49NTddPSJnbHlwaE1hcmdpbiIsZVtlLmdvdG9Mb2NhdGlvbj01OF09ImdvdG9Mb2NhdGlvbiIsZVtlLmhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXI9NTldPSJoaWRlQ3Vyc29ySW5PdmVydmlld1J1bGVyIixlW2UuaG92ZXI9NjBdPSJob3ZlciIsZVtlLmluRGlmZkVkaXRvcj02MV09ImluRGlmZkVkaXRvciIsZVtlLmlubGluZVN1Z2dlc3Q9NjJdPSJpbmxpbmVTdWdnZXN0IixlW2UuaW5saW5lRWRpdD02M109ImlubGluZUVkaXQiLGVbZS5sZXR0ZXJTcGFjaW5nPTY0XT0ibGV0dGVyU3BhY2luZyIsZVtlLmxpZ2h0YnVsYj02NV09ImxpZ2h0YnVsYiIsZVtlLmxpbmVEZWNvcmF0aW9uc1dpZHRoPTY2XT0ibGluZURlY29yYXRpb25zV2lkdGgiLGVbZS5saW5lSGVpZ2h0PTY3XT0ibGluZUhlaWdodCIsZVtlLmxpbmVOdW1iZXJzPTY4XT0ibGluZU51bWJlcnMiLGVbZS5saW5lTnVtYmVyc01pbkNoYXJzPTY5XT0ibGluZU51bWJlcnNNaW5DaGFycyIsZVtlLmxpbmtlZEVkaXRpbmc9NzBdPSJsaW5rZWRFZGl0aW5nIixlW2UubGlua3M9NzFdPSJsaW5rcyIsZVtlLm1hdGNoQnJhY2tldHM9NzJdPSJtYXRjaEJyYWNrZXRzIixlW2UubWluaW1hcD03M109Im1pbmltYXAiLGVbZS5tb3VzZVN0eWxlPTc0XT0ibW91c2VTdHlsZSIsZVtlLm1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eT03NV09Im1vdXNlV2hlZWxTY3JvbGxTZW5zaXRpdml0eSIsZVtlLm1vdXNlV2hlZWxab29tPTc2XT0ibW91c2VXaGVlbFpvb20iLGVbZS5tdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmc9NzddPSJtdWx0aUN1cnNvck1lcmdlT3ZlcmxhcHBpbmciLGVbZS5tdWx0aUN1cnNvck1vZGlmaWVyPTc4XT0ibXVsdGlDdXJzb3JNb2RpZmllciIsZVtlLm11bHRpQ3Vyc29yUGFzdGU9NzldPSJtdWx0aUN1cnNvclBhc3RlIixlW2UubXVsdGlDdXJzb3JMaW1pdD04MF09Im11bHRpQ3Vyc29yTGltaXQiLGVbZS5vY2N1cnJlbmNlc0hpZ2hsaWdodD04MV09Im9jY3VycmVuY2VzSGlnaGxpZ2h0IixlW2Uub3ZlcnZpZXdSdWxlckJvcmRlcj04Ml09Im92ZXJ2aWV3UnVsZXJCb3JkZXIiLGVbZS5vdmVydmlld1J1bGVyTGFuZXM9ODNdPSJvdmVydmlld1J1bGVyTGFuZXMiLGVbZS5wYWRkaW5nPTg0XT0icGFkZGluZyIsZVtlLnBhc3RlQXM9ODVdPSJwYXN0ZUFzIixlW2UucGFyYW1ldGVySGludHM9ODZdPSJwYXJhbWV0ZXJIaW50cyIsZVtlLnBlZWtXaWRnZXREZWZhdWx0Rm9jdXM9ODddPSJwZWVrV2lkZ2V0RGVmYXVsdEZvY3VzIixlW2UucGxhY2Vob2xkZXI9ODhdPSJwbGFjZWhvbGRlciIsZVtlLmRlZmluaXRpb25MaW5rT3BlbnNJblBlZWs9ODldPSJkZWZpbml0aW9uTGlua09wZW5zSW5QZWVrIixlW2UucXVpY2tTdWdnZXN0aW9ucz05MF09InF1aWNrU3VnZ2VzdGlvbnMiLGVbZS5xdWlja1N1Z2dlc3Rpb25zRGVsYXk9OTFdPSJxdWlja1N1Z2dlc3Rpb25zRGVsYXkiLGVbZS5yZWFkT25seT05Ml09InJlYWRPbmx5IixlW2UucmVhZE9ubHlNZXNzYWdlPTkzXT0icmVhZE9ubHlNZXNzYWdlIixlW2UucmVuYW1lT25UeXBlPTk0XT0icmVuYW1lT25UeXBlIixlW2UucmVuZGVyQ29udHJvbENoYXJhY3RlcnM9OTVdPSJyZW5kZXJDb250cm9sQ2hhcmFjdGVycyIsZVtlLnJlbmRlckZpbmFsTmV3bGluZT05Nl09InJlbmRlckZpbmFsTmV3bGluZSIsZVtlLnJlbmRlckxpbmVIaWdobGlnaHQ9OTddPSJyZW5kZXJMaW5lSGlnaGxpZ2h0IixlW2UucmVuZGVyTGluZUhpZ2hsaWdodE9ubHlXaGVuRm9jdXM9OThdPSJyZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cyIsZVtlLnJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucz05OV09InJlbmRlclZhbGlkYXRpb25EZWNvcmF0aW9ucyIsZVtlLnJlbmRlcldoaXRlc3BhY2U9MTAwXT0icmVuZGVyV2hpdGVzcGFjZSIsZVtlLnJldmVhbEhvcml6b250YWxSaWdodFBhZGRpbmc9MTAxXT0icmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZyIsZVtlLnJvdW5kZWRTZWxlY3Rpb249MTAyXT0icm91bmRlZFNlbGVjdGlvbiIsZVtlLnJ1bGVycz0xMDNdPSJydWxlcnMiLGVbZS5zY3JvbGxiYXI9MTA0XT0ic2Nyb2xsYmFyIixlW2Uuc2Nyb2xsQmV5b25kTGFzdENvbHVtbj0xMDVdPSJzY3JvbGxCZXlvbmRMYXN0Q29sdW1uIixlW2Uuc2Nyb2xsQmV5b25kTGFzdExpbmU9MTA2XT0ic2Nyb2xsQmV5b25kTGFzdExpbmUiLGVbZS5zY3JvbGxQcmVkb21pbmFudEF4aXM9MTA3XT0ic2Nyb2xsUHJlZG9taW5hbnRBeGlzIixlW2Uuc2VsZWN0aW9uQ2xpcGJvYXJkPTEwOF09InNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLnNlbGVjdGlvbkhpZ2hsaWdodD0xMDldPSJzZWxlY3Rpb25IaWdobGlnaHQiLGVbZS5zZWxlY3RPbkxpbmVOdW1iZXJzPTExMF09InNlbGVjdE9uTGluZU51bWJlcnMiLGVbZS5zaG93Rm9sZGluZ0NvbnRyb2xzPTExMV09InNob3dGb2xkaW5nQ29udHJvbHMiLGVbZS5zaG93VW51c2VkPTExMl09InNob3dVbnVzZWQiLGVbZS5zbmlwcGV0U3VnZ2VzdGlvbnM9MTEzXT0ic25pcHBldFN1Z2dlc3Rpb25zIixlW2Uuc21hcnRTZWxlY3Q9MTE0XT0ic21hcnRTZWxlY3QiLGVbZS5zbW9vdGhTY3JvbGxpbmc9MTE1XT0ic21vb3RoU2Nyb2xsaW5nIixlW2Uuc3RpY2t5U2Nyb2xsPTExNl09InN0aWNreVNjcm9sbCIsZVtlLnN0aWNreVRhYlN0b3BzPTExN109InN0aWNreVRhYlN0b3BzIixlW2Uuc3RvcFJlbmRlcmluZ0xpbmVBZnRlcj0xMThdPSJzdG9wUmVuZGVyaW5nTGluZUFmdGVyIixlW2Uuc3VnZ2VzdD0xMTldPSJzdWdnZXN0IixlW2Uuc3VnZ2VzdEZvbnRTaXplPTEyMF09InN1Z2dlc3RGb250U2l6ZSIsZVtlLnN1Z2dlc3RMaW5lSGVpZ2h0PTEyMV09InN1Z2dlc3RMaW5lSGVpZ2h0IixlW2Uuc3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnM9MTIyXT0ic3VnZ2VzdE9uVHJpZ2dlckNoYXJhY3RlcnMiLGVbZS5zdWdnZXN0U2VsZWN0aW9uPTEyM109InN1Z2dlc3RTZWxlY3Rpb24iLGVbZS50YWJDb21wbGV0aW9uPTEyNF09InRhYkNvbXBsZXRpb24iLGVbZS50YWJJbmRleD0xMjVdPSJ0YWJJbmRleCIsZVtlLnVuaWNvZGVIaWdobGlnaHRpbmc9MTI2XT0idW5pY29kZUhpZ2hsaWdodGluZyIsZVtlLnVudXN1YWxMaW5lVGVybWluYXRvcnM9MTI3XT0idW51c3VhbExpbmVUZXJtaW5hdG9ycyIsZVtlLnVzZVNoYWRvd0RPTT0xMjhdPSJ1c2VTaGFkb3dET00iLGVbZS51c2VUYWJTdG9wcz0xMjldPSJ1c2VUYWJTdG9wcyIsZVtlLndvcmRCcmVhaz0xMzBdPSJ3b3JkQnJlYWsiLGVbZS53b3JkU2VnbWVudGVyTG9jYWxlcz0xMzFdPSJ3b3JkU2VnbWVudGVyTG9jYWxlcyIsZVtlLndvcmRTZXBhcmF0b3JzPTEzMl09IndvcmRTZXBhcmF0b3JzIixlW2Uud29yZFdyYXA9MTMzXT0id29yZFdyYXAiLGVbZS53b3JkV3JhcEJyZWFrQWZ0ZXJDaGFyYWN0ZXJzPTEzNF09IndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnMiLGVbZS53b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycz0xMzVdPSJ3b3JkV3JhcEJyZWFrQmVmb3JlQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQ29sdW1uPTEzNl09IndvcmRXcmFwQ29sdW1uIixlW2Uud29yZFdyYXBPdmVycmlkZTE9MTM3XT0id29yZFdyYXBPdmVycmlkZTEiLGVbZS53b3JkV3JhcE92ZXJyaWRlMj0xMzhdPSJ3b3JkV3JhcE92ZXJyaWRlMiIsZVtlLndyYXBwaW5nSW5kZW50PTEzOV09IndyYXBwaW5nSW5kZW50IixlW2Uud3JhcHBpbmdTdHJhdGVneT0xNDBdPSJ3cmFwcGluZ1N0cmF0ZWd5IixlW2Uuc2hvd0RlcHJlY2F0ZWQ9MTQxXT0ic2hvd0RlcHJlY2F0ZWQiLGVbZS5pbmxheUhpbnRzPTE0Ml09ImlubGF5SGludHMiLGVbZS5lZGl0b3JDbGFzc05hbWU9MTQzXT0iZWRpdG9yQ2xhc3NOYW1lIixlW2UucGl4ZWxSYXRpbz0xNDRdPSJwaXhlbFJhdGlvIixlW2UudGFiRm9jdXNNb2RlPTE0NV09InRhYkZvY3VzTW9kZSIsZVtlLmxheW91dEluZm89MTQ2XT0ibGF5b3V0SW5mbyIsZVtlLndyYXBwaW5nSW5mbz0xNDddPSJ3cmFwcGluZ0luZm8iLGVbZS5kZWZhdWx0Q29sb3JEZWNvcmF0b3JzPTE0OF09ImRlZmF1bHRDb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbj0xNDldPSJjb2xvckRlY29yYXRvcnNBY3RpdmF0ZWRPbiIsZVtlLmlubGluZUNvbXBsZXRpb25zQWNjZXNzaWJpbGl0eVZlcmJvc2U9MTUwXT0iaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZSJ9KSh0c3x8KHRzPXt9KSk7dmFyIG5zOyhmdW5jdGlvbihlKXtlW2UuVGV4dERlZmluZWQ9MF09IlRleHREZWZpbmVkIixlW2UuTEY9MV09IkxGIixlW2UuQ1JMRj0yXT0iQ1JMRiJ9KShuc3x8KG5zPXt9KSk7dmFyIHJzOyhmdW5jdGlvbihlKXtlW2UuTEY9MF09IkxGIixlW2UuQ1JMRj0xXT0iQ1JMRiJ9KShyc3x8KHJzPXt9KSk7dmFyIGlzOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9M109IlJpZ2h0In0pKGlzfHwoaXM9e30pKTt2YXIgc3M7KGZ1bmN0aW9uKGUpe2VbZS5JbmNyZWFzZT0wXT0iSW5jcmVhc2UiLGVbZS5EZWNyZWFzZT0xXT0iRGVjcmVhc2UifSkoc3N8fChzcz17fSkpO3ZhciBhczsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5JbmRlbnQ9MV09IkluZGVudCIsZVtlLkluZGVudE91dGRlbnQ9Ml09IkluZGVudE91dGRlbnQiLGVbZS5PdXRkZW50PTNdPSJPdXRkZW50In0pKGFzfHwoYXM9e30pKTt2YXIgb3M7KGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifSkob3N8fChvcz17fSkpO3ZhciBsczsoZnVuY3Rpb24oZSl7ZVtlLlR5cGU9MV09IlR5cGUiLGVbZS5QYXJhbWV0ZXI9Ml09IlBhcmFtZXRlciJ9KShsc3x8KGxzPXt9KSk7dmFyIHVzOyhmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSkodXN8fCh1cz17fSkpO3ZhciBjczsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoY3N8fChjcz17fSkpO3ZhciBocjsoZnVuY3Rpb24oZSl7ZVtlLkRlcGVuZHNPbktiTGF5b3V0PS0xXT0iRGVwZW5kc09uS2JMYXlvdXQiLGVbZS5Vbmtub3duPTBdPSJVbmtub3duIixlW2UuQmFja3NwYWNlPTFdPSJCYWNrc3BhY2UiLGVbZS5UYWI9Ml09IlRhYiIsZVtlLkVudGVyPTNdPSJFbnRlciIsZVtlLlNoaWZ0PTRdPSJTaGlmdCIsZVtlLkN0cmw9NV09IkN0cmwiLGVbZS5BbHQ9Nl09IkFsdCIsZVtlLlBhdXNlQnJlYWs9N109IlBhdXNlQnJlYWsiLGVbZS5DYXBzTG9jaz04XT0iQ2Fwc0xvY2siLGVbZS5Fc2NhcGU9OV09IkVzY2FwZSIsZVtlLlNwYWNlPTEwXT0iU3BhY2UiLGVbZS5QYWdlVXA9MTFdPSJQYWdlVXAiLGVbZS5QYWdlRG93bj0xMl09IlBhZ2VEb3duIixlW2UuRW5kPTEzXT0iRW5kIixlW2UuSG9tZT0xNF09IkhvbWUiLGVbZS5MZWZ0QXJyb3c9MTVdPSJMZWZ0QXJyb3ciLGVbZS5VcEFycm93PTE2XT0iVXBBcnJvdyIsZVtlLlJpZ2h0QXJyb3c9MTddPSJSaWdodEFycm93IixlW2UuRG93bkFycm93PTE4XT0iRG93bkFycm93IixlW2UuSW5zZXJ0PTE5XT0iSW5zZXJ0IixlW2UuRGVsZXRlPTIwXT0iRGVsZXRlIixlW2UuRGlnaXQwPTIxXT0iRGlnaXQwIixlW2UuRGlnaXQxPTIyXT0iRGlnaXQxIixlW2UuRGlnaXQyPTIzXT0iRGlnaXQyIixlW2UuRGlnaXQzPTI0XT0iRGlnaXQzIixlW2UuRGlnaXQ0PTI1XT0iRGlnaXQ0IixlW2UuRGlnaXQ1PTI2XT0iRGlnaXQ1IixlW2UuRGlnaXQ2PTI3XT0iRGlnaXQ2IixlW2UuRGlnaXQ3PTI4XT0iRGlnaXQ3IixlW2UuRGlnaXQ4PTI5XT0iRGlnaXQ4IixlW2UuRGlnaXQ5PTMwXT0iRGlnaXQ5IixlW2UuS2V5QT0zMV09IktleUEiLGVbZS5LZXlCPTMyXT0iS2V5QiIsZVtlLktleUM9MzNdPSJLZXlDIixlW2UuS2V5RD0zNF09IktleUQiLGVbZS5LZXlFPTM1XT0iS2V5RSIsZVtlLktleUY9MzZdPSJLZXlGIixlW2UuS2V5Rz0zN109IktleUciLGVbZS5LZXlIPTM4XT0iS2V5SCIsZVtlLktleUk9MzldPSJLZXlJIixlW2UuS2V5Sj00MF09IktleUoiLGVbZS5LZXlLPTQxXT0iS2V5SyIsZVtlLktleUw9NDJdPSJLZXlMIixlW2UuS2V5TT00M109IktleU0iLGVbZS5LZXlOPTQ0XT0iS2V5TiIsZVtlLktleU89NDVdPSJLZXlPIixlW2UuS2V5UD00Nl09IktleVAiLGVbZS5LZXlRPTQ3XT0iS2V5USIsZVtlLktleVI9NDhdPSJLZXlSIixlW2UuS2V5Uz00OV09IktleVMiLGVbZS5LZXlUPTUwXT0iS2V5VCIsZVtlLktleVU9NTFdPSJLZXlVIixlW2UuS2V5Vj01Ml09IktleVYiLGVbZS5LZXlXPTUzXT0iS2V5VyIsZVtlLktleVg9NTRdPSJLZXlYIixlW2UuS2V5WT01NV09IktleVkiLGVbZS5LZXlaPTU2XT0iS2V5WiIsZVtlLk1ldGE9NTddPSJNZXRhIixlW2UuQ29udGV4dE1lbnU9NThdPSJDb250ZXh0TWVudSIsZVtlLkYxPTU5XT0iRjEiLGVbZS5GMj02MF09IkYyIixlW2UuRjM9NjFdPSJGMyIsZVtlLkY0PTYyXT0iRjQiLGVbZS5GNT02M109IkY1IixlW2UuRjY9NjRdPSJGNiIsZVtlLkY3PTY1XT0iRjciLGVbZS5GOD02Nl09IkY4IixlW2UuRjk9NjddPSJGOSIsZVtlLkYxMD02OF09IkYxMCIsZVtlLkYxMT02OV09IkYxMSIsZVtlLkYxMj03MF09IkYxMiIsZVtlLkYxMz03MV09IkYxMyIsZVtlLkYxND03Ml09IkYxNCIsZVtlLkYxNT03M109IkYxNSIsZVtlLkYxNj03NF09IkYxNiIsZVtlLkYxNz03NV09IkYxNyIsZVtlLkYxOD03Nl09IkYxOCIsZVtlLkYxOT03N109IkYxOSIsZVtlLkYyMD03OF09IkYyMCIsZVtlLkYyMT03OV09IkYyMSIsZVtlLkYyMj04MF09IkYyMiIsZVtlLkYyMz04MV09IkYyMyIsZVtlLkYyND04Ml09IkYyNCIsZVtlLk51bUxvY2s9ODNdPSJOdW1Mb2NrIixlW2UuU2Nyb2xsTG9jaz04NF09IlNjcm9sbExvY2siLGVbZS5TZW1pY29sb249ODVdPSJTZW1pY29sb24iLGVbZS5FcXVhbD04Nl09IkVxdWFsIixlW2UuQ29tbWE9ODddPSJDb21tYSIsZVtlLk1pbnVzPTg4XT0iTWludXMiLGVbZS5QZXJpb2Q9ODldPSJQZXJpb2QiLGVbZS5TbGFzaD05MF09IlNsYXNoIixlW2UuQmFja3F1b3RlPTkxXT0iQmFja3F1b3RlIixlW2UuQnJhY2tldExlZnQ9OTJdPSJCcmFja2V0TGVmdCIsZVtlLkJhY2tzbGFzaD05M109IkJhY2tzbGFzaCIsZVtlLkJyYWNrZXRSaWdodD05NF09IkJyYWNrZXRSaWdodCIsZVtlLlF1b3RlPTk1XT0iUXVvdGUiLGVbZS5PRU1fOD05Nl09Ik9FTV84IixlW2UuSW50bEJhY2tzbGFzaD05N109IkludGxCYWNrc2xhc2giLGVbZS5OdW1wYWQwPTk4XT0iTnVtcGFkMCIsZVtlLk51bXBhZDE9OTldPSJOdW1wYWQxIixlW2UuTnVtcGFkMj0xMDBdPSJOdW1wYWQyIixlW2UuTnVtcGFkMz0xMDFdPSJOdW1wYWQzIixlW2UuTnVtcGFkND0xMDJdPSJOdW1wYWQ0IixlW2UuTnVtcGFkNT0xMDNdPSJOdW1wYWQ1IixlW2UuTnVtcGFkNj0xMDRdPSJOdW1wYWQ2IixlW2UuTnVtcGFkNz0xMDVdPSJOdW1wYWQ3IixlW2UuTnVtcGFkOD0xMDZdPSJOdW1wYWQ4IixlW2UuTnVtcGFkOT0xMDddPSJOdW1wYWQ5IixlW2UuTnVtcGFkTXVsdGlwbHk9MTA4XT0iTnVtcGFkTXVsdGlwbHkiLGVbZS5OdW1wYWRBZGQ9MTA5XT0iTnVtcGFkQWRkIixlW2UuTlVNUEFEX1NFUEFSQVRPUj0xMTBdPSJOVU1QQURfU0VQQVJBVE9SIixlW2UuTnVtcGFkU3VidHJhY3Q9MTExXT0iTnVtcGFkU3VidHJhY3QiLGVbZS5OdW1wYWREZWNpbWFsPTExMl09Ik51bXBhZERlY2ltYWwiLGVbZS5OdW1wYWREaXZpZGU9MTEzXT0iTnVtcGFkRGl2aWRlIixlW2UuS0VZX0lOX0NPTVBPU0lUSU9OPTExNF09IktFWV9JTl9DT01QT1NJVElPTiIsZVtlLkFCTlRfQzE9MTE1XT0iQUJOVF9DMSIsZVtlLkFCTlRfQzI9MTE2XT0iQUJOVF9DMiIsZVtlLkF1ZGlvVm9sdW1lTXV0ZT0xMTddPSJBdWRpb1ZvbHVtZU11dGUiLGVbZS5BdWRpb1ZvbHVtZVVwPTExOF09IkF1ZGlvVm9sdW1lVXAiLGVbZS5BdWRpb1ZvbHVtZURvd249MTE5XT0iQXVkaW9Wb2x1bWVEb3duIixlW2UuQnJvd3NlclNlYXJjaD0xMjBdPSJCcm93c2VyU2VhcmNoIixlW2UuQnJvd3NlckhvbWU9MTIxXT0iQnJvd3NlckhvbWUiLGVbZS5Ccm93c2VyQmFjaz0xMjJdPSJCcm93c2VyQmFjayIsZVtlLkJyb3dzZXJGb3J3YXJkPTEyM109IkJyb3dzZXJGb3J3YXJkIixlW2UuTWVkaWFUcmFja05leHQ9MTI0XT0iTWVkaWFUcmFja05leHQiLGVbZS5NZWRpYVRyYWNrUHJldmlvdXM9MTI1XT0iTWVkaWFUcmFja1ByZXZpb3VzIixlW2UuTWVkaWFTdG9wPTEyNl09Ik1lZGlhU3RvcCIsZVtlLk1lZGlhUGxheVBhdXNlPTEyN109Ik1lZGlhUGxheVBhdXNlIixlW2UuTGF1bmNoTWVkaWFQbGF5ZXI9MTI4XT0iTGF1bmNoTWVkaWFQbGF5ZXIiLGVbZS5MYXVuY2hNYWlsPTEyOV09IkxhdW5jaE1haWwiLGVbZS5MYXVuY2hBcHAyPTEzMF09IkxhdW5jaEFwcDIiLGVbZS5DbGVhcj0xMzFdPSJDbGVhciIsZVtlLk1BWF9WQUxVRT0xMzJdPSJNQVhfVkFMVUUifSkoaHJ8fChocj17fSkpO3ZhciBkcjsoZnVuY3Rpb24oZSl7ZVtlLkhpbnQ9MV09IkhpbnQiLGVbZS5JbmZvPTJdPSJJbmZvIixlW2UuV2FybmluZz00XT0iV2FybmluZyIsZVtlLkVycm9yPThdPSJFcnJvciJ9KShkcnx8KGRyPXt9KSk7dmFyIG1yOyhmdW5jdGlvbihlKXtlW2UuVW5uZWNlc3Nhcnk9MV09IlVubmVjZXNzYXJ5IixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCJ9KShtcnx8KG1yPXt9KSk7dmFyIGZzOyhmdW5jdGlvbihlKXtlW2UuSW5saW5lPTFdPSJJbmxpbmUiLGVbZS5HdXR0ZXI9Ml09Ikd1dHRlciJ9KShmc3x8KGZzPXt9KSk7dmFyIGhzOyhmdW5jdGlvbihlKXtlW2UuTm9ybWFsPTFdPSJOb3JtYWwiLGVbZS5VbmRlcmxpbmVkPTJdPSJVbmRlcmxpbmVkIn0pKGhzfHwoaHM9e30pKTt2YXIgZHM7KGZ1bmN0aW9uKGUpe2VbZS5VTktOT1dOPTBdPSJVTktOT1dOIixlW2UuVEVYVEFSRUE9MV09IlRFWFRBUkVBIixlW2UuR1VUVEVSX0dMWVBIX01BUkdJTj0yXT0iR1VUVEVSX0dMWVBIX01BUkdJTiIsZVtlLkdVVFRFUl9MSU5FX05VTUJFUlM9M109IkdVVFRFUl9MSU5FX05VTUJFUlMiLGVbZS5HVVRURVJfTElORV9ERUNPUkFUSU9OUz00XT0iR1VUVEVSX0xJTkVfREVDT1JBVElPTlMiLGVbZS5HVVRURVJfVklFV19aT05FPTVdPSJHVVRURVJfVklFV19aT05FIixlW2UuQ09OVEVOVF9URVhUPTZdPSJDT05URU5UX1RFWFQiLGVbZS5DT05URU5UX0VNUFRZPTddPSJDT05URU5UX0VNUFRZIixlW2UuQ09OVEVOVF9WSUVXX1pPTkU9OF09IkNPTlRFTlRfVklFV19aT05FIixlW2UuQ09OVEVOVF9XSURHRVQ9OV09IkNPTlRFTlRfV0lER0VUIixlW2UuT1ZFUlZJRVdfUlVMRVI9MTBdPSJPVkVSVklFV19SVUxFUiIsZVtlLlNDUk9MTEJBUj0xMV09IlNDUk9MTEJBUiIsZVtlLk9WRVJMQVlfV0lER0VUPTEyXT0iT1ZFUkxBWV9XSURHRVQiLGVbZS5PVVRTSURFX0VESVRPUj0xM109Ik9VVFNJREVfRURJVE9SIn0pKGRzfHwoZHM9e30pKTt2YXIgbXM7KGZ1bmN0aW9uKGUpe2VbZS5BSUdlbmVyYXRlZD0xXT0iQUlHZW5lcmF0ZWQifSkobXN8fChtcz17fSkpO3ZhciBnczsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoZ3N8fChncz17fSkpO3ZhciBwczsoZnVuY3Rpb24oZSl7ZVtlLlRPUF9SSUdIVF9DT1JORVI9MF09IlRPUF9SSUdIVF9DT1JORVIiLGVbZS5CT1RUT01fUklHSFRfQ09STkVSPTFdPSJCT1RUT01fUklHSFRfQ09STkVSIixlW2UuVE9QX0NFTlRFUj0yXT0iVE9QX0NFTlRFUiJ9KShwc3x8KHBzPXt9KSk7dmFyIGJzOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KShic3x8KGJzPXt9KSk7dmFyIHZzOyhmdW5jdGlvbihlKXtlW2UuV29yZD0wXT0iV29yZCIsZVtlLkxpbmU9MV09IkxpbmUiLGVbZS5TdWdnZXN0PTJdPSJTdWdnZXN0In0pKHZzfHwodnM9e30pKTt2YXIgeHM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTBdPSJMZWZ0IixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTm9uZT0yXT0iTm9uZSIsZVtlLkxlZnRPZkluamVjdGVkVGV4dD0zXT0iTGVmdE9mSW5qZWN0ZWRUZXh0IixlW2UuUmlnaHRPZkluamVjdGVkVGV4dD00XT0iUmlnaHRPZkluamVjdGVkVGV4dCJ9KSh4c3x8KHhzPXt9KSk7dmFyIHlzOyhmdW5jdGlvbihlKXtlW2UuT2ZmPTBdPSJPZmYiLGVbZS5Pbj0xXT0iT24iLGVbZS5SZWxhdGl2ZT0yXT0iUmVsYXRpdmUiLGVbZS5JbnRlcnZhbD0zXT0iSW50ZXJ2YWwiLGVbZS5DdXN0b209NF09IkN1c3RvbSJ9KSh5c3x8KHlzPXt9KSk7dmFyIHdzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlRleHQ9MV09IlRleHQiLGVbZS5CbG9ja3M9Ml09IkJsb2NrcyJ9KSh3c3x8KHdzPXt9KSk7dmFyIF9zOyhmdW5jdGlvbihlKXtlW2UuU21vb3RoPTBdPSJTbW9vdGgiLGVbZS5JbW1lZGlhdGU9MV09IkltbWVkaWF0ZSJ9KShfc3x8KF9zPXt9KSk7dmFyIExzOyhmdW5jdGlvbihlKXtlW2UuQXV0bz0xXT0iQXV0byIsZVtlLkhpZGRlbj0yXT0iSGlkZGVuIixlW2UuVmlzaWJsZT0zXT0iVmlzaWJsZSJ9KShMc3x8KExzPXt9KSk7dmFyIGdyOyhmdW5jdGlvbihlKXtlW2UuTFRSPTBdPSJMVFIiLGVbZS5SVEw9MV09IlJUTCJ9KShncnx8KGdyPXt9KSk7dmFyIE5zOyhmdW5jdGlvbihlKXtlLk9mZj0ib2ZmIixlLk9uQ29kZT0ib25Db2RlIixlLk9uPSJvbiJ9KShOc3x8KE5zPXt9KSk7dmFyIFNzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KShTc3x8KFNzPXt9KSk7dmFyIEFzOyhmdW5jdGlvbihlKXtlW2UuRmlsZT0wXT0iRmlsZSIsZVtlLk1vZHVsZT0xXT0iTW9kdWxlIixlW2UuTmFtZXNwYWNlPTJdPSJOYW1lc3BhY2UiLGVbZS5QYWNrYWdlPTNdPSJQYWNrYWdlIixlW2UuQ2xhc3M9NF09IkNsYXNzIixlW2UuTWV0aG9kPTVdPSJNZXRob2QiLGVbZS5Qcm9wZXJ0eT02XT0iUHJvcGVydHkiLGVbZS5GaWVsZD03XT0iRmllbGQiLGVbZS5Db25zdHJ1Y3Rvcj04XT0iQ29uc3RydWN0b3IiLGVbZS5FbnVtPTldPSJFbnVtIixlW2UuSW50ZXJmYWNlPTEwXT0iSW50ZXJmYWNlIixlW2UuRnVuY3Rpb249MTFdPSJGdW5jdGlvbiIsZVtlLlZhcmlhYmxlPTEyXT0iVmFyaWFibGUiLGVbZS5Db25zdGFudD0xM109IkNvbnN0YW50IixlW2UuU3RyaW5nPTE0XT0iU3RyaW5nIixlW2UuTnVtYmVyPTE1XT0iTnVtYmVyIixlW2UuQm9vbGVhbj0xNl09IkJvb2xlYW4iLGVbZS5BcnJheT0xN109IkFycmF5IixlW2UuT2JqZWN0PTE4XT0iT2JqZWN0IixlW2UuS2V5PTE5XT0iS2V5IixlW2UuTnVsbD0yMF09Ik51bGwiLGVbZS5FbnVtTWVtYmVyPTIxXT0iRW51bU1lbWJlciIsZVtlLlN0cnVjdD0yMl09IlN0cnVjdCIsZVtlLkV2ZW50PTIzXT0iRXZlbnQiLGVbZS5PcGVyYXRvcj0yNF09Ik9wZXJhdG9yIixlW2UuVHlwZVBhcmFtZXRlcj0yNV09IlR5cGVQYXJhbWV0ZXIifSkoQXN8fChBcz17fSkpO3ZhciBrczsoZnVuY3Rpb24oZSl7ZVtlLkRlcHJlY2F0ZWQ9MV09IkRlcHJlY2F0ZWQifSkoa3N8fChrcz17fSkpO3ZhciBFczsoZnVuY3Rpb24oZSl7ZVtlLkhpZGRlbj0wXT0iSGlkZGVuIixlW2UuQmxpbms9MV09IkJsaW5rIixlW2UuU21vb3RoPTJdPSJTbW9vdGgiLGVbZS5QaGFzZT0zXT0iUGhhc2UiLGVbZS5FeHBhbmQ9NF09IkV4cGFuZCIsZVtlLlNvbGlkPTVdPSJTb2xpZCJ9KShFc3x8KEVzPXt9KSk7dmFyIFJzOyhmdW5jdGlvbihlKXtlW2UuTGluZT0xXT0iTGluZSIsZVtlLkJsb2NrPTJdPSJCbG9jayIsZVtlLlVuZGVybGluZT0zXT0iVW5kZXJsaW5lIixlW2UuTGluZVRoaW49NF09IkxpbmVUaGluIixlW2UuQmxvY2tPdXRsaW5lPTVdPSJCbG9ja091dGxpbmUiLGVbZS5VbmRlcmxpbmVUaGluPTZdPSJVbmRlcmxpbmVUaGluIn0pKFJzfHwoUnM9e30pKTt2YXIgTXM7KGZ1bmN0aW9uKGUpe2VbZS5BbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTBdPSJBbHdheXNHcm93c1doZW5UeXBpbmdBdEVkZ2VzIixlW2UuTmV2ZXJHcm93c1doZW5UeXBpbmdBdEVkZ2VzPTFdPSJOZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlPTJdPSJHcm93c09ubHlXaGVuVHlwaW5nQmVmb3JlIixlW2UuR3Jvd3NPbmx5V2hlblR5cGluZ0FmdGVyPTNdPSJHcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXIifSkoTXN8fChNcz17fSkpO3ZhciBDczsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5TYW1lPTFdPSJTYW1lIixlW2UuSW5kZW50PTJdPSJJbmRlbnQiLGVbZS5EZWVwSW5kZW50PTNdPSJEZWVwSW5kZW50In0pKENzfHwoQ3M9e30pKTtjb25zdCBJdD1jbGFzcyBJdHtzdGF0aWMgY2hvcmQodCxuKXtyZXR1cm4gbHUodCxuKX19O0l0LkN0cmxDbWQ9MjA0OCxJdC5TaGlmdD0xMDI0LEl0LkFsdD01MTIsSXQuV2luQ3RybD0yNTY7bGV0IHByPUl0O2Z1bmN0aW9uIG11KCl7cmV0dXJue2VkaXRvcjp2b2lkIDAsbGFuZ3VhZ2VzOnZvaWQgMCxDYW5jZWxsYXRpb25Ub2tlblNvdXJjZTppdSxFbWl0dGVyOkxlLEtleUNvZGU6aHIsS2V5TW9kOnByLFBvc2l0aW9uOmVlLFJhbmdlOlcsU2VsZWN0aW9uOnBlLFNlbGVjdGlvbkRpcmVjdGlvbjpncixNYXJrZXJTZXZlcml0eTpkcixNYXJrZXJUYWc6bXIsVXJpOnRyLFRva2VuOmR1fX12YXIgVHM7Y2xhc3MgZ3V7Y29uc3RydWN0b3IoKXt0aGlzW1RzXT0iTGlua2VkTWFwIix0aGlzLl9tYXA9bmV3IE1hcCx0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMCx0aGlzLl9zaXplPTAsdGhpcy5fc3RhdGU9MH1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZSsrfWlzRW1wdHkoKXtyZXR1cm4hdGhpcy5faGVhZCYmIXRoaXMuX3RhaWx9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1nZXQgZmlyc3QoKXtyZXR1cm4gdGhpcy5faGVhZD8udmFsdWV9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5fdGFpbD8udmFsdWV9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfWdldCh0LG49MCl7Y29uc3Qgcj10aGlzLl9tYXAuZ2V0KHQpO2lmKHIpcmV0dXJuIG4hPT0wJiZ0aGlzLnRvdWNoKHIsbiksci52YWx1ZX1zZXQodCxuLHI9MCl7bGV0IGk9dGhpcy5fbWFwLmdldCh0KTtpZihpKWkudmFsdWU9bixyIT09MCYmdGhpcy50b3VjaChpLHIpO2Vsc2V7c3dpdGNoKGk9e2tleTp0LHZhbHVlOm4sbmV4dDp2b2lkIDAscHJldmlvdXM6dm9pZCAwfSxyKXtjYXNlIDA6dGhpcy5hZGRJdGVtTGFzdChpKTticmVhaztjYXNlIDE6dGhpcy5hZGRJdGVtRmlyc3QoaSk7YnJlYWs7Y2FzZSAyOnRoaXMuYWRkSXRlbUxhc3QoaSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmFkZEl0ZW1MYXN0KGkpO2JyZWFrfXRoaXMuX21hcC5zZXQodCxpKSx0aGlzLl9zaXplKyt9cmV0dXJuIHRoaXN9ZGVsZXRlKHQpe3JldHVybiEhdGhpcy5yZW1vdmUodCl9cmVtb3ZlKHQpe2NvbnN0IG49dGhpcy5fbWFwLmdldCh0KTtpZihuKXJldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQpLHRoaXMucmVtb3ZlSXRlbShuKSx0aGlzLl9zaXplLS0sbi52YWx1ZX1zaGlmdCgpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbClyZXR1cm47aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7Y29uc3QgdD10aGlzLl9oZWFkO3JldHVybiB0aGlzLl9tYXAuZGVsZXRlKHQua2V5KSx0aGlzLnJlbW92ZUl0ZW0odCksdGhpcy5fc2l6ZS0tLHQudmFsdWV9Zm9yRWFjaCh0LG4pe2NvbnN0IHI9dGhpcy5fc3RhdGU7bGV0IGk9dGhpcy5faGVhZDtmb3IoO2k7KXtpZihuP3QuYmluZChuKShpLnZhbHVlLGkua2V5LHRoaXMpOnQoaS52YWx1ZSxpLmtleSx0aGlzKSx0aGlzLl9zdGF0ZSE9PXIpdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aT1pLm5leHR9fWtleXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgcj10aGlzLl9oZWFkO2NvbnN0IGk9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIGl9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYocil7Y29uc3Qgcz17dmFsdWU6ci5rZXksZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9dmFsdWVzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IHI9dGhpcy5faGVhZDtjb25zdCBpPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBpfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKHIpe2NvbnN0IHM9e3ZhbHVlOnIudmFsdWUsZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9ZW50cmllcygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCByPXRoaXMuX2hlYWQ7Y29uc3QgaT17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gaX0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihyKXtjb25zdCBzPXt2YWx1ZTpbci5rZXksci52YWx1ZV0sZG9uZTohMX07cmV0dXJuIHI9ci5uZXh0LHN9ZWxzZSByZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX07cmV0dXJuIGl9WyhUcz1TeW1ib2wudG9TdHJpbmdUYWcsU3ltYm9sLml0ZXJhdG9yKV0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9dHJpbU9sZCh0KXtpZih0Pj10aGlzLnNpemUpcmV0dXJuO2lmKHQ9PT0wKXt0aGlzLmNsZWFyKCk7cmV0dXJufWxldCBuPXRoaXMuX2hlYWQscj10aGlzLnNpemU7Zm9yKDtuJiZyPnQ7KXRoaXMuX21hcC5kZWxldGUobi5rZXkpLG49bi5uZXh0LHItLTt0aGlzLl9oZWFkPW4sdGhpcy5fc2l6ZT1yLG4mJihuLnByZXZpb3VzPXZvaWQgMCksdGhpcy5fc3RhdGUrK310cmltTmV3KHQpe2lmKHQ+PXRoaXMuc2l6ZSlyZXR1cm47aWYodD09PTApe3RoaXMuY2xlYXIoKTtyZXR1cm59bGV0IG49dGhpcy5fdGFpbCxyPXRoaXMuc2l6ZTtmb3IoO24mJnI+dDspdGhpcy5fbWFwLmRlbGV0ZShuLmtleSksbj1uLnByZXZpb3VzLHItLTt0aGlzLl90YWlsPW4sdGhpcy5fc2l6ZT1yLG4mJihuLm5leHQ9dm9pZCAwKSx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1GaXJzdCh0KXtpZighdGhpcy5faGVhZCYmIXRoaXMuX3RhaWwpdGhpcy5fdGFpbD10O2Vsc2UgaWYodGhpcy5faGVhZCl0Lm5leHQ9dGhpcy5faGVhZCx0aGlzLl9oZWFkLnByZXZpb3VzPXQ7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3RoaXMuX2hlYWQ9dCx0aGlzLl9zdGF0ZSsrfWFkZEl0ZW1MYXN0KHQpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbCl0aGlzLl9oZWFkPXQ7ZWxzZSBpZih0aGlzLl90YWlsKXQucHJldmlvdXM9dGhpcy5fdGFpbCx0aGlzLl90YWlsLm5leHQ9dDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dGhpcy5fdGFpbD10LHRoaXMuX3N0YXRlKyt9cmVtb3ZlSXRlbSh0KXtpZih0PT09dGhpcy5faGVhZCYmdD09PXRoaXMuX3RhaWwpdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDA7ZWxzZSBpZih0PT09dGhpcy5faGVhZCl7aWYoIXQubmV4dCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3QubmV4dC5wcmV2aW91cz12b2lkIDAsdGhpcy5faGVhZD10Lm5leHR9ZWxzZSBpZih0PT09dGhpcy5fdGFpbCl7aWYoIXQucHJldmlvdXMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0LnByZXZpb3VzLm5leHQ9dm9pZCAwLHRoaXMuX3RhaWw9dC5wcmV2aW91c31lbHNle2NvbnN0IG49dC5uZXh0LHI9dC5wcmV2aW91cztpZighbnx8IXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtuLnByZXZpb3VzPXIsci5uZXh0PW59dC5uZXh0PXZvaWQgMCx0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9zdGF0ZSsrfXRvdWNoKHQsbil7aWYoIXRoaXMuX2hlYWR8fCF0aGlzLl90YWlsKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7aWYoIShuIT09MSYmbiE9PTIpKXtpZihuPT09MSl7aWYodD09PXRoaXMuX2hlYWQpcmV0dXJuO2NvbnN0IHI9dC5uZXh0LGk9dC5wcmV2aW91czt0PT09dGhpcy5fdGFpbD8oaS5uZXh0PXZvaWQgMCx0aGlzLl90YWlsPWkpOihyLnByZXZpb3VzPWksaS5uZXh0PXIpLHQucHJldmlvdXM9dm9pZCAwLHQubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9dCx0aGlzLl9oZWFkPXQsdGhpcy5fc3RhdGUrK31lbHNlIGlmKG49PT0yKXtpZih0PT09dGhpcy5fdGFpbClyZXR1cm47Y29uc3Qgcj10Lm5leHQsaT10LnByZXZpb3VzO3Q9PT10aGlzLl9oZWFkPyhyLnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPXIpOihyLnByZXZpb3VzPWksaS5uZXh0PXIpLHQubmV4dD12b2lkIDAsdC5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD10LHRoaXMuX3RhaWw9dCx0aGlzLl9zdGF0ZSsrfX19dG9KU09OKCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5mb3JFYWNoKChuLHIpPT57dC5wdXNoKFtyLG5dKX0pLHR9ZnJvbUpTT04odCl7dGhpcy5jbGVhcigpO2Zvcihjb25zdFtuLHJdb2YgdCl0aGlzLnNldChuLHIpfX1jbGFzcyBwdSBleHRlbmRzIGd1e2NvbnN0cnVjdG9yKHQsbj0xKXtzdXBlcigpLHRoaXMuX2xpbWl0PXQsdGhpcy5fcmF0aW89TWF0aC5taW4oTWF0aC5tYXgoMCxuKSwxKX1nZXQgbGltaXQoKXtyZXR1cm4gdGhpcy5fbGltaXR9c2V0IGxpbWl0KHQpe3RoaXMuX2xpbWl0PXQsdGhpcy5jaGVja1RyaW0oKX1nZXQodCxuPTIpe3JldHVybiBzdXBlci5nZXQodCxuKX1wZWVrKHQpe3JldHVybiBzdXBlci5nZXQodCwwKX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiwyKSx0aGlzfWNoZWNrVHJpbSgpe3RoaXMuc2l6ZT50aGlzLl9saW1pdCYmdGhpcy50cmltKE1hdGgucm91bmQodGhpcy5fbGltaXQqdGhpcy5fcmF0aW8pKX19Y2xhc3MgYnUgZXh0ZW5kcyBwdXtjb25zdHJ1Y3Rvcih0LG49MSl7c3VwZXIodCxuKX10cmltKHQpe3RoaXMudHJpbU9sZCh0KX1zZXQodCxuKXtyZXR1cm4gc3VwZXIuc2V0KHQsbiksdGhpcy5jaGVja1RyaW0oKSx0aGlzfX1jbGFzcyB2dXtjb25zdHJ1Y3Rvcigpe3RoaXMubWFwPW5ldyBNYXB9YWRkKHQsbil7bGV0IHI9dGhpcy5tYXAuZ2V0KHQpO3J8fChyPW5ldyBTZXQsdGhpcy5tYXAuc2V0KHQscikpLHIuYWRkKG4pfWRlbGV0ZSh0LG4pe2NvbnN0IHI9dGhpcy5tYXAuZ2V0KHQpO3ImJihyLmRlbGV0ZShuKSxyLnNpemU9PT0wJiZ0aGlzLm1hcC5kZWxldGUodCkpfWZvckVhY2godCxuKXtjb25zdCByPXRoaXMubWFwLmdldCh0KTtyJiZyLmZvckVhY2gobil9Z2V0KHQpe2NvbnN0IG49dGhpcy5tYXAuZ2V0KHQpO3JldHVybiBufHxuZXcgU2V0fX1uZXcgYnUoMTApO3ZhciBQczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTRdPSJSaWdodCIsZVtlLkZ1bGw9N109IkZ1bGwifSkoUHN8fChQcz17fSkpO3ZhciBJczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MV09IkxlZnQiLGVbZS5DZW50ZXI9Ml09IkNlbnRlciIsZVtlLlJpZ2h0PTNdPSJSaWdodCJ9KShJc3x8KElzPXt9KSk7dmFyIEZzOyhmdW5jdGlvbihlKXtlW2UuQm90aD0wXT0iQm90aCIsZVtlLlJpZ2h0PTFdPSJSaWdodCIsZVtlLkxlZnQ9Ml09IkxlZnQiLGVbZS5Ob25lPTNdPSJOb25lIn0pKEZzfHwoRnM9e30pKTtmdW5jdGlvbiB4dShlLHQsbixyLGkpe2lmKHI9PT0wKXJldHVybiEwO2NvbnN0IHM9dC5jaGFyQ29kZUF0KHItMSk7aWYoZS5nZXQocykhPT0wfHxzPT09MTN8fHM9PT0xMClyZXR1cm4hMDtpZihpPjApe2NvbnN0IGE9dC5jaGFyQ29kZUF0KHIpO2lmKGUuZ2V0KGEpIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB5dShlLHQsbixyLGkpe2lmKHIraT09PW4pcmV0dXJuITA7Y29uc3Qgcz10LmNoYXJDb2RlQXQocitpKTtpZihlLmdldChzKSE9PTB8fHM9PT0xM3x8cz09PTEwKXJldHVybiEwO2lmKGk+MCl7Y29uc3QgYT10LmNoYXJDb2RlQXQocitpLTEpO2lmKGUuZ2V0KGEpIT09MClyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB3dShlLHQsbixyLGkpe3JldHVybiB4dShlLHQsbixyLGkpJiZ5dShlLHQsbixyLGkpfWNsYXNzIF91e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5fd29yZFNlcGFyYXRvcnM9dCx0aGlzLl9zZWFyY2hSZWdleD1uLHRoaXMuX3ByZXZNYXRjaFN0YXJ0SW5kZXg9LTEsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPTB9cmVzZXQodCl7dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4PXQsdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1uZXh0KHQpe2NvbnN0IG49dC5sZW5ndGg7bGV0IHI7ZG97aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCt0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9PT1ufHwocj10aGlzLl9zZWFyY2hSZWdleC5leGVjKHQpLCFyKSlyZXR1cm4gbnVsbDtjb25zdCBpPXIuaW5kZXgscz1yWzBdLmxlbmd0aDtpZihpPT09dGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleCYmcz09PXRoaXMuX3ByZXZNYXRjaExlbmd0aCl7aWYocz09PTApe3VsKHQsbix0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgpPjY1NTM1P3RoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9Mjp0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXgrPTE7Y29udGludWV9cmV0dXJuIG51bGx9aWYodGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD1pLHRoaXMuX3ByZXZNYXRjaExlbmd0aD1zLCF0aGlzLl93b3JkU2VwYXJhdG9yc3x8d3UodGhpcy5fd29yZFNlcGFyYXRvcnMsdCxuLGkscykpcmV0dXJuIHJ9d2hpbGUocik7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIEx1KGUsdD0iVW5yZWFjaGFibGUiKXt0aHJvdyBuZXcgRXJyb3IodCl9ZnVuY3Rpb24gcG4oZSl7aWYoIWUoKSl7ZGVidWdnZXI7ZSgpLERlKG5ldyBtZSgiQXNzZXJ0aW9uIEZhaWxlZCIpKX19ZnVuY3Rpb24gVnMoZSx0KXtsZXQgbj0wO2Zvcig7bjxlLmxlbmd0aC0xOyl7Y29uc3Qgcj1lW25dLGk9ZVtuKzFdO2lmKCF0KHIsaSkpcmV0dXJuITE7bisrfXJldHVybiEwfWNsYXNzIE51e3N0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLHIpe2NvbnN0IGk9cj9yLnN0YXJ0TGluZU51bWJlcjoxLHM9cj9yLmVuZExpbmVOdW1iZXI6dC5nZXRMaW5lQ291bnQoKSxhPW5ldyBEcyhuKSxsPWEuZ2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpO2xldCBvO2w9PT0iYWxsTm9uQmFzaWNBc2NpaSI/bz1uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTpvPW5ldyBSZWdFeHAoYCR7U3UoQXJyYXkuZnJvbShsKSl9YCwiZyIpO2NvbnN0IHU9bmV3IF91KG51bGwsbyksaD1bXTtsZXQgYz0hMSxkLG09MCxnPTAscD0wO2U6Zm9yKGxldCB2PWksXz1zO3Y8PV87disrKXtjb25zdCBOPXQuZ2V0TGluZUNvbnRlbnQodikseD1OLmxlbmd0aDt1LnJlc2V0KDApO2RvIGlmKGQ9dS5uZXh0KE4pLGQpe2xldCB5PWQuaW5kZXgsYj1kLmluZGV4K2RbMF0ubGVuZ3RoO2lmKHk+MCl7Y29uc3QgST1OLmNoYXJDb2RlQXQoeS0xKTthbihJKSYmeS0tfWlmKGIrMTx4KXtjb25zdCBJPU4uY2hhckNvZGVBdChiLTEpO2FuKEkpJiZiKyt9Y29uc3QgTD1OLnN1YnN0cmluZyh5LGIpO2xldCBBPXNyKHkrMSxBaSxOLDApO0EmJkEuZW5kQ29sdW1uPD15KzEmJihBPW51bGwpO2NvbnN0IFI9YS5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKEwsQT9BLndvcmQ6bnVsbCk7aWYoUiE9PTApe2lmKFI9PT0zP20rKzpSPT09Mj9nKys6Uj09PTE/cCsrOkx1KCksaC5sZW5ndGg+PTFlMyl7Yz0hMDticmVhayBlfWgucHVzaChuZXcgVyh2LHkrMSx2LGIrMSkpfX13aGlsZShkKX1yZXR1cm57cmFuZ2VzOmgsaGFzTW9yZTpjLGFtYmlndW91c0NoYXJhY3RlckNvdW50Om0saW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Zyxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6cH19c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKHQsbil7Y29uc3Qgcj1uZXcgRHMobik7c3dpdGNoKHIuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3Qgcz10LmNvZGVQb2ludEF0KDApLGE9ci5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKHMpLGw9RHQuZ2V0TG9jYWxlcygpLmZpbHRlcihvPT4hRHQuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4ubi5hbGxvd2VkTG9jYWxlcyxvXSkpLmlzQW1iaWd1b3VzKHMpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KGEpLG5vdEFtYmlndW91c0luTG9jYWxlczpsfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1mdW5jdGlvbiBTdShlLHQpe3JldHVybmBbJHtzbChlLm1hcChyPT5TdHJpbmcuZnJvbUNvZGVQb2ludChyKSkuam9pbigiIikpfV1gfWNsYXNzIERze2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10LHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldCh0LmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9RHQuZ2V0SW5zdGFuY2UobmV3IFNldCh0LmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCB0PW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IG4gb2YgT3QuY29kZVBvaW50cylPcyhTdHJpbmcuZnJvbUNvZGVQb2ludChuKSl8fHQuYWRkKG4pO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKXQuYWRkKG4pO2Zvcihjb25zdCBuIG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpdC5kZWxldGUobik7cmV0dXJuIHR9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG4pe2NvbnN0IHI9dC5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhyKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgaT0hMSxzPSExO2lmKG4pZm9yKGNvbnN0IGEgb2Ygbil7Y29uc3QgbD1hLmNvZGVQb2ludEF0KDApLG89ZmwoYSk7aT1pfHxvLCFvJiYhdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKGwpJiYhT3QuaXNJbnZpc2libGVDaGFyYWN0ZXIobCkmJihzPSEwKX1yZXR1cm4haSYmcz8wOnRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYhT3ModCkmJk90LmlzSW52aXNpYmxlQ2hhcmFjdGVyKHIpPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhyKT8zOjB9fWZ1bmN0aW9uIE9zKGUpe3JldHVybiBlPT09IiAifHxlPT09YApgfHxlPT09IgkifWNsYXNzIGJue2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLmNoYW5nZXM9dCx0aGlzLm1vdmVzPW4sdGhpcy5oaXRUaW1lb3V0PXJ9fWNsYXNzIEF1e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5saW5lUmFuZ2VNYXBwaW5nPXQsdGhpcy5jaGFuZ2VzPW59fWNsYXNzICR7c3RhdGljIGFkZFJhbmdlKHQsbil7bGV0IHI9MDtmb3IoO3I8bi5sZW5ndGgmJm5bcl0uZW5kRXhjbHVzaXZlPHQuc3RhcnQ7KXIrKztsZXQgaT1yO2Zvcig7aTxuLmxlbmd0aCYmbltpXS5zdGFydDw9dC5lbmRFeGNsdXNpdmU7KWkrKztpZihyPT09aSluLnNwbGljZShyLDAsdCk7ZWxzZXtjb25zdCBzPU1hdGgubWluKHQuc3RhcnQsbltyXS5zdGFydCksYT1NYXRoLm1heCh0LmVuZEV4Y2x1c2l2ZSxuW2ktMV0uZW5kRXhjbHVzaXZlKTtuLnNwbGljZShyLGktcixuZXcgJChzLGEpKX19c3RhdGljIHRyeUNyZWF0ZSh0LG4pe2lmKCEodD5uKSlyZXR1cm4gbmV3ICQodCxuKX1zdGF0aWMgb2ZMZW5ndGgodCl7cmV0dXJuIG5ldyAkKDAsdCl9c3RhdGljIG9mU3RhcnRBbmRMZW5ndGgodCxuKXtyZXR1cm4gbmV3ICQodCx0K24pfWNvbnN0cnVjdG9yKHQsbil7aWYodGhpcy5zdGFydD10LHRoaXMuZW5kRXhjbHVzaXZlPW4sdD5uKXRocm93IG5ldyBtZShgSW52YWxpZCByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCl9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydD09PXRoaXMuZW5kRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgJCh0aGlzLnN0YXJ0K3QsdGhpcy5lbmRFeGNsdXNpdmUrdCl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlKX1kZWx0YUVuZCh0KXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSt0KX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kRXhjbHVzaXZlLXRoaXMuc3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydH0sICR7dGhpcy5lbmRFeGNsdXNpdmV9KWB9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuc3RhcnQ8PXQmJnQ8dGhpcy5lbmRFeGNsdXNpdmV9am9pbih0KXtyZXR1cm4gbmV3ICQoTWF0aC5taW4odGhpcy5zdGFydCx0LnN0YXJ0KSxNYXRoLm1heCh0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSkpfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCkscj1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7aWYobjw9cilyZXR1cm4gbmV3ICQobixyKX1pbnRlcnNlY3RzKHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydCx0LnN0YXJ0KSxyPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKTtyZXR1cm4gbjxyfWlzQmVmb3JlKHQpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZTw9dC5zdGFydH1pc0FmdGVyKHQpe3JldHVybiB0aGlzLnN0YXJ0Pj10LmVuZEV4Y2x1c2l2ZX1zbGljZSh0KXtyZXR1cm4gdC5zbGljZSh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1zdWJzdHJpbmcodCl7cmV0dXJuIHQuc3Vic3RyaW5nKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUpfWNsaXAodCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyBtZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIE1hdGgubWF4KHRoaXMuc3RhcnQsTWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUtMSx0KSl9Y2xpcEN5Y2xpYyh0KXtpZih0aGlzLmlzRW1wdHkpdGhyb3cgbmV3IG1lKGBJbnZhbGlkIGNsaXBwaW5nIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKTtyZXR1cm4gdDx0aGlzLnN0YXJ0P3RoaXMuZW5kRXhjbHVzaXZlLSh0aGlzLnN0YXJ0LXQpJXRoaXMubGVuZ3RoOnQ+PXRoaXMuZW5kRXhjbHVzaXZlP3RoaXMuc3RhcnQrKHQtdGhpcy5zdGFydCkldGhpcy5sZW5ndGg6dH1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0O248dGhpcy5lbmRFeGNsdXNpdmU7bisrKXQobil9fWZ1bmN0aW9uIHZ0KGUsdCl7Y29uc3Qgbj1xdChlLHQpO3JldHVybiBuPT09LTE/dm9pZCAwOmVbbl19ZnVuY3Rpb24gcXQoZSx0LG49MCxyPWUubGVuZ3RoKXtsZXQgaT1uLHM9cjtmb3IoO2k8czspe2NvbnN0IGE9TWF0aC5mbG9vcigoaStzKS8yKTt0KGVbYV0pP2k9YSsxOnM9YX1yZXR1cm4gaS0xfWZ1bmN0aW9uIGt1KGUsdCl7Y29uc3Qgbj1icihlLHQpO3JldHVybiBuPT09ZS5sZW5ndGg/dm9pZCAwOmVbbl19ZnVuY3Rpb24gYnIoZSx0LG49MCxyPWUubGVuZ3RoKXtsZXQgaT1uLHM9cjtmb3IoO2k8czspe2NvbnN0IGE9TWF0aC5mbG9vcigoaStzKS8yKTt0KGVbYV0pP3M9YTppPWErMX1yZXR1cm4gaX1jb25zdCBGbj1jbGFzcyBGbntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9hcnJheT10LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9MH1maW5kTGFzdE1vbm90b25vdXModCl7aWYoRm4uYXNzZXJ0SW52YXJpYW50cyl7aWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKXtmb3IoY29uc3QgciBvZiB0aGlzLl9hcnJheSlpZih0aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGUocikmJiF0KHIpKXRocm93IG5ldyBFcnJvcigiTW9ub3Rvbm91c0FycmF5OiBjdXJyZW50IHByZWRpY2F0ZSBtdXN0IGJlIHdlYWtlciB0aGFuIChvciBlcXVhbCB0bykgdGhlIHByZXZpb3VzIHByZWRpY2F0ZS4iKX10aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGU9dH1jb25zdCBuPXF0KHRoaXMuX2FycmF5LHQsdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeCk7cmV0dXJuIHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9bisxLG49PT0tMT92b2lkIDA6dGhpcy5fYXJyYXlbbl19fTtGbi5hc3NlcnRJbnZhcmlhbnRzPSExO2xldCB2bj1GbjtjbGFzcyBPe3N0YXRpYyBmcm9tUmFuZ2VJbmNsdXNpdmUodCl7cmV0dXJuIG5ldyBPKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlcisxKX1zdGF0aWMgam9pbk1hbnkodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldCBuPW5ldyBDZSh0WzBdLnNsaWNlKCkpO2ZvcihsZXQgcj0xO3I8dC5sZW5ndGg7cisrKW49bi5nZXRVbmlvbihuZXcgQ2UodFtyXS5zbGljZSgpKSk7cmV0dXJuIG4ucmFuZ2VzfXN0YXRpYyBqb2luKHQpe2lmKHQubGVuZ3RoPT09MCl0aHJvdyBuZXcgbWUoImxpbmVSYW5nZXMgY2Fubm90IGJlIGVtcHR5Iik7bGV0IG49dFswXS5zdGFydExpbmVOdW1iZXIscj10WzBdLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7Zm9yKGxldCBpPTE7aTx0Lmxlbmd0aDtpKyspbj1NYXRoLm1pbihuLHRbaV0uc3RhcnRMaW5lTnVtYmVyKSxyPU1hdGgubWF4KHIsdFtpXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gbmV3IE8obixyKX1zdGF0aWMgb2ZMZW5ndGgodCxuKXtyZXR1cm4gbmV3IE8odCx0K24pfXN0YXRpYyBkZXNlcmlhbGl6ZSh0KXtyZXR1cm4gbmV3IE8odFswXSx0WzFdKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHQ+bil0aHJvdyBuZXcgbWUoYHN0YXJ0TGluZU51bWJlciAke3R9IGNhbm5vdCBiZSBhZnRlciBlbmRMaW5lTnVtYmVyRXhjbHVzaXZlICR7bn1gKTt0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT1ufWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9dCYmdDx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI9PT10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZGVsdGEodCl7cmV0dXJuIG5ldyBPKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWRlbHRhTGVuZ3RoKHQpe3JldHVybiBuZXcgTyh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtdGhpcy5zdGFydExpbmVOdW1iZXJ9am9pbih0KXtyZXR1cm4gbmV3IE8oTWF0aC5taW4odGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLE1hdGgubWF4KHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKX10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0TGluZU51bWJlcn0sJHt0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9KWB9aW50ZXJzZWN0KHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLHI9TWF0aC5taW4odGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7aWYobjw9cilyZXR1cm4gbmV3IE8obixyKX1pbnRlcnNlY3RzU3RyaWN0KHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1vdmVybGFwT3JUb3VjaCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmdC5zdGFydExpbmVOdW1iZXI8PXRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1lcXVhbHModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJnRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b0luY2x1c2l2ZVJhbmdlKCl7cmV0dXJuIHRoaXMuaXNFbXB0eT9udWxsOm5ldyBXKHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpfXRvRXhjbHVzaXZlUmFuZ2UoKXtyZXR1cm4gbmV3IFcodGhpcy5zdGFydExpbmVOdW1iZXIsMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSl9bWFwVG9MaW5lQXJyYXkodCl7Y29uc3Qgbj1bXTtmb3IobGV0IHI9dGhpcy5zdGFydExpbmVOdW1iZXI7cjx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7cisrKW4ucHVzaCh0KHIpKTtyZXR1cm4gbn1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0TGluZU51bWJlcjtuPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTtuKyspdChuKX1zZXJpYWxpemUoKXtyZXR1cm5bdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlXX1pbmNsdWRlcyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXRvT2Zmc2V0UmFuZ2UoKXtyZXR1cm4gbmV3ICQodGhpcy5zdGFydExpbmVOdW1iZXItMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSl9fWNsYXNzIENle2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMuX25vcm1hbGl6ZWRSYW5nZXM9dH1nZXQgcmFuZ2VzKCl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZWRSYW5nZXN9YWRkUmFuZ2UodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBuPWJyKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsaT0+aS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlcikscj1xdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLGk9Pmkuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PXIpdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5zcGxpY2UobiwwLHQpO2Vsc2UgaWYobj09PXItMSl7Y29uc3QgaT10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl09aS5qb2luKHQpfWVsc2V7Y29uc3QgaT10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dLmpvaW4odGhpcy5fbm9ybWFsaXplZFJhbmdlc1tyLTFdKS5qb2luKHQpO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4sci1uLGkpfX1jb250YWlucyh0KXtjb25zdCBuPXZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscj0+ci5zdGFydExpbmVOdW1iZXI8PXQpO3JldHVybiEhbiYmbi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnR9aW50ZXJzZWN0cyh0KXtjb25zdCBuPXZ0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscj0+ci5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50LnN0YXJ0TGluZU51bWJlcn1nZXRVbmlvbih0KXtpZih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD09PTApcmV0dXJuIHQ7aWYodC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0aGlzO2NvbnN0IG49W107bGV0IHI9MCxpPTAscz1udWxsO2Zvcig7cjx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aHx8aTx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2xldCBhPW51bGw7aWYocjx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmaTx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCl7Y29uc3QgbD10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3JdLG89dC5fbm9ybWFsaXplZFJhbmdlc1tpXTtsLnN0YXJ0TGluZU51bWJlcjxvLnN0YXJ0TGluZU51bWJlcj8oYT1sLHIrKyk6KGE9byxpKyspfWVsc2Ugcjx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD8oYT10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3JdLHIrKyk6KGE9dC5fbm9ybWFsaXplZFJhbmdlc1tpXSxpKyspO3M9PT1udWxsP3M9YTpzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PWEuc3RhcnRMaW5lTnVtYmVyP3M9bmV3IE8ocy5zdGFydExpbmVOdW1iZXIsTWF0aC5tYXgocy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGEuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpOihuLnB1c2gocykscz1hKX1yZXR1cm4gcyE9PW51bGwmJm4ucHVzaChzKSxuZXcgQ2Uobil9c3VidHJhY3RGcm9tKHQpe2NvbnN0IG49YnIodGhpcy5fbm9ybWFsaXplZFJhbmdlcyxhPT5hLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXQuc3RhcnRMaW5lTnVtYmVyKSxyPXF0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsYT0+YS5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkrMTtpZihuPT09cilyZXR1cm4gbmV3IENlKFt0XSk7Y29uc3QgaT1bXTtsZXQgcz10LnN0YXJ0TGluZU51bWJlcjtmb3IobGV0IGE9bjthPHI7YSsrKXtjb25zdCBsPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbYV07bC5zdGFydExpbmVOdW1iZXI+cyYmaS5wdXNoKG5ldyBPKHMsbC5zdGFydExpbmVOdW1iZXIpKSxzPWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1yZXR1cm4gczx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJmkucHVzaChuZXcgTyhzLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpLG5ldyBDZShpKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcCh0PT50LnRvU3RyaW5nKCkpLmpvaW4oIiwgIil9Z2V0SW50ZXJzZWN0aW9uKHQpe2NvbnN0IG49W107bGV0IHI9MCxpPTA7Zm9yKDtyPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoJiZpPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoOyl7Y29uc3Qgcz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3JdLGE9dC5fbm9ybWFsaXplZFJhbmdlc1tpXSxsPXMuaW50ZXJzZWN0KGEpO2wmJiFsLmlzRW1wdHkmJm4ucHVzaChsKSxzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8YS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlP3IrKzppKyt9cmV0dXJuIG5ldyBDZShuKX1nZXRXaXRoRGVsdGEodCl7cmV0dXJuIG5ldyBDZSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcChuPT5uLmRlbHRhKHQpKSl9fWNvbnN0IEtlPWNsYXNzIEtle3N0YXRpYyBiZXR3ZWVuUG9zaXRpb25zKHQsbil7cmV0dXJuIHQubGluZU51bWJlcj09PW4ubGluZU51bWJlcj9uZXcgS2UoMCxuLmNvbHVtbi10LmNvbHVtbik6bmV3IEtlKG4ubGluZU51bWJlci10LmxpbmVOdW1iZXIsbi5jb2x1bW4tMSl9c3RhdGljIG9mUmFuZ2UodCl7cmV0dXJuIEtlLmJldHdlZW5Qb3NpdGlvbnModC5nZXRTdGFydFBvc2l0aW9uKCksdC5nZXRFbmRQb3NpdGlvbigpKX1zdGF0aWMgb2ZUZXh0KHQpe2xldCBuPTAscj0wO2Zvcihjb25zdCBpIG9mIHQpaT09PWAKYD8obisrLHI9MCk6cisrO3JldHVybiBuZXcgS2UobixyKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZUNvdW50PXQsdGhpcy5jb2x1bW5Db3VudD1ufWlzR3JlYXRlclRoYW5PckVxdWFsVG8odCl7cmV0dXJuIHRoaXMubGluZUNvdW50IT09dC5saW5lQ291bnQ/dGhpcy5saW5lQ291bnQ+dC5saW5lQ291bnQ6dGhpcy5jb2x1bW5Db3VudD49dC5jb2x1bW5Db3VudH1jcmVhdGVSYW5nZSh0KXtyZXR1cm4gdGhpcy5saW5lQ291bnQ9PT0wP25ldyBXKHQubGluZU51bWJlcix0LmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4rdGhpcy5jb2x1bW5Db3VudCk6bmV3IFcodC5saW5lTnVtYmVyLHQuY29sdW1uLHQubGluZU51bWJlcit0aGlzLmxpbmVDb3VudCx0aGlzLmNvbHVtbkNvdW50KzEpfWFkZFRvUG9zaXRpb24odCl7cmV0dXJuIHRoaXMubGluZUNvdW50PT09MD9uZXcgZWUodC5saW5lTnVtYmVyLHQuY29sdW1uK3RoaXMuY29sdW1uQ291bnQpOm5ldyBlZSh0LmxpbmVOdW1iZXIrdGhpcy5saW5lQ291bnQsdGhpcy5jb2x1bW5Db3VudCsxKX10b1N0cmluZygpe3JldHVybmAke3RoaXMubGluZUNvdW50fSwke3RoaXMuY29sdW1uQ291bnR9YH19O0tlLnplcm89bmV3IEtlKDAsMCk7bGV0IEJzPUtlO2NsYXNzIEV1e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5yYW5nZT10LHRoaXMudGV4dD1ufXRvU2luZ2xlRWRpdE9wZXJhdGlvbigpe3JldHVybntyYW5nZTp0aGlzLnJhbmdlLHRleHQ6dGhpcy50ZXh0fX19Y2xhc3MgeWV7c3RhdGljIGludmVyc2UodCxuLHIpe2NvbnN0IGk9W107bGV0IHM9MSxhPTE7Zm9yKGNvbnN0IG8gb2YgdCl7Y29uc3QgdT1uZXcgeWUobmV3IE8ocyxvLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciksbmV3IE8oYSxvLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpO3UubW9kaWZpZWQuaXNFbXB0eXx8aS5wdXNoKHUpLHM9by5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGE9by5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfWNvbnN0IGw9bmV3IHllKG5ldyBPKHMsbisxKSxuZXcgTyhhLHIrMSkpO3JldHVybiBsLm1vZGlmaWVkLmlzRW1wdHl8fGkucHVzaChsKSxpfXN0YXRpYyBjbGlwKHQsbixyKXtjb25zdCBpPVtdO2Zvcihjb25zdCBzIG9mIHQpe2NvbnN0IGE9cy5vcmlnaW5hbC5pbnRlcnNlY3QobiksbD1zLm1vZGlmaWVkLmludGVyc2VjdChyKTthJiYhYS5pc0VtcHR5JiZsJiYhbC5pc0VtcHR5JiZpLnB1c2gobmV3IHllKGEsbCkpfXJldHVybiBpfWNvbnN0cnVjdG9yKHQsbil7dGhpcy5vcmlnaW5hbD10LHRoaXMubW9kaWZpZWQ9bn10b1N0cmluZygpe3JldHVybmB7JHt0aGlzLm9yaWdpbmFsLnRvU3RyaW5nKCl9LT4ke3RoaXMubW9kaWZpZWQudG9TdHJpbmcoKX19YH1mbGlwKCl7cmV0dXJuIG5ldyB5ZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwpfWpvaW4odCl7cmV0dXJuIG5ldyB5ZSh0aGlzLm9yaWdpbmFsLmpvaW4odC5vcmlnaW5hbCksdGhpcy5tb2RpZmllZC5qb2luKHQubW9kaWZpZWQpKX10b1JhbmdlTWFwcGluZygpe2NvbnN0IHQ9dGhpcy5vcmlnaW5hbC50b0luY2x1c2l2ZVJhbmdlKCksbj10aGlzLm1vZGlmaWVkLnRvSW5jbHVzaXZlUmFuZ2UoKTtpZih0JiZuKXJldHVybiBuZXcgU2UodCxuKTtpZih0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj09PTF8fHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPT09MSl7aWYoISh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj09PTEmJnRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPT09MSkpdGhyb3cgbmV3IG1lKCJub3QgYSB2YWxpZCBkaWZmIik7cmV0dXJuIG5ldyBTZShuZXcgVyh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSxuZXcgVyh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSl9ZWxzZSByZXR1cm4gbmV3IFNlKG5ldyBXKHRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG5ldyBXKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsdGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKX10b1JhbmdlTWFwcGluZzIodCxuKXtpZihVcyh0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsdCkmJlVzKHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxuKSlyZXR1cm4gbmV3IFNlKG5ldyBXKHRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpLG5ldyBXKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLDEpKTtpZighdGhpcy5vcmlnaW5hbC5pc0VtcHR5JiYhdGhpcy5tb2RpZmllZC5pc0VtcHR5KXJldHVybiBuZXcgU2UoVy5mcm9tUG9zaXRpb25zKG5ldyBlZSh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxKSx4dChuZXcgZWUodGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLHQpKSxXLmZyb21Qb3NpdGlvbnMobmV3IGVlKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLDEpLHh0KG5ldyBlZSh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksbikpKTtpZih0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj4xJiZ0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj4xKXJldHVybiBuZXcgU2UoVy5mcm9tUG9zaXRpb25zKHh0KG5ldyBlZSh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSx4dChuZXcgZWUodGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLHQpKSxXLmZyb21Qb3NpdGlvbnMoeHQobmV3IGVlKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pLHh0KG5ldyBlZSh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksbikpKTt0aHJvdyBuZXcgbWV9fWZ1bmN0aW9uIHh0KGUsdCl7aWYoZS5saW5lTnVtYmVyPDEpcmV0dXJuIG5ldyBlZSgxLDEpO2lmKGUubGluZU51bWJlcj50Lmxlbmd0aClyZXR1cm4gbmV3IGVlKHQubGVuZ3RoLHRbdC5sZW5ndGgtMV0ubGVuZ3RoKzEpO2NvbnN0IG49dFtlLmxpbmVOdW1iZXItMV07cmV0dXJuIGUuY29sdW1uPm4ubGVuZ3RoKzE/bmV3IGVlKGUubGluZU51bWJlcixuLmxlbmd0aCsxKTplfWZ1bmN0aW9uIFVzKGUsdCl7cmV0dXJuIGU+PTEmJmU8PXQubGVuZ3RofWNsYXNzIEJlIGV4dGVuZHMgeWV7c3RhdGljIGZyb21SYW5nZU1hcHBpbmdzKHQpe2NvbnN0IG49Ty5qb2luKHQubWFwKGk9Pk8uZnJvbVJhbmdlSW5jbHVzaXZlKGkub3JpZ2luYWxSYW5nZSkpKSxyPU8uam9pbih0Lm1hcChpPT5PLmZyb21SYW5nZUluY2x1c2l2ZShpLm1vZGlmaWVkUmFuZ2UpKSk7cmV0dXJuIG5ldyBCZShuLHIsdCl9Y29uc3RydWN0b3IodCxuLHIpe3N1cGVyKHQsbiksdGhpcy5pbm5lckNoYW5nZXM9cn1mbGlwKCl7cmV0dXJuIG5ldyBCZSh0aGlzLm1vZGlmaWVkLHRoaXMub3JpZ2luYWwsdGhpcy5pbm5lckNoYW5nZXM/Lm1hcCh0PT50LmZsaXAoKSkpfXdpdGhJbm5lckNoYW5nZXNGcm9tTGluZVJhbmdlcygpe3JldHVybiBuZXcgQmUodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLFt0aGlzLnRvUmFuZ2VNYXBwaW5nKCldKX19Y2xhc3MgU2V7c3RhdGljIGFzc2VydFNvcnRlZCh0KXtmb3IobGV0IG49MTtuPHQubGVuZ3RoO24rKyl7Y29uc3Qgcj10W24tMV0saT10W25dO2lmKCEoci5vcmlnaW5hbFJhbmdlLmdldEVuZFBvc2l0aW9uKCkuaXNCZWZvcmVPckVxdWFsKGkub3JpZ2luYWxSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCkpJiZyLm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKS5pc0JlZm9yZU9yRXF1YWwoaS5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSkpKXRocm93IG5ldyBtZSgiUmFuZ2UgbWFwcGluZ3MgbXVzdCBiZSBzb3J0ZWQiKX19Y29uc3RydWN0b3IodCxuKXt0aGlzLm9yaWdpbmFsUmFuZ2U9dCx0aGlzLm1vZGlmaWVkUmFuZ2U9bn10b1N0cmluZygpe3JldHVybmB7JHt0aGlzLm9yaWdpbmFsUmFuZ2UudG9TdHJpbmcoKX0tPiR7dGhpcy5tb2RpZmllZFJhbmdlLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgU2UodGhpcy5tb2RpZmllZFJhbmdlLHRoaXMub3JpZ2luYWxSYW5nZSl9dG9UZXh0RWRpdCh0KXtjb25zdCBuPXQuZ2V0VmFsdWVPZlJhbmdlKHRoaXMubW9kaWZpZWRSYW5nZSk7cmV0dXJuIG5ldyBFdSh0aGlzLm9yaWdpbmFsUmFuZ2Usbil9fWNvbnN0IFJ1PTM7Y2xhc3MgTXV7Y29tcHV0ZURpZmYodCxuLHIpe2NvbnN0IHM9bmV3IFB1KHQsbix7bWF4Q29tcHV0YXRpb25UaW1lOnIubWF4Q29tcHV0YXRpb25UaW1lTXMsc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U6ci5pZ25vcmVUcmltV2hpdGVzcGFjZSxzaG91bGRDb21wdXRlQ2hhckNoYW5nZXM6ITAsc2hvdWxkTWFrZVByZXR0eURpZmY6ITAsc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlczohMH0pLmNvbXB1dGVEaWZmKCksYT1bXTtsZXQgbD1udWxsO2Zvcihjb25zdCBvIG9mIHMuY2hhbmdlcyl7bGV0IHU7by5vcmlnaW5hbEVuZExpbmVOdW1iZXI9PT0wP3U9bmV3IE8oby5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxLG8ub3JpZ2luYWxTdGFydExpbmVOdW1iZXIrMSk6dT1uZXcgTyhvLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyLG8ub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzEpO2xldCBoO28ubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09MD9oPW5ldyBPKG8ubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSxvLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyKzEpOmg9bmV3IE8oby5tb2RpZmllZFN0YXJ0TGluZU51bWJlcixvLm1vZGlmaWVkRW5kTGluZU51bWJlcisxKTtsZXQgYz1uZXcgQmUodSxoLG8uY2hhckNoYW5nZXM/Lm1hcChkPT5uZXcgU2UobmV3IFcoZC5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcixkLm9yaWdpbmFsU3RhcnRDb2x1bW4sZC5vcmlnaW5hbEVuZExpbmVOdW1iZXIsZC5vcmlnaW5hbEVuZENvbHVtbiksbmV3IFcoZC5tb2RpZmllZFN0YXJ0TGluZU51bWJlcixkLm1vZGlmaWVkU3RhcnRDb2x1bW4sZC5tb2RpZmllZEVuZExpbmVOdW1iZXIsZC5tb2RpZmllZEVuZENvbHVtbikpKSk7bCYmKGwubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PWMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyfHxsLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU9PT1jLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikmJihjPW5ldyBCZShsLm9yaWdpbmFsLmpvaW4oYy5vcmlnaW5hbCksbC5tb2RpZmllZC5qb2luKGMubW9kaWZpZWQpLGwuaW5uZXJDaGFuZ2VzJiZjLmlubmVyQ2hhbmdlcz9sLmlubmVyQ2hhbmdlcy5jb25jYXQoYy5pbm5lckNoYW5nZXMpOnZvaWQgMCksYS5wb3AoKSksYS5wdXNoKGMpLGw9Y31yZXR1cm4gcG4oKCk9PlZzKGEsKG8sdSk9PnUub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLW8ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PXUubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLW8ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmby5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPHUub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyJiZvLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8dS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSxuZXcgYm4oYSxbXSxzLnF1aXRFYXJseSl9fWZ1bmN0aW9uIHFzKGUsdCxuLHIpe3JldHVybiBuZXcgSGUoZSx0LG4pLkNvbXB1dGVEaWZmKHIpfWxldCAkcz1jbGFzc3tjb25zdHJ1Y3Rvcih0KXtjb25zdCBuPVtdLHI9W107Zm9yKGxldCBpPTAscz10Lmxlbmd0aDtpPHM7aSsrKW5baV09dnIodFtpXSwxKSxyW2ldPXhyKHRbaV0sMSk7dGhpcy5saW5lcz10LHRoaXMuX3N0YXJ0Q29sdW1ucz1uLHRoaXMuX2VuZENvbHVtbnM9cn1nZXRFbGVtZW50cygpe2NvbnN0IHQ9W107Zm9yKGxldCBuPTAscj10aGlzLmxpbmVzLmxlbmd0aDtuPHI7bisrKXRbbl09dGhpcy5saW5lc1tuXS5zdWJzdHJpbmcodGhpcy5fc3RhcnRDb2x1bW5zW25dLTEsdGhpcy5fZW5kQ29sdW1uc1tuXS0xKTtyZXR1cm4gdH1nZXRTdHJpY3RFbGVtZW50KHQpe3JldHVybiB0aGlzLmxpbmVzW3RdfWdldFN0YXJ0TGluZU51bWJlcih0KXtyZXR1cm4gdCsxfWdldEVuZExpbmVOdW1iZXIodCl7cmV0dXJuIHQrMX1jcmVhdGVDaGFyU2VxdWVuY2UodCxuLHIpe2NvbnN0IGk9W10scz1bXSxhPVtdO2xldCBsPTA7Zm9yKGxldCBvPW47bzw9cjtvKyspe2NvbnN0IHU9dGhpcy5saW5lc1tvXSxoPXQ/dGhpcy5fc3RhcnRDb2x1bW5zW29dOjEsYz10P3RoaXMuX2VuZENvbHVtbnNbb106dS5sZW5ndGgrMTtmb3IobGV0IGQ9aDtkPGM7ZCsrKWlbbF09dS5jaGFyQ29kZUF0KGQtMSksc1tsXT1vKzEsYVtsXT1kLGwrKzshdCYmbzxyJiYoaVtsXT0xMCxzW2xdPW8rMSxhW2xdPXUubGVuZ3RoKzEsbCsrKX1yZXR1cm4gbmV3IEN1KGkscyxhKX19O2NsYXNzIEN1e2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLl9jaGFyQ29kZXM9dCx0aGlzLl9saW5lTnVtYmVycz1uLHRoaXMuX2NvbHVtbnM9cn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLl9jaGFyQ29kZXMubWFwKCh0LG4pPT4odD09PTEwPyJcXG4iOlN0cmluZy5mcm9tQ2hhckNvZGUodCkpK2AtKCR7dGhpcy5fbGluZU51bWJlcnNbbl19LCR7dGhpcy5fY29sdW1uc1tuXX0pYCkuam9pbigiLCAiKSsiXSJ9X2Fzc2VydEluZGV4KHQsbil7aWYodDwwfHx0Pj1uLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIklsbGVnYWwgaW5kZXgiKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLl9jaGFyQ29kZXN9Z2V0U3RhcnRMaW5lTnVtYmVyKHQpe3JldHVybiB0PjAmJnQ9PT10aGlzLl9saW5lTnVtYmVycy5sZW5ndGg/dGhpcy5nZXRFbmRMaW5lTnVtYmVyKHQtMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fbGluZU51bWJlcnMpLHRoaXMuX2xpbmVOdW1iZXJzW3RdKX1nZXRFbmRMaW5lTnVtYmVyKHQpe3JldHVybiB0PT09LTE/dGhpcy5nZXRTdGFydExpbmVOdW1iZXIodCsxKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fY2hhckNvZGVzW3RdPT09MTA/dGhpcy5fbGluZU51bWJlcnNbdF0rMTp0aGlzLl9saW5lTnVtYmVyc1t0XSl9Z2V0U3RhcnRDb2x1bW4odCl7cmV0dXJuIHQ+MCYmdD09PXRoaXMuX2NvbHVtbnMubGVuZ3RoP3RoaXMuZ2V0RW5kQ29sdW1uKHQtMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fY29sdW1ucyksdGhpcy5fY29sdW1uc1t0XSl9Z2V0RW5kQ29sdW1uKHQpe3JldHVybiB0PT09LTE/dGhpcy5nZXRTdGFydENvbHVtbih0KzEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2NvbHVtbnMpLHRoaXMuX2NoYXJDb2Rlc1t0XT09PTEwPzE6dGhpcy5fY29sdW1uc1t0XSsxKX19Y2xhc3MgeXR7Y29uc3RydWN0b3IodCxuLHIsaSxzLGEsbCxvKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5vcmlnaW5hbFN0YXJ0Q29sdW1uPW4sdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9cix0aGlzLm9yaWdpbmFsRW5kQ29sdW1uPWksdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1zLHRoaXMubW9kaWZpZWRTdGFydENvbHVtbj1hLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWwsdGhpcy5tb2RpZmllZEVuZENvbHVtbj1vfXN0YXRpYyBjcmVhdGVGcm9tRGlmZkNoYW5nZSh0LG4scil7Y29uc3QgaT1uLmdldFN0YXJ0TGluZU51bWJlcih0Lm9yaWdpbmFsU3RhcnQpLHM9bi5nZXRTdGFydENvbHVtbih0Lm9yaWdpbmFsU3RhcnQpLGE9bi5nZXRFbmRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCt0Lm9yaWdpbmFsTGVuZ3RoLTEpLGw9bi5nZXRFbmRDb2x1bW4odC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksbz1yLmdldFN0YXJ0TGluZU51bWJlcih0Lm1vZGlmaWVkU3RhcnQpLHU9ci5nZXRTdGFydENvbHVtbih0Lm1vZGlmaWVkU3RhcnQpLGg9ci5nZXRFbmRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoLTEpLGM9ci5nZXRFbmRDb2x1bW4odC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSk7cmV0dXJuIG5ldyB5dChpLHMsYSxsLG8sdSxoLGMpfX1mdW5jdGlvbiBUdShlKXtpZihlLmxlbmd0aDw9MSlyZXR1cm4gZTtjb25zdCB0PVtlWzBdXTtsZXQgbj10WzBdO2ZvcihsZXQgcj0xLGk9ZS5sZW5ndGg7cjxpO3IrKyl7Y29uc3Qgcz1lW3JdLGE9cy5vcmlnaW5hbFN0YXJ0LShuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aCksbD1zLm1vZGlmaWVkU3RhcnQtKG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoKTtNYXRoLm1pbihhLGwpPFJ1PyhuLm9yaWdpbmFsTGVuZ3RoPXMub3JpZ2luYWxTdGFydCtzLm9yaWdpbmFsTGVuZ3RoLW4ub3JpZ2luYWxTdGFydCxuLm1vZGlmaWVkTGVuZ3RoPXMubW9kaWZpZWRTdGFydCtzLm1vZGlmaWVkTGVuZ3RoLW4ubW9kaWZpZWRTdGFydCk6KHQucHVzaChzKSxuPXMpfXJldHVybiB0fWNsYXNzICR0e2NvbnN0cnVjdG9yKHQsbixyLGkscyl7dGhpcy5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcj10LHRoaXMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPW4sdGhpcy5tb2RpZmllZFN0YXJ0TGluZU51bWJlcj1yLHRoaXMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWksdGhpcy5jaGFyQ2hhbmdlcz1zfXN0YXRpYyBjcmVhdGVGcm9tRGlmZlJlc3VsdCh0LG4scixpLHMsYSxsKXtsZXQgbyx1LGgsYyxkO2lmKG4ub3JpZ2luYWxMZW5ndGg9PT0wPyhvPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCktMSx1PTApOihvPXIuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ub3JpZ2luYWxTdGFydCksdT1yLmdldEVuZExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtMSkpLG4ubW9kaWZpZWRMZW5ndGg9PT0wPyhoPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCktMSxjPTApOihoPWkuZ2V0U3RhcnRMaW5lTnVtYmVyKG4ubW9kaWZpZWRTdGFydCksYz1pLmdldEVuZExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgtMSkpLGEmJm4ub3JpZ2luYWxMZW5ndGg+MCYmbi5vcmlnaW5hbExlbmd0aDwyMCYmbi5tb2RpZmllZExlbmd0aD4wJiZuLm1vZGlmaWVkTGVuZ3RoPDIwJiZzKCkpe2NvbnN0IG09ci5jcmVhdGVDaGFyU2VxdWVuY2UodCxuLm9yaWdpbmFsU3RhcnQsbi5vcmlnaW5hbFN0YXJ0K24ub3JpZ2luYWxMZW5ndGgtMSksZz1pLmNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4ubW9kaWZpZWRTdGFydCxuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC0xKTtpZihtLmdldEVsZW1lbnRzKCkubGVuZ3RoPjAmJmcuZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCl7bGV0IHA9cXMobSxnLHMsITApLmNoYW5nZXM7bCYmKHA9VHUocCkpLGQ9W107Zm9yKGxldCB2PTAsXz1wLmxlbmd0aDt2PF87disrKWQucHVzaCh5dC5jcmVhdGVGcm9tRGlmZkNoYW5nZShwW3ZdLG0sZykpfX1yZXR1cm4gbmV3ICR0KG8sdSxoLGMsZCl9fWNsYXNzIFB1e2NvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcz1yLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXM9ci5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2U9ci5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSx0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmPXIuc2hvdWxkTWFrZVByZXR0eURpZmYsdGhpcy5vcmlnaW5hbExpbmVzPXQsdGhpcy5tb2RpZmllZExpbmVzPW4sdGhpcy5vcmlnaW5hbD1uZXcgJHModCksdGhpcy5tb2RpZmllZD1uZXcgJHMobiksdGhpcy5jb250aW51ZUxpbmVEaWZmPWpzKHIubWF4Q29tcHV0YXRpb25UaW1lKSx0aGlzLmNvbnRpbnVlQ2hhckRpZmY9anMoci5tYXhDb21wdXRhdGlvblRpbWU9PT0wPzA6TWF0aC5taW4oci5tYXhDb21wdXRhdGlvblRpbWUsNWUzKSl9Y29tcHV0ZURpZmYoKXtpZih0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMub3JpZ2luYWwubGluZXNbMF0ubGVuZ3RoPT09MClyZXR1cm4gdGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGg9PT0xJiZ0aGlzLm1vZGlmaWVkLmxpbmVzWzBdLmxlbmd0aD09PTA/e3F1aXRFYXJseTohMSxjaGFuZ2VzOltdfTp7cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjoxLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOnRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoLGNoYXJDaGFuZ2VzOnZvaWQgMH1dfTtpZih0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoPT09MClyZXR1cm57cXVpdEVhcmx5OiExLGNoYW5nZXM6W3tvcmlnaW5hbFN0YXJ0TGluZU51bWJlcjoxLG9yaWdpbmFsRW5kTGluZU51bWJlcjp0aGlzLm9yaWdpbmFsLmxpbmVzLmxlbmd0aCxtb2RpZmllZFN0YXJ0TGluZU51bWJlcjoxLG1vZGlmaWVkRW5kTGluZU51bWJlcjoxLGNoYXJDaGFuZ2VzOnZvaWQgMH1dfTtjb25zdCB0PXFzKHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlTGluZURpZmYsdGhpcy5zaG91bGRNYWtlUHJldHR5RGlmZiksbj10LmNoYW5nZXMscj10LnF1aXRFYXJseTtpZih0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlKXtjb25zdCBsPVtdO2ZvcihsZXQgbz0wLHU9bi5sZW5ndGg7bzx1O28rKylsLnB1c2goJHQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxuW29dLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSk7cmV0dXJue3F1aXRFYXJseTpyLGNoYW5nZXM6bH19Y29uc3QgaT1bXTtsZXQgcz0wLGE9MDtmb3IobGV0IGw9LTEsbz1uLmxlbmd0aDtsPG87bCsrKXtjb25zdCB1PWwrMTxvP25bbCsxXTpudWxsLGg9dT91Lm9yaWdpbmFsU3RhcnQ6dGhpcy5vcmlnaW5hbExpbmVzLmxlbmd0aCxjPXU/dS5tb2RpZmllZFN0YXJ0OnRoaXMubW9kaWZpZWRMaW5lcy5sZW5ndGg7Zm9yKDtzPGgmJmE8Yzspe2NvbnN0IGQ9dGhpcy5vcmlnaW5hbExpbmVzW3NdLG09dGhpcy5tb2RpZmllZExpbmVzW2FdO2lmKGQhPT1tKXt7bGV0IGc9dnIoZCwxKSxwPXZyKG0sMSk7Zm9yKDtnPjEmJnA+MTspe2NvbnN0IHY9ZC5jaGFyQ29kZUF0KGctMiksXz1tLmNoYXJDb2RlQXQocC0yKTtpZih2IT09XylicmVhaztnLS0scC0tfShnPjF8fHA+MSkmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UoaSxzKzEsMSxnLGErMSwxLHApfXtsZXQgZz14cihkLDEpLHA9eHIobSwxKTtjb25zdCB2PWQubGVuZ3RoKzEsXz1tLmxlbmd0aCsxO2Zvcig7Zzx2JiZwPF87KXtjb25zdCBOPWQuY2hhckNvZGVBdChnLTEpLHg9ZC5jaGFyQ29kZUF0KHAtMSk7aWYoTiE9PXgpYnJlYWs7ZysrLHArK30oZzx2fHxwPF8pJiZ0aGlzLl9wdXNoVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKGkscysxLGcsdixhKzEscCxfKX19cysrLGErK311JiYoaS5wdXNoKCR0LmNyZWF0ZUZyb21EaWZmUmVzdWx0KHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2UsdSx0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsdGhpcy5jb250aW51ZUNoYXJEaWZmLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcykpLHMrPXUub3JpZ2luYWxMZW5ndGgsYSs9dS5tb2RpZmllZExlbmd0aCl9cmV0dXJue3F1aXRFYXJseTpyLGNoYW5nZXM6aX19X3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLHIsaSxzLGEsbCl7aWYodGhpcy5fbWVyZ2VUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UodCxuLHIsaSxzLGEsbCkpcmV0dXJuO2xldCBvO3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiYobz1bbmV3IHl0KG4scixuLGkscyxhLHMsbCldKSx0LnB1c2gobmV3ICR0KG4sbixzLHMsbykpfV9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4scixpLHMsYSxsKXtjb25zdCBvPXQubGVuZ3RoO2lmKG89PT0wKXJldHVybiExO2NvbnN0IHU9dFtvLTFdO3JldHVybiB1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj09PTB8fHUubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09MD8hMTp1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj09PW4mJnUubW9kaWZpZWRFbmRMaW5lTnVtYmVyPT09cz8odGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMmJnUuY2hhckNoYW5nZXMucHVzaChuZXcgeXQobixyLG4saSxzLGEscyxsKSksITApOnUub3JpZ2luYWxFbmRMaW5lTnVtYmVyKzE9PT1uJiZ1Lm1vZGlmaWVkRW5kTGluZU51bWJlcisxPT09cz8odS5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bix1Lm1vZGlmaWVkRW5kTGluZU51bWJlcj1zLHRoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzJiZ1LmNoYXJDaGFuZ2VzLnB1c2gobmV3IHl0KG4scixuLGkscyxhLHMsbCkpLCEwKTohMX19ZnVuY3Rpb24gdnIoZSx0KXtjb25zdCBuPW9sKGUpO3JldHVybiBuPT09LTE/dDpuKzF9ZnVuY3Rpb24geHIoZSx0KXtjb25zdCBuPWxsKGUpO3JldHVybiBuPT09LTE/dDpuKzJ9ZnVuY3Rpb24ganMoZSl7aWYoZT09PTApcmV0dXJuKCk9PiEwO2NvbnN0IHQ9RGF0ZS5ub3coKTtyZXR1cm4oKT0+RGF0ZS5ub3coKS10PGV9Y2xhc3MgVWV7c3RhdGljIHRyaXZpYWwodCxuKXtyZXR1cm4gbmV3IFVlKFtuZXcgWigkLm9mTGVuZ3RoKHQubGVuZ3RoKSwkLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KHQsbil7cmV0dXJuIG5ldyBVZShbbmV3IFooJC5vZkxlbmd0aCh0Lmxlbmd0aCksJC5vZkxlbmd0aChuLmxlbmd0aCkpXSwhMCl9Y29uc3RydWN0b3IodCxuKXt0aGlzLmRpZmZzPXQsdGhpcy5oaXRUaW1lb3V0PW59fWNsYXNzIFp7c3RhdGljIGludmVydCh0LG4pe2NvbnN0IHI9W107cmV0dXJuIGpsKHQsKGkscyk9PntyLnB1c2goWi5mcm9tT2Zmc2V0UGFpcnMoaT9pLmdldEVuZEV4Y2x1c2l2ZXMoKTpxZS56ZXJvLHM/cy5nZXRTdGFydHMoKTpuZXcgcWUobiwoaT9pLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtaS5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOjApK24pKSl9KSxyfXN0YXRpYyBmcm9tT2Zmc2V0UGFpcnModCxuKXtyZXR1cm4gbmV3IFoobmV3ICQodC5vZmZzZXQxLG4ub2Zmc2V0MSksbmV3ICQodC5vZmZzZXQyLG4ub2Zmc2V0MikpfXN0YXRpYyBhc3NlcnRTb3J0ZWQodCl7bGV0IG47Zm9yKGNvbnN0IHIgb2YgdCl7aWYobiYmIShuLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PXIuc2VxMVJhbmdlLnN0YXJ0JiZuLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU8PXIuc2VxMlJhbmdlLnN0YXJ0KSl0aHJvdyBuZXcgbWUoIlNlcXVlbmNlIGRpZmZzIG11c3QgYmUgc29ydGVkIik7bj1yfX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBaKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4odCl7cmV0dXJuIG5ldyBaKHRoaXMuc2VxMVJhbmdlLmpvaW4odC5zZXExUmFuZ2UpLHRoaXMuc2VxMlJhbmdlLmpvaW4odC5zZXEyUmFuZ2UpKX1kZWx0YSh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgWih0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgWih0aGlzLnNlcTFSYW5nZS5kZWx0YVN0YXJ0KHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhU3RhcnQodCkpfWRlbHRhRW5kKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBaKHRoaXMuc2VxMVJhbmdlLmRlbHRhRW5kKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhRW5kKHQpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj10aGlzLnNlcTFSYW5nZS5pbnRlcnNlY3QodC5zZXExUmFuZ2UpLHI9dGhpcy5zZXEyUmFuZ2UuaW50ZXJzZWN0KHQuc2VxMlJhbmdlKTtpZighKCFufHwhcikpcmV0dXJuIG5ldyBaKG4scil9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyBxZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgcWUodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNvbnN0IG90PWNsYXNzIG90e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBvdCh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19O290Lnplcm89bmV3IG90KDAsMCksb3QubWF4PW5ldyBvdChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7bGV0IHFlPW90O2NvbnN0IFZuPWNsYXNzIFZue2lzVmFsaWQoKXtyZXR1cm4hMH19O1ZuLmluc3RhbmNlPW5ldyBWbjtsZXQganQ9Vm47Y2xhc3MgSXV7Y29uc3RydWN0b3IodCl7aWYodGhpcy50aW1lb3V0PXQsdGhpcy5zdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLnZhbGlkPSEwLHQ8PTApdGhyb3cgbmV3IG1lKCJ0aW1lb3V0IG11c3QgYmUgcG9zaXRpdmUiKX1pc1ZhbGlkKCl7aWYoIShEYXRlLm5vdygpLXRoaXMuc3RhcnRUaW1lPHRoaXMudGltZW91dCkmJnRoaXMudmFsaWQpe3RoaXMudmFsaWQ9ITE7ZGVidWdnZXJ9cmV0dXJuIHRoaXMudmFsaWR9fWNsYXNzIHlye2NvbnN0cnVjdG9yKHQsbil7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW4sdGhpcy5hcnJheT1bXSx0aGlzLmFycmF5PW5ldyBBcnJheSh0Km4pfWdldCh0LG4pe3JldHVybiB0aGlzLmFycmF5W3Qrbip0aGlzLndpZHRoXX1zZXQodCxuLHIpe3RoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdPXJ9fWZ1bmN0aW9uIHdyKGUpe3JldHVybiBlPT09MzJ8fGU9PT05fWNvbnN0IEt0PWNsYXNzIEt0e3N0YXRpYyBnZXRLZXkodCl7bGV0IG49dGhpcy5jaHJLZXlzLmdldCh0KTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy5jaHJLZXlzLnNpemUsdGhpcy5jaHJLZXlzLnNldCh0LG4pKSxufWNvbnN0cnVjdG9yKHQsbixyKXt0aGlzLnJhbmdlPXQsdGhpcy5saW5lcz1uLHRoaXMuc291cmNlPXIsdGhpcy5oaXN0b2dyYW09W107bGV0IGk9MDtmb3IobGV0IHM9dC5zdGFydExpbmVOdW1iZXItMTtzPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xO3MrKyl7Y29uc3QgYT1uW3NdO2ZvcihsZXQgbz0wO288YS5sZW5ndGg7bysrKXtpKys7Y29uc3QgdT1hW29dLGg9S3QuZ2V0S2V5KHUpO3RoaXMuaGlzdG9ncmFtW2hdPSh0aGlzLmhpc3RvZ3JhbVtoXXx8MCkrMX1pKys7Y29uc3QgbD1LdC5nZXRLZXkoYApgKTt0aGlzLmhpc3RvZ3JhbVtsXT0odGhpcy5oaXN0b2dyYW1bbF18fDApKzF9dGhpcy50b3RhbENvdW50PWl9Y29tcHV0ZVNpbWlsYXJpdHkodCl7bGV0IG49MDtjb25zdCByPU1hdGgubWF4KHRoaXMuaGlzdG9ncmFtLmxlbmd0aCx0Lmhpc3RvZ3JhbS5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8cjtpKyspbis9TWF0aC5hYnMoKHRoaXMuaGlzdG9ncmFtW2ldPz8wKS0odC5oaXN0b2dyYW1baV0/PzApKTtyZXR1cm4gMS1uLyh0aGlzLnRvdGFsQ291bnQrdC50b3RhbENvdW50KX19O0t0LmNocktleXM9bmV3IE1hcDtsZXQgeG49S3Q7Y2xhc3MgRnV7Y29tcHV0ZSh0LG4scj1qdC5pbnN0YW5jZSxpKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gVWUudHJpdmlhbCh0LG4pO2NvbnN0IHM9bmV3IHlyKHQubGVuZ3RoLG4ubGVuZ3RoKSxhPW5ldyB5cih0Lmxlbmd0aCxuLmxlbmd0aCksbD1uZXcgeXIodC5sZW5ndGgsbi5sZW5ndGgpO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKWZvcihsZXQgcD0wO3A8bi5sZW5ndGg7cCsrKXtpZighci5pc1ZhbGlkKCkpcmV0dXJuIFVlLnRyaXZpYWxUaW1lZE91dCh0LG4pO2NvbnN0IHY9Zz09PTA/MDpzLmdldChnLTEscCksXz1wPT09MD8wOnMuZ2V0KGcscC0xKTtsZXQgTjt0LmdldEVsZW1lbnQoZyk9PT1uLmdldEVsZW1lbnQocCk/KGc9PT0wfHxwPT09MD9OPTA6Tj1zLmdldChnLTEscC0xKSxnPjAmJnA+MCYmYS5nZXQoZy0xLHAtMSk9PT0zJiYoTis9bC5nZXQoZy0xLHAtMSkpLE4rPWk/aShnLHApOjEpOk49LTE7Y29uc3QgeD1NYXRoLm1heCh2LF8sTik7aWYoeD09PU4pe2NvbnN0IHk9Zz4wJiZwPjA/bC5nZXQoZy0xLHAtMSk6MDtsLnNldChnLHAseSsxKSxhLnNldChnLHAsMyl9ZWxzZSB4PT09dj8obC5zZXQoZyxwLDApLGEuc2V0KGcscCwxKSk6eD09PV8mJihsLnNldChnLHAsMCksYS5zZXQoZyxwLDIpKTtzLnNldChnLHAseCl9Y29uc3Qgbz1bXTtsZXQgdT10Lmxlbmd0aCxoPW4ubGVuZ3RoO2Z1bmN0aW9uIGMoZyxwKXsoZysxIT09dXx8cCsxIT09aCkmJm8ucHVzaChuZXcgWihuZXcgJChnKzEsdSksbmV3ICQocCsxLGgpKSksdT1nLGg9cH1sZXQgZD10Lmxlbmd0aC0xLG09bi5sZW5ndGgtMTtmb3IoO2Q+PTAmJm0+PTA7KWEuZ2V0KGQsbSk9PT0zPyhjKGQsbSksZC0tLG0tLSk6YS5nZXQoZCxtKT09PTE/ZC0tOm0tLTtyZXR1cm4gYygtMSwtMSksby5yZXZlcnNlKCksbmV3IFVlKG8sITEpfX1jbGFzcyBIc3tjb21wdXRlKHQsbixyPWp0Lmluc3RhbmNlKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gVWUudHJpdmlhbCh0LG4pO2NvbnN0IGk9dCxzPW47ZnVuY3Rpb24gYShwLHYpe2Zvcig7cDxpLmxlbmd0aCYmdjxzLmxlbmd0aCYmaS5nZXRFbGVtZW50KHApPT09cy5nZXRFbGVtZW50KHYpOylwKyssdisrO3JldHVybiBwfWxldCBsPTA7Y29uc3Qgbz1uZXcgVnU7by5zZXQoMCxhKDAsMCkpO2NvbnN0IHU9bmV3IER1O3Uuc2V0KDAsby5nZXQoMCk9PT0wP251bGw6bmV3IFdzKG51bGwsMCwwLG8uZ2V0KDApKSk7bGV0IGg9MDtlOmZvcig7Oyl7aWYobCsrLCFyLmlzVmFsaWQoKSlyZXR1cm4gVWUudHJpdmlhbFRpbWVkT3V0KGkscyk7Y29uc3QgcD0tTWF0aC5taW4obCxzLmxlbmd0aCtsJTIpLHY9TWF0aC5taW4obCxpLmxlbmd0aCtsJTIpO2ZvcihoPXA7aDw9djtoKz0yKXtjb25zdCBfPWg9PT12Py0xOm8uZ2V0KGgrMSksTj1oPT09cD8tMTpvLmdldChoLTEpKzEseD1NYXRoLm1pbihNYXRoLm1heChfLE4pLGkubGVuZ3RoKSx5PXgtaDtpZih4PmkubGVuZ3RofHx5PnMubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IGI9YSh4LHkpO28uc2V0KGgsYik7Y29uc3QgTD14PT09Xz91LmdldChoKzEpOnUuZ2V0KGgtMSk7aWYodS5zZXQoaCxiIT09eD9uZXcgV3MoTCx4LHksYi14KTpMKSxvLmdldChoKT09PWkubGVuZ3RoJiZvLmdldChoKS1oPT09cy5sZW5ndGgpYnJlYWsgZX19bGV0IGM9dS5nZXQoaCk7Y29uc3QgZD1bXTtsZXQgbT1pLmxlbmd0aCxnPXMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgcD1jP2MueCtjLmxlbmd0aDowLHY9Yz9jLnkrYy5sZW5ndGg6MDtpZigocCE9PW18fHYhPT1nKSYmZC5wdXNoKG5ldyBaKG5ldyAkKHAsbSksbmV3ICQodixnKSkpLCFjKWJyZWFrO209Yy54LGc9Yy55LGM9Yy5wcmV2fXJldHVybiBkLnJldmVyc2UoKSxuZXcgVWUoZCwhMSl9fWNsYXNzIFdze2NvbnN0cnVjdG9yKHQsbixyLGkpe3RoaXMucHJldj10LHRoaXMueD1uLHRoaXMueT1yLHRoaXMubGVuZ3RoPWl9fWNsYXNzIFZ1e2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCksdGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCl9Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe2lmKHQ8MCl7aWYodD0tdC0xLHQ+PXRoaXMubmVnYXRpdmVBcnIubGVuZ3RoKXtjb25zdCByPXRoaXMubmVnYXRpdmVBcnI7dGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheShyLmxlbmd0aCoyKSx0aGlzLm5lZ2F0aXZlQXJyLnNldChyKX10aGlzLm5lZ2F0aXZlQXJyW3RdPW59ZWxzZXtpZih0Pj10aGlzLnBvc2l0aXZlQXJyLmxlbmd0aCl7Y29uc3Qgcj10aGlzLnBvc2l0aXZlQXJyO3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkoci5sZW5ndGgqMiksdGhpcy5wb3NpdGl2ZUFyci5zZXQocil9dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX19Y2xhc3MgRHV7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPVtdLHRoaXMubmVnYXRpdmVBcnI9W119Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe3Q8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF09bik6dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX1jbGFzcyB5bntjb25zdHJ1Y3Rvcih0LG4scil7dGhpcy5saW5lcz10LHRoaXMucmFuZ2U9bix0aGlzLmNvbnNpZGVyV2hpdGVzcGFjZUNoYW5nZXM9cix0aGlzLmVsZW1lbnRzPVtdLHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4PVtdLHRoaXMubGluZVN0YXJ0T2Zmc2V0cz1bXSx0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHg9W10sdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgucHVzaCgwKTtmb3IobGV0IGk9dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXI7aTw9dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyO2krKyl7bGV0IHM9dFtpLTFdLGE9MDtpPT09dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXImJnRoaXMucmFuZ2Uuc3RhcnRDb2x1bW4+MSYmKGE9dGhpcy5yYW5nZS5zdGFydENvbHVtbi0xLHM9cy5zdWJzdHJpbmcoYSkpLHRoaXMubGluZVN0YXJ0T2Zmc2V0cy5wdXNoKGEpO2xldCBsPTA7aWYoIXIpe2NvbnN0IHU9cy50cmltU3RhcnQoKTtsPXMubGVuZ3RoLXUubGVuZ3RoLHM9dS50cmltRW5kKCl9dGhpcy50cmltbWVkV3NMZW5ndGhzQnlMaW5lSWR4LnB1c2gobCk7Y29uc3Qgbz1pPT09dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyP01hdGgubWluKHRoaXMucmFuZ2UuZW5kQ29sdW1uLTEtYS1sLHMubGVuZ3RoKTpzLmxlbmd0aDtmb3IobGV0IHU9MDt1PG87dSsrKXRoaXMuZWxlbWVudHMucHVzaChzLmNoYXJDb2RlQXQodSkpO2k8dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyJiYodGhpcy5lbGVtZW50cy5wdXNoKDEwKSx0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeC5wdXNoKHRoaXMuZWxlbWVudHMubGVuZ3RoKSl9fXRvU3RyaW5nKCl7cmV0dXJuYFNsaWNlOiAiJHt0aGlzLnRleHR9ImB9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KG5ldyAkKDAsdGhpcy5sZW5ndGgpKX1nZXRUZXh0KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzLnNsaWNlKHQuc3RhcnQsdC5lbmRFeGNsdXNpdmUpLm1hcChuPT5TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKS5qb2luKCIiKX1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPUdzKHQ+MD90aGlzLmVsZW1lbnRzW3QtMV06LTEpLHI9R3ModDx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW3RdOi0xKTtpZihuPT09NyYmcj09PTgpcmV0dXJuIDA7aWYobj09PTgpcmV0dXJuIDE1MDtsZXQgaT0wO3JldHVybiBuIT09ciYmKGkrPTEwLG49PT0wJiZyPT09MSYmKGkrPTEpKSxpKz16cyhuKSxpKz16cyhyKSxpfXRyYW5zbGF0ZU9mZnNldCh0LG49InJpZ2h0Iil7Y29uc3Qgcj1xdCh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxzPT5zPD10KSxpPXQtdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHhbcl07cmV0dXJuIG5ldyBlZSh0aGlzLnJhbmdlLnN0YXJ0TGluZU51bWJlcityLDErdGhpcy5saW5lU3RhcnRPZmZzZXRzW3JdK2krKGk9PT0wJiZuPT09ImxlZnQiPzA6dGhpcy50cmltbWVkV3NMZW5ndGhzQnlMaW5lSWR4W3JdKSl9dHJhbnNsYXRlUmFuZ2UodCl7Y29uc3Qgbj10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LnN0YXJ0LCJyaWdodCIpLHI9dGhpcy50cmFuc2xhdGVPZmZzZXQodC5lbmRFeGNsdXNpdmUsImxlZnQiKTtyZXR1cm4gci5pc0JlZm9yZShuKT9XLmZyb21Qb3NpdGlvbnMocixyKTpXLmZyb21Qb3NpdGlvbnMobixyKX1maW5kV29yZENvbnRhaW5pbmcodCl7aWYodDwwfHx0Pj10aGlzLmVsZW1lbnRzLmxlbmd0aHx8IV9yKHRoaXMuZWxlbWVudHNbdF0pKXJldHVybjtsZXQgbj10O2Zvcig7bj4wJiZfcih0aGlzLmVsZW1lbnRzW24tMV0pOyluLS07bGV0IHI9dDtmb3IoO3I8dGhpcy5lbGVtZW50cy5sZW5ndGgmJl9yKHRoaXMuZWxlbWVudHNbcl0pOylyKys7cmV0dXJuIG5ldyAkKG4scil9Y291bnRMaW5lc0luKHQpe3JldHVybiB0aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSkubGluZU51bWJlci10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LnN0YXJ0KS5saW5lTnVtYmVyfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdPT09dGhpcy5lbGVtZW50c1tuXX1leHRlbmRUb0Z1bGxMaW5lcyh0KXtjb25zdCBuPXZ0KHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4LGk9Pmk8PXQuc3RhcnQpPz8wLHI9a3UodGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgsaT0+dC5lbmRFeGNsdXNpdmU8PWkpPz90aGlzLmVsZW1lbnRzLmxlbmd0aDtyZXR1cm4gbmV3ICQobixyKX19ZnVuY3Rpb24gX3IoZSl7cmV0dXJuIGU+PTk3JiZlPD0xMjJ8fGU+PTY1JiZlPD05MHx8ZT49NDgmJmU8PTU3fWNvbnN0IE91PXswOjAsMTowLDI6MCwzOjEwLDQ6Miw1OjMwLDY6Myw3OjEwLDg6MTB9O2Z1bmN0aW9uIHpzKGUpe3JldHVybiBPdVtlXX1mdW5jdGlvbiBHcyhlKXtyZXR1cm4gZT09PTEwPzg6ZT09PTEzPzc6d3IoZSk/NjplPj05NyYmZTw9MTIyPzA6ZT49NjUmJmU8PTkwPzE6ZT49NDgmJmU8PTU3PzI6ZT09PS0xPzM6ZT09PTQ0fHxlPT09NTk/NTo0fWZ1bmN0aW9uIEJ1KGUsdCxuLHIsaSxzKXtsZXR7bW92ZXM6YSxleGNsdWRlZENoYW5nZXM6bH09cXUoZSx0LG4scyk7aWYoIXMuaXNWYWxpZCgpKXJldHVybltdO2NvbnN0IG89ZS5maWx0ZXIoaD0+IWwuaGFzKGgpKSx1PSR1KG8scixpLHQsbixzKTtyZXR1cm4gV2woYSx1KSxhPWp1KGEpLGE9YS5maWx0ZXIoaD0+e2NvbnN0IGM9aC5vcmlnaW5hbC50b09mZnNldFJhbmdlKCkuc2xpY2UodCkubWFwKG09Pm0udHJpbSgpKTtyZXR1cm4gYy5qb2luKGAKYCkubGVuZ3RoPj0xNSYmVXUoYyxtPT5tLmxlbmd0aD49Mik+PTJ9KSxhPUh1KGUsYSksYX1mdW5jdGlvbiBVdShlLHQpe2xldCBuPTA7Zm9yKGNvbnN0IHIgb2YgZSl0KHIpJiZuKys7cmV0dXJuIG59ZnVuY3Rpb24gcXUoZSx0LG4scil7Y29uc3QgaT1bXSxzPWUuZmlsdGVyKG89Pm8ubW9kaWZpZWQuaXNFbXB0eSYmby5vcmlnaW5hbC5sZW5ndGg+PTMpLm1hcChvPT5uZXcgeG4oby5vcmlnaW5hbCx0LG8pKSxhPW5ldyBTZXQoZS5maWx0ZXIobz0+by5vcmlnaW5hbC5pc0VtcHR5JiZvLm1vZGlmaWVkLmxlbmd0aD49MykubWFwKG89Pm5ldyB4bihvLm1vZGlmaWVkLG4sbykpKSxsPW5ldyBTZXQ7Zm9yKGNvbnN0IG8gb2Ygcyl7bGV0IHU9LTEsaDtmb3IoY29uc3QgYyBvZiBhKXtjb25zdCBkPW8uY29tcHV0ZVNpbWlsYXJpdHkoYyk7ZD51JiYodT1kLGg9Yyl9aWYodT4uOSYmaCYmKGEuZGVsZXRlKGgpLGkucHVzaChuZXcgeWUoby5yYW5nZSxoLnJhbmdlKSksbC5hZGQoby5zb3VyY2UpLGwuYWRkKGguc291cmNlKSksIXIuaXNWYWxpZCgpKXJldHVybnttb3ZlczppLGV4Y2x1ZGVkQ2hhbmdlczpsfX1yZXR1cm57bW92ZXM6aSxleGNsdWRlZENoYW5nZXM6bH19ZnVuY3Rpb24gJHUoZSx0LG4scixpLHMpe2NvbnN0IGE9W10sbD1uZXcgdnU7Zm9yKGNvbnN0IGQgb2YgZSlmb3IobGV0IG09ZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI7bTxkLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjttKyspe2NvbnN0IGc9YCR7dFttLTFdfToke3RbbSsxLTFdfToke3RbbSsyLTFdfWA7bC5hZGQoZyx7cmFuZ2U6bmV3IE8obSxtKzMpfSl9Y29uc3Qgbz1bXTtlLnNvcnQoY24oZD0+ZC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsZm4pKTtmb3IoY29uc3QgZCBvZiBlKXtsZXQgbT1bXTtmb3IobGV0IGc9ZC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI7ZzxkLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMjtnKyspe2NvbnN0IHA9YCR7bltnLTFdfToke25bZysxLTFdfToke25bZysyLTFdfWAsdj1uZXcgTyhnLGcrMyksXz1bXTtsLmZvckVhY2gocCwoe3JhbmdlOk59KT0+e2Zvcihjb25zdCB5IG9mIG0paWYoeS5vcmlnaW5hbExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT1OLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnkubW9kaWZpZWRMaW5lUmFuZ2UuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSsxPT09di5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKXt5Lm9yaWdpbmFsTGluZVJhbmdlPW5ldyBPKHkub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLE4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkseS5tb2RpZmllZExpbmVSYW5nZT1uZXcgTyh5Lm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcix2LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLF8ucHVzaCh5KTtyZXR1cm59Y29uc3QgeD17bW9kaWZpZWRMaW5lUmFuZ2U6dixvcmlnaW5hbExpbmVSYW5nZTpOfTtvLnB1c2goeCksXy5wdXNoKHgpfSksbT1ffWlmKCFzLmlzVmFsaWQoKSlyZXR1cm5bXX1vLnNvcnQoemwoY24oZD0+ZC5tb2RpZmllZExpbmVSYW5nZS5sZW5ndGgsZm4pKSk7Y29uc3QgdT1uZXcgQ2UsaD1uZXcgQ2U7Zm9yKGNvbnN0IGQgb2Ygbyl7Y29uc3QgbT1kLm1vZGlmaWVkTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlci1kLm9yaWdpbmFsTGluZVJhbmdlLnN0YXJ0TGluZU51bWJlcixnPXUuc3VidHJhY3RGcm9tKGQubW9kaWZpZWRMaW5lUmFuZ2UpLHA9aC5zdWJ0cmFjdEZyb20oZC5vcmlnaW5hbExpbmVSYW5nZSkuZ2V0V2l0aERlbHRhKG0pLHY9Zy5nZXRJbnRlcnNlY3Rpb24ocCk7Zm9yKGNvbnN0IF8gb2Ygdi5yYW5nZXMpe2lmKF8ubGVuZ3RoPDMpY29udGludWU7Y29uc3QgTj1fLHg9Xy5kZWx0YSgtbSk7YS5wdXNoKG5ldyB5ZSh4LE4pKSx1LmFkZFJhbmdlKE4pLGguYWRkUmFuZ2UoeCl9fWEuc29ydChjbihkPT5kLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixmbikpO2NvbnN0IGM9bmV3IHZuKGUpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBtPWFbZF0sZz1jLmZpbmRMYXN0TW9ub3Rvbm91cyhMPT5MLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjw9bS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLHA9dnQoZSxMPT5MLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjw9bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLHY9TWF0aC5tYXgobS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItZy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsbS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItcC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpLF89Yy5maW5kTGFzdE1vbm90b25vdXMoTD0+TC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI8bS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxOPXZ0KGUsTD0+TC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8bS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSx4PU1hdGgubWF4KF8ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS1tLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsTi5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLW0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7bGV0IHk7Zm9yKHk9MDt5PHY7eSsrKXtjb25zdCBMPW0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLXktMSxBPW0ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLXktMTtpZihMPnIubGVuZ3RofHxBPmkubGVuZ3RofHx1LmNvbnRhaW5zKEEpfHxoLmNvbnRhaW5zKEwpfHwhSnMocltMLTFdLGlbQS0xXSxzKSlicmVha315PjAmJihoLmFkZFJhbmdlKG5ldyBPKG0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLXksbS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpKSx1LmFkZFJhbmdlKG5ldyBPKG0ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLXksbS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSk7bGV0IGI7Zm9yKGI9MDtiPHg7YisrKXtjb25zdCBMPW0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStiLEE9bS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK2I7aWYoTD5yLmxlbmd0aHx8QT5pLmxlbmd0aHx8dS5jb250YWlucyhBKXx8aC5jb250YWlucyhMKXx8IUpzKHJbTC0xXSxpW0EtMV0scykpYnJlYWt9Yj4wJiYoaC5hZGRSYW5nZShuZXcgTyhtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK2IpKSx1LmFkZFJhbmdlKG5ldyBPKG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrYikpKSwoeT4wfHxiPjApJiYoYVtkXT1uZXcgeWUobmV3IE8obS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIteSxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrYiksbmV3IE8obS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIteSxtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrYikpKX1yZXR1cm4gYX1mdW5jdGlvbiBKcyhlLHQsbil7aWYoZS50cmltKCk9PT10LnRyaW0oKSlyZXR1cm4hMDtpZihlLmxlbmd0aD4zMDAmJnQubGVuZ3RoPjMwMClyZXR1cm4hMTtjb25zdCBpPW5ldyBIcygpLmNvbXB1dGUobmV3IHluKFtlXSxuZXcgVygxLDEsMSxlLmxlbmd0aCksITEpLG5ldyB5bihbdF0sbmV3IFcoMSwxLDEsdC5sZW5ndGgpLCExKSxuKTtsZXQgcz0wO2NvbnN0IGE9Wi5pbnZlcnQoaS5kaWZmcyxlLmxlbmd0aCk7Zm9yKGNvbnN0IGggb2YgYSloLnNlcTFSYW5nZS5mb3JFYWNoKGM9Pnt3cihlLmNoYXJDb2RlQXQoYykpfHxzKyt9KTtmdW5jdGlvbiBsKGgpe2xldCBjPTA7Zm9yKGxldCBkPTA7ZDxlLmxlbmd0aDtkKyspd3IoaC5jaGFyQ29kZUF0KGQpKXx8YysrO3JldHVybiBjfWNvbnN0IG89bChlLmxlbmd0aD50Lmxlbmd0aD9lOnQpO3JldHVybiBzL28+LjYmJm8+MTB9ZnVuY3Rpb24ganUoZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiBlO2Uuc29ydChjbihuPT5uLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixmbikpO2NvbnN0IHQ9W2VbMF1dO2ZvcihsZXQgbj0xO248ZS5sZW5ndGg7bisrKXtjb25zdCByPXRbdC5sZW5ndGgtMV0saT1lW25dLHM9aS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItci5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGE9aS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItci5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlO2lmKHM+PTAmJmE+PTAmJnMrYTw9Mil7dFt0Lmxlbmd0aC0xXT1yLmpvaW4oaSk7Y29udGludWV9dC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIEh1KGUsdCl7Y29uc3Qgbj1uZXcgdm4oZSk7cmV0dXJuIHQ9dC5maWx0ZXIocj0+e2NvbnN0IGk9bi5maW5kTGFzdE1vbm90b25vdXMobD0+bC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI8ci5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKXx8bmV3IHllKG5ldyBPKDEsMSksbmV3IE8oMSwxKSkscz12dChlLGw9PmwubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPHIubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7cmV0dXJuIGkhPT1zfSksdH1mdW5jdGlvbiBYcyhlLHQsbil7bGV0IHI9bjtyZXR1cm4gcj1RcyhlLHQscikscj1RcyhlLHQscikscj1XdShlLHQscikscn1mdW5jdGlvbiBRcyhlLHQsbil7aWYobi5sZW5ndGg9PT0wKXJldHVybiBuO2NvbnN0IHI9W107ci5wdXNoKG5bMF0pO2ZvcihsZXQgcz0xO3M8bi5sZW5ndGg7cysrKXtjb25zdCBhPXJbci5sZW5ndGgtMV07bGV0IGw9bltzXTtpZihsLnNlcTFSYW5nZS5pc0VtcHR5fHxsLnNlcTJSYW5nZS5pc0VtcHR5KXtjb25zdCBvPWwuc2VxMVJhbmdlLnN0YXJ0LWEuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTtsZXQgdTtmb3IodT0xO3U8PW8mJiEoZS5nZXRFbGVtZW50KGwuc2VxMVJhbmdlLnN0YXJ0LXUpIT09ZS5nZXRFbGVtZW50KGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZS11KXx8dC5nZXRFbGVtZW50KGwuc2VxMlJhbmdlLnN0YXJ0LXUpIT09dC5nZXRFbGVtZW50KGwuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS11KSk7dSsrKTtpZih1LS0sdT09PW8pe3Jbci5sZW5ndGgtMV09bmV3IFoobmV3ICQoYS5zZXExUmFuZ2Uuc3RhcnQsbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLW8pLG5ldyAkKGEuc2VxMlJhbmdlLnN0YXJ0LGwuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZS1vKSk7Y29udGludWV9bD1sLmRlbHRhKC11KX1yLnB1c2gobCl9Y29uc3QgaT1bXTtmb3IobGV0IHM9MDtzPHIubGVuZ3RoLTE7cysrKXtjb25zdCBhPXJbcysxXTtsZXQgbD1yW3NdO2lmKGwuc2VxMVJhbmdlLmlzRW1wdHl8fGwuc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IG89YS5zZXExUmFuZ2Uuc3RhcnQtbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCB1O2Zvcih1PTA7dTxvJiYhKCFlLmlzU3Ryb25nbHlFcXVhbChsLnNlcTFSYW5nZS5zdGFydCt1LGwuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSt1KXx8IXQuaXNTdHJvbmdseUVxdWFsKGwuc2VxMlJhbmdlLnN0YXJ0K3UsbC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK3UpKTt1KyspO2lmKHU9PT1vKXtyW3MrMV09bmV3IFoobmV3ICQobC5zZXExUmFuZ2Uuc3RhcnQrbyxhLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpLG5ldyAkKGwuc2VxMlJhbmdlLnN0YXJ0K28sYS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKSk7Y29udGludWV9dT4wJiYobD1sLmRlbHRhKHUpKX1pLnB1c2gobCl9cmV0dXJuIHIubGVuZ3RoPjAmJmkucHVzaChyW3IubGVuZ3RoLTFdKSxpfWZ1bmN0aW9uIFd1KGUsdCxuKXtpZighZS5nZXRCb3VuZGFyeVNjb3JlfHwhdC5nZXRCb3VuZGFyeVNjb3JlKXJldHVybiBuO2ZvcihsZXQgcj0wO3I8bi5sZW5ndGg7cisrKXtjb25zdCBpPXI+MD9uW3ItMV06dm9pZCAwLHM9bltyXSxhPXIrMTxuLmxlbmd0aD9uW3IrMV06dm9pZCAwLGw9bmV3ICQoaT9pLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUrMTowLGE/YS5zZXExUmFuZ2Uuc3RhcnQtMTplLmxlbmd0aCksbz1uZXcgJChpP2kuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsYT9hLnNlcTJSYW5nZS5zdGFydC0xOnQubGVuZ3RoKTtzLnNlcTFSYW5nZS5pc0VtcHR5P25bcl09WnMocyxlLHQsbCxvKTpzLnNlcTJSYW5nZS5pc0VtcHR5JiYobltyXT1acyhzLnN3YXAoKSx0LGUsbyxsKS5zd2FwKCkpfXJldHVybiBufWZ1bmN0aW9uIFpzKGUsdCxuLHIsaSl7bGV0IGE9MTtmb3IoO2Uuc2VxMVJhbmdlLnN0YXJ0LWE+PXIuc3RhcnQmJmUuc2VxMlJhbmdlLnN0YXJ0LWE+PWkuc3RhcnQmJm4uaXNTdHJvbmdseUVxdWFsKGUuc2VxMlJhbmdlLnN0YXJ0LWEsZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWEpJiZhPDEwMDspYSsrO2EtLTtsZXQgbD0wO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQrbDxyLmVuZEV4Y2x1c2l2ZSYmZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK2w8aS5lbmRFeGNsdXNpdmUmJm4uaXNTdHJvbmdseUVxdWFsKGUuc2VxMlJhbmdlLnN0YXJ0K2wsZS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlK2wpJiZsPDEwMDspbCsrO2lmKGE9PT0wJiZsPT09MClyZXR1cm4gZTtsZXQgbz0wLHU9LTE7Zm9yKGxldCBoPS1hO2g8PWw7aCsrKXtjb25zdCBjPWUuc2VxMlJhbmdlLnN0YXJ0K2gsZD1lLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUraCxtPWUuc2VxMVJhbmdlLnN0YXJ0K2gsZz10LmdldEJvdW5kYXJ5U2NvcmUobSkrbi5nZXRCb3VuZGFyeVNjb3JlKGMpK24uZ2V0Qm91bmRhcnlTY29yZShkKTtnPnUmJih1PWcsbz1oKX1yZXR1cm4gZS5kZWx0YShvKX1mdW5jdGlvbiB6dShlLHQsbil7Y29uc3Qgcj1bXTtmb3IoY29uc3QgaSBvZiBuKXtjb25zdCBzPXJbci5sZW5ndGgtMV07aWYoIXMpe3IucHVzaChpKTtjb250aW51ZX1pLnNlcTFSYW5nZS5zdGFydC1zLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PTJ8fGkuc2VxMlJhbmdlLnN0YXJ0LXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mj9yW3IubGVuZ3RoLTFdPW5ldyBaKHMuc2VxMVJhbmdlLmpvaW4oaS5zZXExUmFuZ2UpLHMuc2VxMlJhbmdlLmpvaW4oaS5zZXEyUmFuZ2UpKTpyLnB1c2goaSl9cmV0dXJuIHJ9ZnVuY3Rpb24gR3UoZSx0LG4pe2NvbnN0IHI9Wi5pbnZlcnQobixlLmxlbmd0aCksaT1bXTtsZXQgcz1uZXcgcWUoMCwwKTtmdW5jdGlvbiBhKG8sdSl7aWYoby5vZmZzZXQxPHMub2Zmc2V0MXx8by5vZmZzZXQyPHMub2Zmc2V0MilyZXR1cm47Y29uc3QgaD1lLmZpbmRXb3JkQ29udGFpbmluZyhvLm9mZnNldDEpLGM9dC5maW5kV29yZENvbnRhaW5pbmcoby5vZmZzZXQyKTtpZighaHx8IWMpcmV0dXJuO2xldCBkPW5ldyBaKGgsYyk7Y29uc3QgbT1kLmludGVyc2VjdCh1KTtsZXQgZz1tLnNlcTFSYW5nZS5sZW5ndGgscD1tLnNlcTJSYW5nZS5sZW5ndGg7Zm9yKDtyLmxlbmd0aD4wOyl7Y29uc3Qgdj1yWzBdO2lmKCEodi5zZXExUmFuZ2UuaW50ZXJzZWN0cyhkLnNlcTFSYW5nZSl8fHYuc2VxMlJhbmdlLmludGVyc2VjdHMoZC5zZXEyUmFuZ2UpKSlicmVhaztjb25zdCBOPWUuZmluZFdvcmRDb250YWluaW5nKHYuc2VxMVJhbmdlLnN0YXJ0KSx4PXQuZmluZFdvcmRDb250YWluaW5nKHYuc2VxMlJhbmdlLnN0YXJ0KSx5PW5ldyBaKE4seCksYj15LmludGVyc2VjdCh2KTtpZihnKz1iLnNlcTFSYW5nZS5sZW5ndGgscCs9Yi5zZXEyUmFuZ2UubGVuZ3RoLGQ9ZC5qb2luKHkpLGQuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49di5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlKXIuc2hpZnQoKTtlbHNlIGJyZWFrfWcrcDwoZC5zZXExUmFuZ2UubGVuZ3RoK2Quc2VxMlJhbmdlLmxlbmd0aCkqMi8zJiZpLnB1c2goZCkscz1kLmdldEVuZEV4Y2x1c2l2ZXMoKX1mb3IoO3IubGVuZ3RoPjA7KXtjb25zdCBvPXIuc2hpZnQoKTtvLnNlcTFSYW5nZS5pc0VtcHR5fHwoYShvLmdldFN0YXJ0cygpLG8pLGEoby5nZXRFbmRFeGNsdXNpdmVzKCkuZGVsdGEoLTEpLG8pKX1yZXR1cm4gSnUobixpKX1mdW5jdGlvbiBKdShlLHQpe2NvbnN0IG49W107Zm9yKDtlLmxlbmd0aD4wfHx0Lmxlbmd0aD4wOyl7Y29uc3Qgcj1lWzBdLGk9dFswXTtsZXQgcztyJiYoIWl8fHIuc2VxMVJhbmdlLnN0YXJ0PGkuc2VxMVJhbmdlLnN0YXJ0KT9zPWUuc2hpZnQoKTpzPXQuc2hpZnQoKSxuLmxlbmd0aD4wJiZuW24ubGVuZ3RoLTFdLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU+PXMuc2VxMVJhbmdlLnN0YXJ0P25bbi5sZW5ndGgtMV09bltuLmxlbmd0aC0xXS5qb2luKHMpOm4ucHVzaChzKX1yZXR1cm4gbn1mdW5jdGlvbiBYdShlLHQsbil7bGV0IHI9bjtpZihyLmxlbmd0aD09PTApcmV0dXJuIHI7bGV0IGk9MCxzO2Rve3M9ITE7Y29uc3QgYT1bclswXV07Zm9yKGxldCBsPTE7bDxyLmxlbmd0aDtsKyspe2xldCBoPWZ1bmN0aW9uKGQsbSl7Y29uc3QgZz1uZXcgJCh1LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsby5zZXExUmFuZ2Uuc3RhcnQpO3JldHVybiBlLmdldFRleHQoZykucmVwbGFjZSgvXHMvZywiIikubGVuZ3RoPD00JiYoZC5zZXExUmFuZ2UubGVuZ3RoK2Quc2VxMlJhbmdlLmxlbmd0aD41fHxtLnNlcTFSYW5nZS5sZW5ndGgrbS5zZXEyUmFuZ2UubGVuZ3RoPjUpfTtjb25zdCBvPXJbbF0sdT1hW2EubGVuZ3RoLTFdO2godSxvKT8ocz0hMCxhW2EubGVuZ3RoLTFdPWFbYS5sZW5ndGgtMV0uam9pbihvKSk6YS5wdXNoKG8pfXI9YX13aGlsZShpKys8MTAmJnMpO3JldHVybiByfWZ1bmN0aW9uIFF1KGUsdCxuKXtsZXQgcj1uO2lmKHIubGVuZ3RoPT09MClyZXR1cm4gcjtsZXQgaT0wLHM7ZG97cz0hMTtjb25zdCBsPVtyWzBdXTtmb3IobGV0IG89MTtvPHIubGVuZ3RoO28rKyl7bGV0IGM9ZnVuY3Rpb24obSxnKXtjb25zdCBwPW5ldyAkKGguc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSx1LnNlcTFSYW5nZS5zdGFydCk7aWYoZS5jb3VudExpbmVzSW4ocCk+NXx8cC5sZW5ndGg+NTAwKXJldHVybiExO2NvbnN0IF89ZS5nZXRUZXh0KHApLnRyaW0oKTtpZihfLmxlbmd0aD4yMHx8Xy5zcGxpdCgvXHJcbnxccnxcbi8pLmxlbmd0aD4xKXJldHVybiExO2NvbnN0IE49ZS5jb3VudExpbmVzSW4obS5zZXExUmFuZ2UpLHg9bS5zZXExUmFuZ2UubGVuZ3RoLHk9dC5jb3VudExpbmVzSW4obS5zZXEyUmFuZ2UpLGI9bS5zZXEyUmFuZ2UubGVuZ3RoLEw9ZS5jb3VudExpbmVzSW4oZy5zZXExUmFuZ2UpLEE9Zy5zZXExUmFuZ2UubGVuZ3RoLFI9dC5jb3VudExpbmVzSW4oZy5zZXEyUmFuZ2UpLEk9Zy5zZXEyUmFuZ2UubGVuZ3RoLEQ9Mio0MCs1MDtmdW5jdGlvbiBNKHcpe3JldHVybiBNYXRoLm1pbih3LEQpfXJldHVybiBNYXRoLnBvdyhNYXRoLnBvdyhNKE4qNDAreCksMS41KStNYXRoLnBvdyhNKHkqNDArYiksMS41KSwxLjUpK01hdGgucG93KE1hdGgucG93KE0oTCo0MCtBKSwxLjUpK01hdGgucG93KE0oUio0MCtJKSwxLjUpLDEuNSk+KEQqKjEuNSkqKjEuNSoxLjN9O2NvbnN0IHU9cltvXSxoPWxbbC5sZW5ndGgtMV07YyhoLHUpPyhzPSEwLGxbbC5sZW5ndGgtMV09bFtsLmxlbmd0aC0xXS5qb2luKHUpKTpsLnB1c2godSl9cj1sfXdoaWxlKGkrKzwxMCYmcyk7Y29uc3QgYT1bXTtyZXR1cm4gSGwociwobCxvLHUpPT57bGV0IGg9bztmdW5jdGlvbiBjKF8pe3JldHVybiBfLmxlbmd0aD4wJiZfLnRyaW0oKS5sZW5ndGg8PTMmJm8uc2VxMVJhbmdlLmxlbmd0aCtvLnNlcTJSYW5nZS5sZW5ndGg+MTAwfWNvbnN0IGQ9ZS5leHRlbmRUb0Z1bGxMaW5lcyhvLnNlcTFSYW5nZSksbT1lLmdldFRleHQobmV3ICQoZC5zdGFydCxvLnNlcTFSYW5nZS5zdGFydCkpO2MobSkmJihoPWguZGVsdGFTdGFydCgtbS5sZW5ndGgpKTtjb25zdCBnPWUuZ2V0VGV4dChuZXcgJChvLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUsZC5lbmRFeGNsdXNpdmUpKTtjKGcpJiYoaD1oLmRlbHRhRW5kKGcubGVuZ3RoKSk7Y29uc3QgcD1aLmZyb21PZmZzZXRQYWlycyhsP2wuZ2V0RW5kRXhjbHVzaXZlcygpOnFlLnplcm8sdT91LmdldFN0YXJ0cygpOnFlLm1heCksdj1oLmludGVyc2VjdChwKTthLmxlbmd0aD4wJiZ2LmdldFN0YXJ0cygpLmVxdWFscyhhW2EubGVuZ3RoLTFdLmdldEVuZEV4Y2x1c2l2ZXMoKSk/YVthLmxlbmd0aC0xXT1hW2EubGVuZ3RoLTFdLmpvaW4odik6YS5wdXNoKHYpfSksYX1jbGFzcyBZc3tjb25zdHJ1Y3Rvcih0LG4pe3RoaXMudHJpbW1lZEhhc2g9dCx0aGlzLmxpbmVzPW59Z2V0RWxlbWVudCh0KXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaFt0XX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMudHJpbW1lZEhhc2gubGVuZ3RofWdldEJvdW5kYXJ5U2NvcmUodCl7Y29uc3Qgbj10PT09MD8wOktzKHRoaXMubGluZXNbdC0xXSkscj10PT09dGhpcy5saW5lcy5sZW5ndGg/MDpLcyh0aGlzLmxpbmVzW3RdKTtyZXR1cm4gMWUzLShuK3IpfWdldFRleHQodCl7cmV0dXJuIHRoaXMubGluZXMuc2xpY2UodC5zdGFydCx0LmVuZEV4Y2x1c2l2ZSkuam9pbihgCmApfWlzU3Ryb25nbHlFcXVhbCh0LG4pe3JldHVybiB0aGlzLmxpbmVzW3RdPT09dGhpcy5saW5lc1tuXX19ZnVuY3Rpb24gS3MoZSl7bGV0IHQ9MDtmb3IoO3Q8ZS5sZW5ndGgmJihlLmNoYXJDb2RlQXQodCk9PT0zMnx8ZS5jaGFyQ29kZUF0KHQpPT09OSk7KXQrKztyZXR1cm4gdH1jbGFzcyBadXtjb25zdHJ1Y3Rvcigpe3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZz1uZXcgRnUsdGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG09bmV3IEhzfWNvbXB1dGVEaWZmKHQsbixyKXtpZih0Lmxlbmd0aDw9MSYmcWwodCxuLChiLEwpPT5iPT09TCkpcmV0dXJuIG5ldyBibihbXSxbXSwhMSk7aWYodC5sZW5ndGg9PT0xJiZ0WzBdLmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MSYmblswXS5sZW5ndGg9PT0wKXJldHVybiBuZXcgYm4oW25ldyBCZShuZXcgTygxLHQubGVuZ3RoKzEpLG5ldyBPKDEsbi5sZW5ndGgrMSksW25ldyBTZShuZXcgVygxLDEsdC5sZW5ndGgsdFt0Lmxlbmd0aC0xXS5sZW5ndGgrMSksbmV3IFcoMSwxLG4ubGVuZ3RoLG5bbi5sZW5ndGgtMV0ubGVuZ3RoKzEpKV0pXSxbXSwhMSk7Y29uc3QgaT1yLm1heENvbXB1dGF0aW9uVGltZU1zPT09MD9qdC5pbnN0YW5jZTpuZXcgSXUoci5tYXhDb21wdXRhdGlvblRpbWVNcykscz0hci5pZ25vcmVUcmltV2hpdGVzcGFjZSxhPW5ldyBNYXA7ZnVuY3Rpb24gbChiKXtsZXQgTD1hLmdldChiKTtyZXR1cm4gTD09PXZvaWQgMCYmKEw9YS5zaXplLGEuc2V0KGIsTCkpLEx9Y29uc3Qgbz10Lm1hcChiPT5sKGIudHJpbSgpKSksdT1uLm1hcChiPT5sKGIudHJpbSgpKSksaD1uZXcgWXMobyx0KSxjPW5ldyBZcyh1LG4pLGQ9aC5sZW5ndGgrYy5sZW5ndGg8MTcwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZShoLGMsaSwoYixMKT0+dFtiXT09PW5bTF0/bltMXS5sZW5ndGg9PT0wPy4xOjErTWF0aC5sb2coMStuW0xdLmxlbmd0aCk6Ljk5KTp0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobS5jb21wdXRlKGgsYyxpKTtsZXQgbT1kLmRpZmZzLGc9ZC5oaXRUaW1lb3V0O209WHMoaCxjLG0pLG09WHUoaCxjLG0pO2NvbnN0IHA9W10sdj1iPT57aWYocylmb3IobGV0IEw9MDtMPGI7TCsrKXtjb25zdCBBPV8rTCxSPU4rTDtpZih0W0FdIT09bltSXSl7Y29uc3QgST10aGlzLnJlZmluZURpZmYodCxuLG5ldyBaKG5ldyAkKEEsQSsxKSxuZXcgJChSLFIrMSkpLGkscyk7Zm9yKGNvbnN0IEQgb2YgSS5tYXBwaW5ncylwLnB1c2goRCk7SS5oaXRUaW1lb3V0JiYoZz0hMCl9fX07bGV0IF89MCxOPTA7Zm9yKGNvbnN0IGIgb2YgbSl7cG4oKCk9PmIuc2VxMVJhbmdlLnN0YXJ0LV89PT1iLnNlcTJSYW5nZS5zdGFydC1OKTtjb25zdCBMPWIuc2VxMVJhbmdlLnN0YXJ0LV87dihMKSxfPWIuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxOPWIuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZTtjb25zdCBBPXRoaXMucmVmaW5lRGlmZih0LG4sYixpLHMpO0EuaGl0VGltZW91dCYmKGc9ITApO2Zvcihjb25zdCBSIG9mIEEubWFwcGluZ3MpcC5wdXNoKFIpfXYodC5sZW5ndGgtXyk7Y29uc3QgeD1lYShwLHQsbik7bGV0IHk9W107cmV0dXJuIHIuY29tcHV0ZU1vdmVzJiYoeT10aGlzLmNvbXB1dGVNb3Zlcyh4LHQsbixvLHUsaSxzKSkscG4oKCk9PntmdW5jdGlvbiBiKEEsUil7aWYoQS5saW5lTnVtYmVyPDF8fEEubGluZU51bWJlcj5SLmxlbmd0aClyZXR1cm4hMTtjb25zdCBJPVJbQS5saW5lTnVtYmVyLTFdO3JldHVybiEoQS5jb2x1bW48MXx8QS5jb2x1bW4+SS5sZW5ndGgrMSl9ZnVuY3Rpb24gTChBLFIpe3JldHVybiEoQS5zdGFydExpbmVOdW1iZXI8MXx8QS5zdGFydExpbmVOdW1iZXI+Ui5sZW5ndGgrMXx8QS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPDF8fEEuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT5SLmxlbmd0aCsxKX1mb3IoY29uc3QgQSBvZiB4KXtpZighQS5pbm5lckNoYW5nZXMpcmV0dXJuITE7Zm9yKGNvbnN0IFIgb2YgQS5pbm5lckNoYW5nZXMpaWYoIShiKFIubW9kaWZpZWRSYW5nZS5nZXRTdGFydFBvc2l0aW9uKCksbikmJmIoUi5tb2RpZmllZFJhbmdlLmdldEVuZFBvc2l0aW9uKCksbikmJmIoUi5vcmlnaW5hbFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSx0KSYmYihSLm9yaWdpbmFsUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSx0KSkpcmV0dXJuITE7aWYoIUwoQS5tb2RpZmllZCxuKXx8IUwoQS5vcmlnaW5hbCx0KSlyZXR1cm4hMX1yZXR1cm4hMH0pLG5ldyBibih4LHksZyl9Y29tcHV0ZU1vdmVzKHQsbixyLGkscyxhLGwpe3JldHVybiBCdSh0LG4scixpLHMsYSkubWFwKGg9Pntjb25zdCBjPXRoaXMucmVmaW5lRGlmZihuLHIsbmV3IFooaC5vcmlnaW5hbC50b09mZnNldFJhbmdlKCksaC5tb2RpZmllZC50b09mZnNldFJhbmdlKCkpLGEsbCksZD1lYShjLm1hcHBpbmdzLG4sciwhMCk7cmV0dXJuIG5ldyBBdShoLGQpfSl9cmVmaW5lRGlmZih0LG4scixpLHMpe2NvbnN0IGw9S3UocikudG9SYW5nZU1hcHBpbmcyKHQsbiksbz1uZXcgeW4odCxsLm9yaWdpbmFsUmFuZ2UscyksdT1uZXcgeW4obixsLm1vZGlmaWVkUmFuZ2UscyksaD1vLmxlbmd0aCt1Lmxlbmd0aDw1MDA/dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nLmNvbXB1dGUobyx1LGkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUobyx1LGkpO2xldCBjPWguZGlmZnM7cmV0dXJuIGM9WHMobyx1LGMpLGM9R3Uobyx1LGMpLGM9enUobyx1LGMpLGM9UXUobyx1LGMpLHttYXBwaW5nczpjLm1hcChtPT5uZXcgU2Uoby50cmFuc2xhdGVSYW5nZShtLnNlcTFSYW5nZSksdS50cmFuc2xhdGVSYW5nZShtLnNlcTJSYW5nZSkpKSxoaXRUaW1lb3V0OmguaGl0VGltZW91dH19fWZ1bmN0aW9uIGVhKGUsdCxuLHI9ITEpe2NvbnN0IGk9W107Zm9yKGNvbnN0IHMgb2YgJGwoZS5tYXAoYT0+WXUoYSx0LG4pKSwoYSxsKT0+YS5vcmlnaW5hbC5vdmVybGFwT3JUb3VjaChsLm9yaWdpbmFsKXx8YS5tb2RpZmllZC5vdmVybGFwT3JUb3VjaChsLm1vZGlmaWVkKSkpe2NvbnN0IGE9c1swXSxsPXNbcy5sZW5ndGgtMV07aS5wdXNoKG5ldyBCZShhLm9yaWdpbmFsLmpvaW4obC5vcmlnaW5hbCksYS5tb2RpZmllZC5qb2luKGwubW9kaWZpZWQpLHMubWFwKG89Pm8uaW5uZXJDaGFuZ2VzWzBdKSkpfXJldHVybiBwbigoKT0+IXImJmkubGVuZ3RoPjAmJihpWzBdLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciE9PWlbMF0ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyfHxuLmxlbmd0aC1pW2kubGVuZ3RoLTFdLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUhPT10Lmxlbmd0aC1pW2kubGVuZ3RoLTFdLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpPyExOlZzKGksKHMsYSk9PmEub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PWEubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPGEub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyJiZzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8YS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKSxpfWZ1bmN0aW9uIFl1KGUsdCxuKXtsZXQgcj0wLGk9MDtlLm1vZGlmaWVkUmFuZ2UuZW5kQ29sdW1uPT09MSYmZS5vcmlnaW5hbFJhbmdlLmVuZENvbHVtbj09PTEmJmUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXIrcjw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXImJmUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIrcjw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXImJihpPS0xKSxlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRDb2x1bW4tMT49bltlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLTFdLmxlbmd0aCYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0Q29sdW1uLTE+PXRbZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlci0xXS5sZW5ndGgmJmUub3JpZ2luYWxSYW5nZS5zdGFydExpbmVOdW1iZXI8PWUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyK2kmJmUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXI8PWUubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyK2kmJihyPTEpO2NvbnN0IHM9bmV3IE8oZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcityLGUub3JpZ2luYWxSYW5nZS5lbmRMaW5lTnVtYmVyKzEraSksYT1uZXcgTyhlLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3IsZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIrMStpKTtyZXR1cm4gbmV3IEJlKHMsYSxbZV0pfWZ1bmN0aW9uIEt1KGUpe3JldHVybiBuZXcgeWUobmV3IE8oZS5zZXExUmFuZ2Uuc3RhcnQrMSxlLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUrMSksbmV3IE8oZS5zZXEyUmFuZ2Uuc3RhcnQrMSxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrMSkpfWNvbnN0IHRhPXtnZXRMZWdhY3k6KCk9Pm5ldyBNdSxnZXREZWZhdWx0OigpPT5uZXcgWnV9O2Z1bmN0aW9uIFhlKGUsdCl7Y29uc3Qgbj1NYXRoLnBvdygxMCx0KTtyZXR1cm4gTWF0aC5yb3VuZChlKm4pL259Y2xhc3Mgc2V7Y29uc3RydWN0b3IodCxuLHIsaT0xKXt0aGlzLl9yZ2JhQnJhbmQ9dm9pZCAwLHRoaXMucj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCx0KSl8MCx0aGlzLmc9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsbikpfDAsdGhpcy5iPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLHIpKXwwLHRoaXMuYT1YZShNYXRoLm1heChNYXRoLm1pbigxLGkpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5yPT09bi5yJiZ0Lmc9PT1uLmcmJnQuYj09PW4uYiYmdC5hPT09bi5hfX1jbGFzcyB3ZXtjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLl9oc2xhQnJhbmQ9dm9pZCAwLHRoaXMuaD1NYXRoLm1heChNYXRoLm1pbigzNjAsdCksMCl8MCx0aGlzLnM9WGUoTWF0aC5tYXgoTWF0aC5taW4oMSxuKSwwKSwzKSx0aGlzLmw9WGUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKSx0aGlzLmE9WGUoTWF0aC5tYXgoTWF0aC5taW4oMSxpKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQuaD09PW4uaCYmdC5zPT09bi5zJiZ0Lmw9PT1uLmwmJnQuYT09PW4uYX1zdGF0aWMgZnJvbVJHQkEodCl7Y29uc3Qgbj10LnIvMjU1LHI9dC5nLzI1NSxpPXQuYi8yNTUscz10LmEsYT1NYXRoLm1heChuLHIsaSksbD1NYXRoLm1pbihuLHIsaSk7bGV0IG89MCx1PTA7Y29uc3QgaD0obCthKS8yLGM9YS1sO2lmKGM+MCl7c3dpdGNoKHU9TWF0aC5taW4oaDw9LjU/Yy8oMipoKTpjLygyLTIqaCksMSksYSl7Y2FzZSBuOm89KHItaSkvYysocjxpPzY6MCk7YnJlYWs7Y2FzZSByOm89KGktbikvYysyO2JyZWFrO2Nhc2UgaTpvPShuLXIpL2MrNDticmVha31vKj02MCxvPU1hdGgucm91bmQobyl9cmV0dXJuIG5ldyB3ZShvLHUsaCxzKX1zdGF0aWMgX2h1ZTJyZ2IodCxuLHIpe3JldHVybiByPDAmJihyKz0xKSxyPjEmJihyLT0xKSxyPDEvNj90KyhuLXQpKjYqcjpyPDEvMj9uOnI8Mi8zP3QrKG4tdCkqKDIvMy1yKSo2OnR9c3RhdGljIHRvUkdCQSh0KXtjb25zdCBuPXQuaC8zNjAse3M6cixsOmksYTpzfT10O2xldCBhLGwsbztpZihyPT09MClhPWw9bz1pO2Vsc2V7Y29uc3QgdT1pPC41P2kqKDErcik6aStyLWkqcixoPTIqaS11O2E9d2UuX2h1ZTJyZ2IoaCx1LG4rMS8zKSxsPXdlLl9odWUycmdiKGgsdSxuKSxvPXdlLl9odWUycmdiKGgsdSxuLTEvMyl9cmV0dXJuIG5ldyBzZShNYXRoLnJvdW5kKGEqMjU1KSxNYXRoLnJvdW5kKGwqMjU1KSxNYXRoLnJvdW5kKG8qMjU1KSxzKX19Y2xhc3Mgd3R7Y29uc3RydWN0b3IodCxuLHIsaSl7dGhpcy5faHN2YUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPVhlKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy52PVhlKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyksdGhpcy5hPVhlKE1hdGgubWF4KE1hdGgubWluKDEsaSksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC52PT09bi52JiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxyPXQuZy8yNTUsaT10LmIvMjU1LHM9TWF0aC5tYXgobixyLGkpLGE9TWF0aC5taW4obixyLGkpLGw9cy1hLG89cz09PTA/MDpsL3M7bGV0IHU7cmV0dXJuIGw9PT0wP3U9MDpzPT09bj91PSgoci1pKS9sJTYrNiklNjpzPT09cj91PShpLW4pL2wrMjp1PShuLXIpL2wrNCxuZXcgd3QoTWF0aC5yb3VuZCh1KjYwKSxvLHMsdC5hKX1zdGF0aWMgdG9SR0JBKHQpe2NvbnN0e2g6bixzOnIsdjppLGE6c309dCxhPWkqcixsPWEqKDEtTWF0aC5hYnMobi82MCUyLTEpKSxvPWktYTtsZXRbdSxoLGNdPVswLDAsMF07cmV0dXJuIG48NjA/KHU9YSxoPWwpOm48MTIwPyh1PWwsaD1hKTpuPDE4MD8oaD1hLGM9bCk6bjwyNDA/KGg9bCxjPWEpOm48MzAwPyh1PWwsYz1hKTpuPD0zNjAmJih1PWEsYz1sKSx1PU1hdGgucm91bmQoKHUrbykqMjU1KSxoPU1hdGgucm91bmQoKGgrbykqMjU1KSxjPU1hdGgucm91bmQoKGMrbykqMjU1KSxuZXcgc2UodSxoLGMscyl9fWxldCB3bj0oej1jbGFzc3tzdGF0aWMgZnJvbUhleCh0KXtyZXR1cm4gei5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpfHx6LnJlZH1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIXQmJiFuPyEwOiF0fHwhbj8hMTp0LmVxdWFscyhuKX1nZXQgaHNsYSgpe3JldHVybiB0aGlzLl9oc2xhP3RoaXMuX2hzbGE6d2UuZnJvbVJHQkEodGhpcy5yZ2JhKX1nZXQgaHN2YSgpe3JldHVybiB0aGlzLl9oc3ZhP3RoaXMuX2hzdmE6d3QuZnJvbVJHQkEodGhpcy5yZ2JhKX1jb25zdHJ1Y3Rvcih0KXtpZih0KWlmKHQgaW5zdGFuY2VvZiBzZSl0aGlzLnJnYmE9dDtlbHNlIGlmKHQgaW5zdGFuY2VvZiB3ZSl0aGlzLl9oc2xhPXQsdGhpcy5yZ2JhPXdlLnRvUkdCQSh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiB3dCl0aGlzLl9oc3ZhPXQsdGhpcy5yZ2JhPXd0LnRvUkdCQSh0KTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBjdG9yIGFyZ3VtZW50Iik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKX1lcXVhbHModCl7cmV0dXJuISF0JiZzZS5lcXVhbHModGhpcy5yZ2JhLHQucmdiYSkmJndlLmVxdWFscyh0aGlzLmhzbGEsdC5oc2xhKSYmd3QuZXF1YWxzKHRoaXMuaHN2YSx0LmhzdmEpfWdldFJlbGF0aXZlTHVtaW5hbmNlKCl7Y29uc3QgdD16Ll9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuciksbj16Ll9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuZykscj16Ll9yZWxhdGl2ZUx1bWluYW5jZUZvckNvbXBvbmVudCh0aGlzLnJnYmEuYiksaT0uMjEyNip0Ky43MTUyKm4rLjA3MjIqcjtyZXR1cm4gWGUoaSw0KX1zdGF0aWMgX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHQpe2NvbnN0IG49dC8yNTU7cmV0dXJuIG48PS4wMzkyOD9uLzEyLjkyOk1hdGgucG93KChuKy4wNTUpLzEuMDU1LDIuNCl9aXNMaWdodGVyKCl7cmV0dXJuKHRoaXMucmdiYS5yKjI5OSt0aGlzLnJnYmEuZyo1ODcrdGhpcy5yZ2JhLmIqMTE0KS8xZTM+PTEyOH1pc0xpZ2h0ZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPnJ9aXNEYXJrZXJUaGFuKHQpe2NvbnN0IG49dGhpcy5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHI9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiBuPHJ9bGlnaHRlbih0KXtyZXR1cm4gbmV3IHoobmV3IHdlKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sK3RoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX1kYXJrZW4odCl7cmV0dXJuIG5ldyB6KG5ldyB3ZSh0aGlzLmhzbGEuaCx0aGlzLmhzbGEucyx0aGlzLmhzbGEubC10aGlzLmhzbGEubCp0LHRoaXMuaHNsYS5hKSl9dHJhbnNwYXJlbnQodCl7Y29uc3R7cjpuLGc6cixiOmksYTpzfT10aGlzLnJnYmE7cmV0dXJuIG5ldyB6KG5ldyBzZShuLHIsaSxzKnQpKX1pc1RyYW5zcGFyZW50KCl7cmV0dXJuIHRoaXMucmdiYS5hPT09MH1pc09wYXF1ZSgpe3JldHVybiB0aGlzLnJnYmEuYT09PTF9b3Bwb3NpdGUoKXtyZXR1cm4gbmV3IHoobmV3IHNlKDI1NS10aGlzLnJnYmEuciwyNTUtdGhpcy5yZ2JhLmcsMjU1LXRoaXMucmdiYS5iLHRoaXMucmdiYS5hKSl9bWFrZU9wYXF1ZSh0KXtpZih0aGlzLmlzT3BhcXVlKCl8fHQucmdiYS5hIT09MSlyZXR1cm4gdGhpcztjb25zdHtyOm4sZzpyLGI6aSxhOnN9PXRoaXMucmdiYTtyZXR1cm4gbmV3IHoobmV3IHNlKHQucmdiYS5yLXMqKHQucmdiYS5yLW4pLHQucmdiYS5nLXMqKHQucmdiYS5nLXIpLHQucmdiYS5iLXMqKHQucmdiYS5iLWkpLDEpKX10b1N0cmluZygpe3JldHVybiB0aGlzLl90b1N0cmluZ3x8KHRoaXMuX3RvU3RyaW5nPXouRm9ybWF0LkNTUy5mb3JtYXQodGhpcykpLHRoaXMuX3RvU3RyaW5nfXN0YXRpYyBnZXRMaWdodGVyQ29sb3IodCxuLHIpe2lmKHQuaXNMaWdodGVyVGhhbihuKSlyZXR1cm4gdDtyPXJ8fC41O2NvbnN0IGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiByPXIqKHMtaSkvcyx0LmxpZ2h0ZW4ocil9c3RhdGljIGdldERhcmtlckNvbG9yKHQsbixyKXtpZih0LmlzRGFya2VyVGhhbihuKSlyZXR1cm4gdDtyPXJ8fC41O2NvbnN0IGk9dC5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpLHM9bi5nZXRSZWxhdGl2ZUx1bWluYW5jZSgpO3JldHVybiByPXIqKGktcykvaSx0LmRhcmtlbihyKX19LHoud2hpdGU9bmV3IHoobmV3IHNlKDI1NSwyNTUsMjU1LDEpKSx6LmJsYWNrPW5ldyB6KG5ldyBzZSgwLDAsMCwxKSksei5yZWQ9bmV3IHoobmV3IHNlKDI1NSwwLDAsMSkpLHouYmx1ZT1uZXcgeihuZXcgc2UoMCwwLDI1NSwxKSksei5ncmVlbj1uZXcgeihuZXcgc2UoMCwyNTUsMCwxKSksei5jeWFuPW5ldyB6KG5ldyBzZSgwLDI1NSwyNTUsMSkpLHoubGlnaHRncmV5PW5ldyB6KG5ldyBzZSgyMTEsMjExLDIxMSwxKSksei50cmFuc3BhcmVudD1uZXcgeihuZXcgc2UoMCwwLDAsMCkpLHopOyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHIobSl7cmV0dXJuIG0ucmdiYS5hPT09MT9gcmdiKCR7bS5yZ2JhLnJ9LCAke20ucmdiYS5nfSwgJHttLnJnYmEuYn0pYDplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShtKX1uLmZvcm1hdFJHQj1yO2Z1bmN0aW9uIGkobSl7cmV0dXJuYHJnYmEoJHttLnJnYmEucn0sICR7bS5yZ2JhLmd9LCAke20ucmdiYS5ifSwgJHsrbS5yZ2JhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdFJHQkE9aTtmdW5jdGlvbiBzKG0pe3JldHVybiBtLmhzbGEuYT09PTE/YGhzbCgke20uaHNsYS5ofSwgJHsobS5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KG0uaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lKWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhTTEEobSl9bi5mb3JtYXRIU0w9cztmdW5jdGlvbiBhKG0pe3JldHVybmBoc2xhKCR7bS5oc2xhLmh9LCAkeyhtLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsobS5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUsICR7bS5oc2xhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdEhTTEE9YTtmdW5jdGlvbiBsKG0pe2NvbnN0IGc9bS50b1N0cmluZygxNik7cmV0dXJuIGcubGVuZ3RoIT09Mj8iMCIrZzpnfWZ1bmN0aW9uIG8obSl7cmV0dXJuYCMke2wobS5yZ2JhLnIpfSR7bChtLnJnYmEuZyl9JHtsKG0ucmdiYS5iKX1gfW4uZm9ybWF0SGV4PW87ZnVuY3Rpb24gdShtLGc9ITEpe3JldHVybiBnJiZtLnJnYmEuYT09PTE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChtKTpgIyR7bChtLnJnYmEucil9JHtsKG0ucmdiYS5nKX0ke2wobS5yZ2JhLmIpfSR7bChNYXRoLnJvdW5kKG0ucmdiYS5hKjI1NSkpfWB9bi5mb3JtYXRIZXhBPXU7ZnVuY3Rpb24gaChtKXtyZXR1cm4gbS5pc09wYXF1ZSgpP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgobSk6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEobSl9bi5mb3JtYXQ9aDtmdW5jdGlvbiBjKG0pe2NvbnN0IGc9bS5sZW5ndGg7aWYoZz09PTB8fG0uY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybiBudWxsO2lmKGc9PT03KXtjb25zdCBwPTE2KmQobS5jaGFyQ29kZUF0KDEpKStkKG0uY2hhckNvZGVBdCgyKSksdj0xNipkKG0uY2hhckNvZGVBdCgzKSkrZChtLmNoYXJDb2RlQXQoNCkpLF89MTYqZChtLmNoYXJDb2RlQXQoNSkpK2QobS5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IHNlKHAsdixfLDEpKX1pZihnPT09OSl7Y29uc3QgcD0xNipkKG0uY2hhckNvZGVBdCgxKSkrZChtLmNoYXJDb2RlQXQoMikpLHY9MTYqZChtLmNoYXJDb2RlQXQoMykpK2QobS5jaGFyQ29kZUF0KDQpKSxfPTE2KmQobS5jaGFyQ29kZUF0KDUpKStkKG0uY2hhckNvZGVBdCg2KSksTj0xNipkKG0uY2hhckNvZGVBdCg3KSkrZChtLmNoYXJDb2RlQXQoOCkpO3JldHVybiBuZXcgZShuZXcgc2UocCx2LF8sTi8yNTUpKX1pZihnPT09NCl7Y29uc3QgcD1kKG0uY2hhckNvZGVBdCgxKSksdj1kKG0uY2hhckNvZGVBdCgyKSksXz1kKG0uY2hhckNvZGVBdCgzKSk7cmV0dXJuIG5ldyBlKG5ldyBzZSgxNipwK3AsMTYqdit2LDE2Kl8rXykpfWlmKGc9PT01KXtjb25zdCBwPWQobS5jaGFyQ29kZUF0KDEpKSx2PWQobS5jaGFyQ29kZUF0KDIpKSxfPWQobS5jaGFyQ29kZUF0KDMpKSxOPWQobS5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IHNlKDE2KnArcCwxNip2K3YsMTYqXytfLCgxNipOK04pLzI1NSkpfXJldHVybiBudWxsfW4ucGFyc2VIZXg9YztmdW5jdGlvbiBkKG0pe3N3aXRjaChtKXtjYXNlIDQ4OnJldHVybiAwO2Nhc2UgNDk6cmV0dXJuIDE7Y2FzZSA1MDpyZXR1cm4gMjtjYXNlIDUxOnJldHVybiAzO2Nhc2UgNTI6cmV0dXJuIDQ7Y2FzZSA1MzpyZXR1cm4gNTtjYXNlIDU0OnJldHVybiA2O2Nhc2UgNTU6cmV0dXJuIDc7Y2FzZSA1NjpyZXR1cm4gODtjYXNlIDU3OnJldHVybiA5O2Nhc2UgOTc6cmV0dXJuIDEwO2Nhc2UgNjU6cmV0dXJuIDEwO2Nhc2UgOTg6cmV0dXJuIDExO2Nhc2UgNjY6cmV0dXJuIDExO2Nhc2UgOTk6cmV0dXJuIDEyO2Nhc2UgNjc6cmV0dXJuIDEyO2Nhc2UgMTAwOnJldHVybiAxMztjYXNlIDY4OnJldHVybiAxMztjYXNlIDEwMTpyZXR1cm4gMTQ7Y2FzZSA2OTpyZXR1cm4gMTQ7Y2FzZSAxMDI6cmV0dXJuIDE1O2Nhc2UgNzA6cmV0dXJuIDE1fXJldHVybiAwfX0pKHQuQ1NTfHwodC5DU1M9e30pKX0pKGUuRm9ybWF0fHwoZS5Gb3JtYXQ9e30pKX0pKHdufHwod249e30pKTtmdW5jdGlvbiBuYShlKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IHI9TnVtYmVyKG4pOyhyfHxyPT09MCYmbi5yZXBsYWNlKC9ccy9nLCIiKSE9PSIiKSYmdC5wdXNoKHIpfXJldHVybiB0fWZ1bmN0aW9uIExyKGUsdCxuLHIpe3JldHVybntyZWQ6ZS8yNTUsYmx1ZTpuLzI1NSxncmVlbjp0LzI1NSxhbHBoYTpyfX1mdW5jdGlvbiBIdChlLHQpe2NvbnN0IG49dC5pbmRleCxyPXRbMF0ubGVuZ3RoO2lmKCFuKXJldHVybjtjb25zdCBpPWUucG9zaXRpb25BdChuKTtyZXR1cm57c3RhcnRMaW5lTnVtYmVyOmkubGluZU51bWJlcixzdGFydENvbHVtbjppLmNvbHVtbixlbmRMaW5lTnVtYmVyOmkubGluZU51bWJlcixlbmRDb2x1bW46aS5jb2x1bW4rcn19ZnVuY3Rpb24gZWMoZSx0KXtpZighZSlyZXR1cm47Y29uc3Qgbj13bi5Gb3JtYXQuQ1NTLnBhcnNlSGV4KHQpO2lmKG4pcmV0dXJue3JhbmdlOmUsY29sb3I6THIobi5yZ2JhLnIsbi5yZ2JhLmcsbi5yZ2JhLmIsbi5yZ2JhLmEpfX1mdW5jdGlvbiByYShlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3QgaT10WzBdLnZhbHVlcygpLHM9bmEoaSk7cmV0dXJue3JhbmdlOmUsY29sb3I6THIoc1swXSxzWzFdLHNbMl0sbj9zWzNdOjEpfX1mdW5jdGlvbiBpYShlLHQsbil7aWYoIWV8fHQubGVuZ3RoIT09MSlyZXR1cm47Y29uc3QgaT10WzBdLnZhbHVlcygpLHM9bmEoaSksYT1uZXcgd24obmV3IHdlKHNbMF0sc1sxXS8xMDAsc1syXS8xMDAsbj9zWzNdOjEpKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjpMcihhLnJnYmEucixhLnJnYmEuZyxhLnJnYmEuYixhLnJnYmEuYSl9fWZ1bmN0aW9uIFd0KGUsdCl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIj9bLi4uZS5tYXRjaEFsbCh0KV06ZS5maW5kTWF0Y2hlcyh0KX1mdW5jdGlvbiB0YyhlKXtjb25zdCB0PVtdLHI9V3QoZSwvXGIocmdifHJnYmF8aHNsfGhzbGEpKFwoWzAtOVxzLC5cJV0qXCkpfCgjKShbQS1GYS1mMC05XXszfSlcYnwoIykoW0EtRmEtZjAtOV17NH0pXGJ8KCMpKFtBLUZhLWYwLTldezZ9KVxifCgjKShbQS1GYS1mMC05XXs4fSlcYi9nbSk7aWYoci5sZW5ndGg+MClmb3IoY29uc3QgaSBvZiByKXtjb25zdCBzPWkuZmlsdGVyKHU9PnUhPT12b2lkIDApLGE9c1sxXSxsPXNbMl07aWYoIWwpY29udGludWU7bGV0IG87aWYoYT09PSJyZ2IiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKlwpJC9nbTtvPXJhKEh0KGUsaSksV3QobCx1KSwhMSl9ZWxzZSBpZihhPT09InJnYmEiKXtjb25zdCB1PS9eXChccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMFsuXVswLTldK3xbLl1bMC05XSt8WzAxXVsuXXxbMDFdKVxzKlwpJC9nbTtvPXJhKEh0KGUsaSksV3QobCx1KSwhMCl9ZWxzZSBpZihhPT09ImhzbCIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqXCkkL2dtO289aWEoSHQoZSxpKSxXdChsLHUpLCExKX1lbHNlIGlmKGE9PT0iaHNsYSIpe2NvbnN0IHU9L15cKFxzKigzNlswXXwzWzAtNV1bMC05XXxbMTJdWzAtOV1bMC05XXxbMS05XT9bMC05XSlccyosXHMqKDEwMHxcZHsxLDJ9Wy5dXGQqfFxkezEsMn0pJVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO289aWEoSHQoZSxpKSxXdChsLHUpLCEwKX1lbHNlIGE9PT0iIyImJihvPWVjKEh0KGUsaSksYStsKSk7byYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIG5jKGUpe3JldHVybiFlfHx0eXBlb2YgZS5nZXRWYWx1ZSE9ImZ1bmN0aW9uInx8dHlwZW9mIGUucG9zaXRpb25BdCE9ImZ1bmN0aW9uIj9bXTp0YyhlKX1jb25zdCBzYT1uZXcgUmVnRXhwKCJcXGJNQVJLOlxccyooLiopJCIsImQiKSxyYz0vXi0rfC0rJC9nO2Z1bmN0aW9uIGljKGUsdCl7bGV0IG49W107aWYodC5maW5kUmVnaW9uU2VjdGlvbkhlYWRlcnMmJnQuZm9sZGluZ1J1bGVzPy5tYXJrZXJzKXtjb25zdCByPXNjKGUsdCk7bj1uLmNvbmNhdChyKX1pZih0LmZpbmRNYXJrU2VjdGlvbkhlYWRlcnMpe2NvbnN0IHI9YWMoZSk7bj1uLmNvbmNhdChyKX1yZXR1cm4gbn1mdW5jdGlvbiBzYyhlLHQpe2NvbnN0IG49W10scj1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgaT0xO2k8PXI7aSsrKXtjb25zdCBzPWUuZ2V0TGluZUNvbnRlbnQoaSksYT1zLm1hdGNoKHQuZm9sZGluZ1J1bGVzLm1hcmtlcnMuc3RhcnQpO2lmKGEpe2NvbnN0IGw9e3N0YXJ0TGluZU51bWJlcjppLHN0YXJ0Q29sdW1uOmFbMF0ubGVuZ3RoKzEsZW5kTGluZU51bWJlcjppLGVuZENvbHVtbjpzLmxlbmd0aCsxfTtpZihsLmVuZENvbHVtbj5sLnN0YXJ0Q29sdW1uKXtjb25zdCBvPXtyYW5nZTpsLC4uLmFhKHMuc3Vic3RyaW5nKGFbMF0ubGVuZ3RoKSksc2hvdWxkQmVJbkNvbW1lbnRzOiExfTsoby50ZXh0fHxvLmhhc1NlcGFyYXRvckxpbmUpJiZuLnB1c2gobyl9fX1yZXR1cm4gbn1mdW5jdGlvbiBhYyhlKXtjb25zdCB0PVtdLG49ZS5nZXRMaW5lQ291bnQoKTtmb3IobGV0IHI9MTtyPD1uO3IrKyl7Y29uc3QgaT1lLmdldExpbmVDb250ZW50KHIpO29jKGkscix0KX1yZXR1cm4gdH1mdW5jdGlvbiBvYyhlLHQsbil7c2EubGFzdEluZGV4PTA7Y29uc3Qgcj1zYS5leGVjKGUpO2lmKHIpe2NvbnN0IGk9ci5pbmRpY2VzWzFdWzBdKzEscz1yLmluZGljZXNbMV1bMV0rMSxhPXtzdGFydExpbmVOdW1iZXI6dCxzdGFydENvbHVtbjppLGVuZExpbmVOdW1iZXI6dCxlbmRDb2x1bW46c307aWYoYS5lbmRDb2x1bW4+YS5zdGFydENvbHVtbil7Y29uc3QgbD17cmFuZ2U6YSwuLi5hYShyWzFdKSxzaG91bGRCZUluQ29tbWVudHM6ITB9OyhsLnRleHR8fGwuaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaChsKX19fWZ1bmN0aW9uIGFhKGUpe2U9ZS50cmltKCk7Y29uc3QgdD1lLnN0YXJ0c1dpdGgoIi0iKTtyZXR1cm4gZT1lLnJlcGxhY2UocmMsIiIpLHt0ZXh0OmUsaGFzU2VwYXJhdG9yTGluZTp0fX1jbGFzcyBsYyBleHRlbmRzIFhse2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWZpbmRNYXRjaGVzKHQpe2NvbnN0IG49W107Zm9yKGxldCByPTA7cjx0aGlzLl9saW5lcy5sZW5ndGg7cisrKXtjb25zdCBpPXRoaXMuX2xpbmVzW3JdLHM9dGhpcy5vZmZzZXRBdChuZXcgZWUocisxLDEpKSxhPWkubWF0Y2hBbGwodCk7Zm9yKGNvbnN0IGwgb2YgYSkobC5pbmRleHx8bC5pbmRleD09PTApJiYobC5pbmRleD1sLmluZGV4K3MpLG4ucHVzaChsKX1yZXR1cm4gbn1nZXRMaW5lc0NvbnRlbnQoKXtyZXR1cm4gdGhpcy5fbGluZXMuc2xpY2UoMCl9Z2V0TGluZUNvdW50KCl7cmV0dXJuIHRoaXMuX2xpbmVzLmxlbmd0aH1nZXRMaW5lQ29udGVudCh0KXtyZXR1cm4gdGhpcy5fbGluZXNbdC0xXX1nZXRXb3JkQXRQb3NpdGlvbih0LG4pe2NvbnN0IHI9c3IodC5jb2x1bW4sa2kobiksdGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLDApO3JldHVybiByP25ldyBXKHQubGluZU51bWJlcixyLnN0YXJ0Q29sdW1uLHQubGluZU51bWJlcixyLmVuZENvbHVtbik6bnVsbH13b3Jkcyh0KXtjb25zdCBuPXRoaXMuX2xpbmVzLHI9dGhpcy5fd29yZGVuaXplLmJpbmQodGhpcyk7bGV0IGk9MCxzPSIiLGE9MCxsPVtdO3JldHVybnsqW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoOzspaWYoYTxsLmxlbmd0aCl7Y29uc3Qgbz1zLnN1YnN0cmluZyhsW2FdLnN0YXJ0LGxbYV0uZW5kKTthKz0xLHlpZWxkIG99ZWxzZSBpZihpPG4ubGVuZ3RoKXM9bltpXSxsPXIocyx0KSxhPTAsaSs9MTtlbHNlIGJyZWFrfX19Z2V0TGluZVdvcmRzKHQsbil7Y29uc3Qgcj10aGlzLl9saW5lc1t0LTFdLGk9dGhpcy5fd29yZGVuaXplKHIsbikscz1bXTtmb3IoY29uc3QgYSBvZiBpKXMucHVzaCh7d29yZDpyLnN1YnN0cmluZyhhLnN0YXJ0LGEuZW5kKSxzdGFydENvbHVtbjphLnN0YXJ0KzEsZW5kQ29sdW1uOmEuZW5kKzF9KTtyZXR1cm4gc31fd29yZGVuaXplKHQsbil7Y29uc3Qgcj1bXTtsZXQgaTtmb3Iobi5sYXN0SW5kZXg9MDsoaT1uLmV4ZWModCkpJiZpWzBdLmxlbmd0aCE9PTA7KXIucHVzaCh7c3RhcnQ6aS5pbmRleCxlbmQ6aS5pbmRleCtpWzBdLmxlbmd0aH0pO3JldHVybiByfWdldFZhbHVlSW5SYW5nZSh0KXtpZih0PXRoaXMuX3ZhbGlkYXRlUmFuZ2UodCksdC5zdGFydExpbmVOdW1iZXI9PT10LmVuZExpbmVOdW1iZXIpcmV0dXJuIHRoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LnN0YXJ0Q29sdW1uLTEsdC5lbmRDb2x1bW4tMSk7Y29uc3Qgbj10aGlzLl9lb2wscj10LnN0YXJ0TGluZU51bWJlci0xLGk9dC5lbmRMaW5lTnVtYmVyLTEscz1bXTtzLnB1c2godGhpcy5fbGluZXNbcl0uc3Vic3RyaW5nKHQuc3RhcnRDb2x1bW4tMSkpO2ZvcihsZXQgYT1yKzE7YTxpO2ErKylzLnB1c2godGhpcy5fbGluZXNbYV0pO3JldHVybiBzLnB1c2godGhpcy5fbGluZXNbaV0uc3Vic3RyaW5nKDAsdC5lbmRDb2x1bW4tMSkpLHMuam9pbihuKX1vZmZzZXRBdCh0KXtyZXR1cm4gdD10aGlzLl92YWxpZGF0ZVBvc2l0aW9uKHQpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKSx0aGlzLl9saW5lU3RhcnRzLmdldFByZWZpeFN1bSh0LmxpbmVOdW1iZXItMikrKHQuY29sdW1uLTEpfXBvc2l0aW9uQXQodCl7dD1NYXRoLmZsb29yKHQpLHQ9TWF0aC5tYXgoMCx0KSx0aGlzLl9lbnN1cmVMaW5lU3RhcnRzKCk7Y29uc3Qgbj10aGlzLl9saW5lU3RhcnRzLmdldEluZGV4T2YodCkscj10aGlzLl9saW5lc1tuLmluZGV4XS5sZW5ndGg7cmV0dXJue2xpbmVOdW1iZXI6MStuLmluZGV4LGNvbHVtbjoxK01hdGgubWluKG4ucmVtYWluZGVyLHIpfX1fdmFsaWRhdGVSYW5nZSh0KXtjb25zdCBuPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6dC5zdGFydExpbmVOdW1iZXIsY29sdW1uOnQuc3RhcnRDb2x1bW59KSxyPXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24oe2xpbmVOdW1iZXI6dC5lbmRMaW5lTnVtYmVyLGNvbHVtbjp0LmVuZENvbHVtbn0pO3JldHVybiBuLmxpbmVOdW1iZXIhPT10LnN0YXJ0TGluZU51bWJlcnx8bi5jb2x1bW4hPT10LnN0YXJ0Q29sdW1ufHxyLmxpbmVOdW1iZXIhPT10LmVuZExpbmVOdW1iZXJ8fHIuY29sdW1uIT09dC5lbmRDb2x1bW4/e3N0YXJ0TGluZU51bWJlcjpuLmxpbmVOdW1iZXIsc3RhcnRDb2x1bW46bi5jb2x1bW4sZW5kTGluZU51bWJlcjpyLmxpbmVOdW1iZXIsZW5kQ29sdW1uOnIuY29sdW1ufTp0fV92YWxpZGF0ZVBvc2l0aW9uKHQpe2lmKCFlZS5pc0lQb3NpdGlvbih0KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBwb3NpdGlvbiIpO2xldHtsaW5lTnVtYmVyOm4sY29sdW1uOnJ9PXQsaT0hMTtpZihuPDEpbj0xLHI9MSxpPSEwO2Vsc2UgaWYobj50aGlzLl9saW5lcy5sZW5ndGgpbj10aGlzLl9saW5lcy5sZW5ndGgscj10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxLGk9ITA7ZWxzZXtjb25zdCBzPXRoaXMuX2xpbmVzW24tMV0ubGVuZ3RoKzE7cjwxPyhyPTEsaT0hMCk6cj5zJiYocj1zLGk9ITApfXJldHVybiBpP3tsaW5lTnVtYmVyOm4sY29sdW1uOnJ9OnR9fWNvbnN0IGx0PWNsYXNzIGx0e2NvbnN0cnVjdG9yKHQsbil7dGhpcy5faG9zdD10LHRoaXMuX21vZGVscz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PW4sdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWRpc3Bvc2UoKXt0aGlzLl9tb2RlbHM9T2JqZWN0LmNyZWF0ZShudWxsKX1fZ2V0TW9kZWwodCl7cmV0dXJuIHRoaXMuX21vZGVsc1t0XX1fZ2V0TW9kZWxzKCl7Y29uc3QgdD1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5fbW9kZWxzKS5mb3JFYWNoKG49PnQucHVzaCh0aGlzLl9tb2RlbHNbbl0pKSx0fWFjY2VwdE5ld01vZGVsKHQpe3RoaXMuX21vZGVsc1t0LnVybF09bmV3IGxjKHRyLnBhcnNlKHQudXJsKSx0LmxpbmVzLHQuRU9MLHQudmVyc2lvbklkKX1hY2NlcHRNb2RlbENoYW5nZWQodCxuKXtpZighdGhpcy5fbW9kZWxzW3RdKXJldHVybjt0aGlzLl9tb2RlbHNbdF0ub25FdmVudHMobil9YWNjZXB0UmVtb3ZlZE1vZGVsKHQpe3RoaXMuX21vZGVsc1t0XSYmZGVsZXRlIHRoaXMuX21vZGVsc1t0XX1hc3luYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLHIpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIGk/TnUuY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKGksbixyKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX1hc3luYyBmaW5kU2VjdGlvbkhlYWRlcnModCxuKXtjb25zdCByPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiByP2ljKHIsbik6W119YXN5bmMgY29tcHV0ZURpZmYodCxuLHIsaSl7Y29uc3Qgcz10aGlzLl9nZXRNb2RlbCh0KSxhPXRoaXMuX2dldE1vZGVsKG4pO3JldHVybiFzfHwhYT9udWxsOmx0LmNvbXB1dGVEaWZmKHMsYSxyLGkpfXN0YXRpYyBjb21wdXRlRGlmZih0LG4scixpKXtjb25zdCBzPWk9PT0iYWR2YW5jZWQiP3RhLmdldERlZmF1bHQoKTp0YS5nZXRMZWdhY3koKSxhPXQuZ2V0TGluZXNDb250ZW50KCksbD1uLmdldExpbmVzQ29udGVudCgpLG89cy5jb21wdXRlRGlmZihhLGwsciksdT1vLmNoYW5nZXMubGVuZ3RoPjA/ITE6dGhpcy5fbW9kZWxzQXJlSWRlbnRpY2FsKHQsbik7ZnVuY3Rpb24gaChjKXtyZXR1cm4gYy5tYXAoZD0+W2Qub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGQub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxkLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixkLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZC5pbm5lckNoYW5nZXM/Lm1hcChtPT5bbS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcixtLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4sbS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIsbS5vcmlnaW5hbFJhbmdlLmVuZENvbHVtbixtLm1vZGlmaWVkUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLG0ubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbixtLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcixtLm1vZGlmaWVkUmFuZ2UuZW5kQ29sdW1uXSldKX1yZXR1cm57aWRlbnRpY2FsOnUscXVpdEVhcmx5Om8uaGl0VGltZW91dCxjaGFuZ2VzOmgoby5jaGFuZ2VzKSxtb3ZlczpvLm1vdmVzLm1hcChjPT5bYy5saW5lUmFuZ2VNYXBwaW5nLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixjLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxjLmxpbmVSYW5nZU1hcHBpbmcubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLGMubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGgoYy5jaGFuZ2VzKV0pfX1zdGF0aWMgX21vZGVsc0FyZUlkZW50aWNhbCh0LG4pe2NvbnN0IHI9dC5nZXRMaW5lQ291bnQoKSxpPW4uZ2V0TGluZUNvdW50KCk7aWYociE9PWkpcmV0dXJuITE7Zm9yKGxldCBzPTE7czw9cjtzKyspe2NvbnN0IGE9dC5nZXRMaW5lQ29udGVudChzKSxsPW4uZ2V0TGluZUNvbnRlbnQocyk7aWYoYSE9PWwpcmV0dXJuITF9cmV0dXJuITB9YXN5bmMgY29tcHV0ZU1vcmVNaW5pbWFsRWRpdHModCxuLHIpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIWkpcmV0dXJuIG47Y29uc3Qgcz1bXTtsZXQgYTtuPW4uc2xpY2UoMCkuc29ydCgobyx1KT0+e2lmKG8ucmFuZ2UmJnUucmFuZ2UpcmV0dXJuIFcuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKG8ucmFuZ2UsdS5yYW5nZSk7Y29uc3QgaD1vLnJhbmdlPzA6MSxjPXUucmFuZ2U/MDoxO3JldHVybiBoLWN9KTtsZXQgbD0wO2ZvcihsZXQgbz0xO288bi5sZW5ndGg7bysrKVcuZ2V0RW5kUG9zaXRpb24obltsXS5yYW5nZSkuZXF1YWxzKFcuZ2V0U3RhcnRQb3NpdGlvbihuW29dLnJhbmdlKSk/KG5bbF0ucmFuZ2U9Vy5mcm9tUG9zaXRpb25zKFcuZ2V0U3RhcnRQb3NpdGlvbihuW2xdLnJhbmdlKSxXLmdldEVuZFBvc2l0aW9uKG5bb10ucmFuZ2UpKSxuW2xdLnRleHQrPW5bb10udGV4dCk6KGwrKyxuW2xdPW5bb10pO24ubGVuZ3RoPWwrMTtmb3IobGV0e3JhbmdlOm8sdGV4dDp1LGVvbDpofW9mIG4pe2lmKHR5cGVvZiBoPT0ibnVtYmVyIiYmKGE9aCksVy5pc0VtcHR5KG8pJiYhdSljb250aW51ZTtjb25zdCBjPWkuZ2V0VmFsdWVJblJhbmdlKG8pO2lmKHU9dS5yZXBsYWNlKC9cclxufFxufFxyL2csaS5lb2wpLGM9PT11KWNvbnRpbnVlO2lmKE1hdGgubWF4KHUubGVuZ3RoLGMubGVuZ3RoKT5sdC5fZGlmZkxpbWl0KXtzLnB1c2goe3JhbmdlOm8sdGV4dDp1fSk7Y29udGludWV9Y29uc3QgZD1fbChjLHUsciksbT1pLm9mZnNldEF0KFcubGlmdChvKS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBnIG9mIGQpe2NvbnN0IHA9aS5wb3NpdGlvbkF0KG0rZy5vcmlnaW5hbFN0YXJ0KSx2PWkucG9zaXRpb25BdChtK2cub3JpZ2luYWxTdGFydCtnLm9yaWdpbmFsTGVuZ3RoKSxfPXt0ZXh0OnUuc3Vic3RyKGcubW9kaWZpZWRTdGFydCxnLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOnAubGluZU51bWJlcixzdGFydENvbHVtbjpwLmNvbHVtbixlbmRMaW5lTnVtYmVyOnYubGluZU51bWJlcixlbmRDb2x1bW46di5jb2x1bW59fTtpLmdldFZhbHVlSW5SYW5nZShfLnJhbmdlKSE9PV8udGV4dCYmcy5wdXNoKF8pfX1yZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZzLnB1c2goe2VvbDphLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLHN9YXN5bmMgY29tcHV0ZUxpbmtzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/cnUobik6bnVsbH1hc3luYyBjb21wdXRlRGVmYXVsdERvY3VtZW50Q29sb3JzKHQpe2NvbnN0IG49dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIG4/bmMobik6bnVsbH1hc3luYyB0ZXh0dWFsU3VnZ2VzdCh0LG4scixpKXtjb25zdCBzPW5ldyBybixhPW5ldyBSZWdFeHAocixpKSxsPW5ldyBTZXQ7ZTpmb3IoY29uc3QgbyBvZiB0KXtjb25zdCB1PXRoaXMuX2dldE1vZGVsKG8pO2lmKHUpe2Zvcihjb25zdCBoIG9mIHUud29yZHMoYSkpaWYoIShoPT09bnx8IWlzTmFOKE51bWJlcihoKSkpJiYobC5hZGQoaCksbC5zaXplPmx0Ll9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShsKSxkdXJhdGlvbjpzLmVsYXBzZWQoKX19YXN5bmMgY29tcHV0ZVdvcmRSYW5nZXModCxuLHIsaSl7Y29uc3Qgcz10aGlzLl9nZXRNb2RlbCh0KTtpZighcylyZXR1cm4gT2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBhPW5ldyBSZWdFeHAocixpKSxsPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBvPW4uc3RhcnRMaW5lTnVtYmVyO288bi5lbmRMaW5lTnVtYmVyO28rKyl7Y29uc3QgdT1zLmdldExpbmVXb3JkcyhvLGEpO2Zvcihjb25zdCBoIG9mIHUpe2lmKCFpc05hTihOdW1iZXIoaC53b3JkKSkpY29udGludWU7bGV0IGM9bFtoLndvcmRdO2N8fChjPVtdLGxbaC53b3JkXT1jKSxjLnB1c2goe3N0YXJ0TGluZU51bWJlcjpvLHN0YXJ0Q29sdW1uOmguc3RhcnRDb2x1bW4sZW5kTGluZU51bWJlcjpvLGVuZENvbHVtbjpoLmVuZENvbHVtbn0pfX1yZXR1cm4gbH1hc3luYyBuYXZpZ2F0ZVZhbHVlU2V0KHQsbixyLGkscyl7Y29uc3QgYT10aGlzLl9nZXRNb2RlbCh0KTtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBsPW5ldyBSZWdFeHAoaSxzKTtuLnN0YXJ0Q29sdW1uPT09bi5lbmRDb2x1bW4mJihuPXtzdGFydExpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsc3RhcnRDb2x1bW46bi5zdGFydENvbHVtbixlbmRMaW5lTnVtYmVyOm4uZW5kTGluZU51bWJlcixlbmRDb2x1bW46bi5lbmRDb2x1bW4rMX0pO2NvbnN0IG89YS5nZXRWYWx1ZUluUmFuZ2UobiksdT1hLmdldFdvcmRBdFBvc2l0aW9uKHtsaW5lTnVtYmVyOm4uc3RhcnRMaW5lTnVtYmVyLGNvbHVtbjpuLnN0YXJ0Q29sdW1ufSxsKTtpZighdSlyZXR1cm4gbnVsbDtjb25zdCBoPWEuZ2V0VmFsdWVJblJhbmdlKHUpO3JldHVybiBsci5JTlNUQU5DRS5uYXZpZ2F0ZVZhbHVlU2V0KG4sbyx1LGgscil9bG9hZEZvcmVpZ25Nb2R1bGUodCxuLHIpe2NvbnN0IGE9e2hvc3Q6Sm8ociwobCxvKT0+dGhpcy5faG9zdC5maHIobCxvKSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KGEsbiksUHJvbWlzZS5yZXNvbHZlKHpuKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmV4cGVjdGVkIHVzYWdlIikpfWZtcih0LG4pe2lmKCF0aGlzLl9mb3JlaWduTW9kdWxlfHx0eXBlb2YgdGhpcy5fZm9yZWlnbk1vZHVsZVt0XSE9ImZ1bmN0aW9uIilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJNaXNzaW5nIHJlcXVlc3RIYW5kbGVyIG9yIG1ldGhvZDogIit0KSk7dHJ5e3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fZm9yZWlnbk1vZHVsZVt0XS5hcHBseSh0aGlzLl9mb3JlaWduTW9kdWxlLG4pKX1jYXRjaChyKXtyZXR1cm4gUHJvbWlzZS5yZWplY3Qocil9fX07bHQuX2RpZmZMaW1pdD0xZTUsbHQuX3N1Z2dlc3Rpb25zTGltaXQ9MWU0O2xldCBOcj1sdDt0eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIiYmKGdsb2JhbFRoaXMubW9uYWNvPW11KCkpO2xldCBTcj0hMTtmdW5jdGlvbiBvYShlKXtpZihTcilyZXR1cm47U3I9ITA7Y29uc3QgdD1uZXcgeGwobj0+e2dsb2JhbFRoaXMucG9zdE1lc3NhZ2Uobil9LG49Pm5ldyBOcihuLGUpKTtnbG9iYWxUaGlzLm9ubWVzc2FnZT1uPT57dC5vbm1lc3NhZ2Uobi5kYXRhKX19Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9ZT0+e1NyfHxvYShudWxsKX07LyohLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFZlcnNpb246IDAuNTEuMCg2N2Q2NjRhMzI5NjhlMTllMmViMDhiNjk2YTkyNDYzODA0MTgyYWU0KQogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9tb25hY28tZWRpdG9yL2Jsb2IvbWFpbi9MSUNFTlNFLnR4dAogKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9mdW5jdGlvbiBBcihlLHQ9ITEpe2NvbnN0IG49ZS5sZW5ndGg7bGV0IHI9MCxpPSIiLHM9MCxhPTE2LGw9MCxvPTAsdT0wLGg9MCxjPTA7ZnVuY3Rpb24gZCh4LHkpe2xldCBiPTAsTD0wO2Zvcig7Yjx4fHwheTspe2xldCBBPWUuY2hhckNvZGVBdChyKTtpZihBPj00OCYmQTw9NTcpTD1MKjE2K0EtNDg7ZWxzZSBpZihBPj02NSYmQTw9NzApTD1MKjE2K0EtNjUrMTA7ZWxzZSBpZihBPj05NyYmQTw9MTAyKUw9TCoxNitBLTk3KzEwO2Vsc2UgYnJlYWs7cisrLGIrK31yZXR1cm4gYjx4JiYoTD0tMSksTH1mdW5jdGlvbiBtKHgpe3I9eCxpPSIiLHM9MCxhPTE2LGM9MH1mdW5jdGlvbiBnKCl7bGV0IHg9cjtpZihlLmNoYXJDb2RlQXQocik9PT00OClyKys7ZWxzZSBmb3IocisrO3I8ZS5sZW5ndGgmJl90KGUuY2hhckNvZGVBdChyKSk7KXIrKztpZihyPGUubGVuZ3RoJiZlLmNoYXJDb2RlQXQocik9PT00NilpZihyKysscjxlLmxlbmd0aCYmX3QoZS5jaGFyQ29kZUF0KHIpKSlmb3IocisrO3I8ZS5sZW5ndGgmJl90KGUuY2hhckNvZGVBdChyKSk7KXIrKztlbHNlIHJldHVybiBjPTMsZS5zdWJzdHJpbmcoeCxyKTtsZXQgeT1yO2lmKHI8ZS5sZW5ndGgmJihlLmNoYXJDb2RlQXQocik9PT02OXx8ZS5jaGFyQ29kZUF0KHIpPT09MTAxKSlpZihyKyssKHI8ZS5sZW5ndGgmJmUuY2hhckNvZGVBdChyKT09PTQzfHxlLmNoYXJDb2RlQXQocik9PT00NSkmJnIrKyxyPGUubGVuZ3RoJiZfdChlLmNoYXJDb2RlQXQocikpKXtmb3IocisrO3I8ZS5sZW5ndGgmJl90KGUuY2hhckNvZGVBdChyKSk7KXIrKzt5PXJ9ZWxzZSBjPTM7cmV0dXJuIGUuc3Vic3RyaW5nKHgseSl9ZnVuY3Rpb24gcCgpe2xldCB4PSIiLHk9cjtmb3IoOzspe2lmKHI+PW4pe3grPWUuc3Vic3RyaW5nKHksciksYz0yO2JyZWFrfWNvbnN0IGI9ZS5jaGFyQ29kZUF0KHIpO2lmKGI9PT0zNCl7eCs9ZS5zdWJzdHJpbmcoeSxyKSxyKys7YnJlYWt9aWYoYj09PTkyKXtpZih4Kz1lLnN1YnN0cmluZyh5LHIpLHIrKyxyPj1uKXtjPTI7YnJlYWt9c3dpdGNoKGUuY2hhckNvZGVBdChyKyspKXtjYXNlIDM0OngrPSciJzticmVhaztjYXNlIDkyOngrPSJcXCI7YnJlYWs7Y2FzZSA0Nzp4Kz0iLyI7YnJlYWs7Y2FzZSA5ODp4Kz0iXGIiO2JyZWFrO2Nhc2UgMTAyOngrPSJcZiI7YnJlYWs7Y2FzZSAxMTA6eCs9YApgO2JyZWFrO2Nhc2UgMTE0OngrPSJcciI7YnJlYWs7Y2FzZSAxMTY6eCs9IgkiO2JyZWFrO2Nhc2UgMTE3OmNvbnN0IEE9ZCg0LCEwKTtBPj0wP3grPVN0cmluZy5mcm9tQ2hhckNvZGUoQSk6Yz00O2JyZWFrO2RlZmF1bHQ6Yz01fXk9cjtjb250aW51ZX1pZihiPj0wJiZiPD0zMSlpZih6dChiKSl7eCs9ZS5zdWJzdHJpbmcoeSxyKSxjPTI7YnJlYWt9ZWxzZSBjPTY7cisrfXJldHVybiB4fWZ1bmN0aW9uIHYoKXtpZihpPSIiLGM9MCxzPXIsbz1sLGg9dSxyPj1uKXJldHVybiBzPW4sYT0xNztsZXQgeD1lLmNoYXJDb2RlQXQocik7aWYoa3IoeCkpe2RvIHIrKyxpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpLHg9ZS5jaGFyQ29kZUF0KHIpO3doaWxlKGtyKHgpKTtyZXR1cm4gYT0xNX1pZih6dCh4KSlyZXR1cm4gcisrLGkrPVN0cmluZy5mcm9tQ2hhckNvZGUoeCkseD09PTEzJiZlLmNoYXJDb2RlQXQocik9PT0xMCYmKHIrKyxpKz1gCmApLGwrKyx1PXIsYT0xNDtzd2l0Y2goeCl7Y2FzZSAxMjM6cmV0dXJuIHIrKyxhPTE7Y2FzZSAxMjU6cmV0dXJuIHIrKyxhPTI7Y2FzZSA5MTpyZXR1cm4gcisrLGE9MztjYXNlIDkzOnJldHVybiByKyssYT00O2Nhc2UgNTg6cmV0dXJuIHIrKyxhPTY7Y2FzZSA0NDpyZXR1cm4gcisrLGE9NTtjYXNlIDM0OnJldHVybiByKyssaT1wKCksYT0xMDtjYXNlIDQ3OmNvbnN0IHk9ci0xO2lmKGUuY2hhckNvZGVBdChyKzEpPT09NDcpe2ZvcihyKz0yO3I8biYmIXp0KGUuY2hhckNvZGVBdChyKSk7KXIrKztyZXR1cm4gaT1lLnN1YnN0cmluZyh5LHIpLGE9MTJ9aWYoZS5jaGFyQ29kZUF0KHIrMSk9PT00Mil7cis9Mjtjb25zdCBiPW4tMTtsZXQgTD0hMTtmb3IoO3I8Yjspe2NvbnN0IEE9ZS5jaGFyQ29kZUF0KHIpO2lmKEE9PT00MiYmZS5jaGFyQ29kZUF0KHIrMSk9PT00Nyl7cis9MixMPSEwO2JyZWFrfXIrKyx6dChBKSYmKEE9PT0xMyYmZS5jaGFyQ29kZUF0KHIpPT09MTAmJnIrKyxsKyssdT1yKX1yZXR1cm4gTHx8KHIrKyxjPTEpLGk9ZS5zdWJzdHJpbmcoeSxyKSxhPTEzfXJldHVybiBpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHgpLHIrKyxhPTE2O2Nhc2UgNDU6aWYoaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh4KSxyKysscj09PW58fCFfdChlLmNoYXJDb2RlQXQocikpKXJldHVybiBhPTE2O2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6cmV0dXJuIGkrPWcoKSxhPTExO2RlZmF1bHQ6Zm9yKDtyPG4mJl8oeCk7KXIrKyx4PWUuY2hhckNvZGVBdChyKTtpZihzIT09cil7c3dpdGNoKGk9ZS5zdWJzdHJpbmcocyxyKSxpKXtjYXNlInRydWUiOnJldHVybiBhPTg7Y2FzZSJmYWxzZSI6cmV0dXJuIGE9OTtjYXNlIm51bGwiOnJldHVybiBhPTd9cmV0dXJuIGE9MTZ9cmV0dXJuIGkrPVN0cmluZy5mcm9tQ2hhckNvZGUoeCkscisrLGE9MTZ9fWZ1bmN0aW9uIF8oeCl7aWYoa3IoeCl8fHp0KHgpKXJldHVybiExO3N3aXRjaCh4KXtjYXNlIDEyNTpjYXNlIDkzOmNhc2UgMTIzOmNhc2UgOTE6Y2FzZSAzNDpjYXNlIDU4OmNhc2UgNDQ6Y2FzZSA0NzpyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBOKCl7bGV0IHg7ZG8geD12KCk7d2hpbGUoeD49MTImJng8PTE1KTtyZXR1cm4geH1yZXR1cm57c2V0UG9zaXRpb246bSxnZXRQb3NpdGlvbjooKT0+cixzY2FuOnQ/Tjp2LGdldFRva2VuOigpPT5hLGdldFRva2VuVmFsdWU6KCk9PmksZ2V0VG9rZW5PZmZzZXQ6KCk9PnMsZ2V0VG9rZW5MZW5ndGg6KCk9PnItcyxnZXRUb2tlblN0YXJ0TGluZTooKT0+byxnZXRUb2tlblN0YXJ0Q2hhcmFjdGVyOigpPT5zLWgsZ2V0VG9rZW5FcnJvcjooKT0+Y319ZnVuY3Rpb24ga3IoZSl7cmV0dXJuIGU9PT0zMnx8ZT09PTl9ZnVuY3Rpb24genQoZSl7cmV0dXJuIGU9PT0xMHx8ZT09PTEzfWZ1bmN0aW9uIF90KGUpe3JldHVybiBlPj00OCYmZTw9NTd9dmFyIGxhOyhmdW5jdGlvbihlKXtlW2UubGluZUZlZWQ9MTBdPSJsaW5lRmVlZCIsZVtlLmNhcnJpYWdlUmV0dXJuPTEzXT0iY2FycmlhZ2VSZXR1cm4iLGVbZS5zcGFjZT0zMl09InNwYWNlIixlW2UuXzA9NDhdPSJfMCIsZVtlLl8xPTQ5XT0iXzEiLGVbZS5fMj01MF09Il8yIixlW2UuXzM9NTFdPSJfMyIsZVtlLl80PTUyXT0iXzQiLGVbZS5fNT01M109Il81IixlW2UuXzY9NTRdPSJfNiIsZVtlLl83PTU1XT0iXzciLGVbZS5fOD01Nl09Il84IixlW2UuXzk9NTddPSJfOSIsZVtlLmE9OTddPSJhIixlW2UuYj05OF09ImIiLGVbZS5jPTk5XT0iYyIsZVtlLmQ9MTAwXT0iZCIsZVtlLmU9MTAxXT0iZSIsZVtlLmY9MTAyXT0iZiIsZVtlLmc9MTAzXT0iZyIsZVtlLmg9MTA0XT0iaCIsZVtlLmk9MTA1XT0iaSIsZVtlLmo9MTA2XT0iaiIsZVtlLms9MTA3XT0iayIsZVtlLmw9MTA4XT0ibCIsZVtlLm09MTA5XT0ibSIsZVtlLm49MTEwXT0ibiIsZVtlLm89MTExXT0ibyIsZVtlLnA9MTEyXT0icCIsZVtlLnE9MTEzXT0icSIsZVtlLnI9MTE0XT0iciIsZVtlLnM9MTE1XT0icyIsZVtlLnQ9MTE2XT0idCIsZVtlLnU9MTE3XT0idSIsZVtlLnY9MTE4XT0idiIsZVtlLnc9MTE5XT0idyIsZVtlLng9MTIwXT0ieCIsZVtlLnk9MTIxXT0ieSIsZVtlLno9MTIyXT0ieiIsZVtlLkE9NjVdPSJBIixlW2UuQj02Nl09IkIiLGVbZS5DPTY3XT0iQyIsZVtlLkQ9NjhdPSJEIixlW2UuRT02OV09IkUiLGVbZS5GPTcwXT0iRiIsZVtlLkc9NzFdPSJHIixlW2UuSD03Ml09IkgiLGVbZS5JPTczXT0iSSIsZVtlLko9NzRdPSJKIixlW2UuSz03NV09IksiLGVbZS5MPTc2XT0iTCIsZVtlLk09NzddPSJNIixlW2UuTj03OF09Ik4iLGVbZS5PPTc5XT0iTyIsZVtlLlA9ODBdPSJQIixlW2UuUT04MV09IlEiLGVbZS5SPTgyXT0iUiIsZVtlLlM9ODNdPSJTIixlW2UuVD04NF09IlQiLGVbZS5VPTg1XT0iVSIsZVtlLlY9ODZdPSJWIixlW2UuVz04N109IlciLGVbZS5YPTg4XT0iWCIsZVtlLlk9ODldPSJZIixlW2UuWj05MF09IloiLGVbZS5hc3Rlcmlzaz00Ml09ImFzdGVyaXNrIixlW2UuYmFja3NsYXNoPTkyXT0iYmFja3NsYXNoIixlW2UuY2xvc2VCcmFjZT0xMjVdPSJjbG9zZUJyYWNlIixlW2UuY2xvc2VCcmFja2V0PTkzXT0iY2xvc2VCcmFja2V0IixlW2UuY29sb249NThdPSJjb2xvbiIsZVtlLmNvbW1hPTQ0XT0iY29tbWEiLGVbZS5kb3Q9NDZdPSJkb3QiLGVbZS5kb3VibGVRdW90ZT0zNF09ImRvdWJsZVF1b3RlIixlW2UubWludXM9NDVdPSJtaW51cyIsZVtlLm9wZW5CcmFjZT0xMjNdPSJvcGVuQnJhY2UiLGVbZS5vcGVuQnJhY2tldD05MV09Im9wZW5CcmFja2V0IixlW2UucGx1cz00M109InBsdXMiLGVbZS5zbGFzaD00N109InNsYXNoIixlW2UuZm9ybUZlZWQ9MTJdPSJmb3JtRmVlZCIsZVtlLnRhYj05XT0idGFiIn0pKGxhfHwobGE9e30pKTt2YXIgX2U9bmV3IEFycmF5KDIwKS5maWxsKDApLm1hcCgoZSx0KT0+IiAiLnJlcGVhdCh0KSksTHQ9MjAwLHVhPXsiICI6eyJcbiI6bmV3IEFycmF5KEx0KS5maWxsKDApLm1hcCgoZSx0KT0+YApgKyIgIi5yZXBlYXQodCkpLCJcciI6bmV3IEFycmF5KEx0KS5maWxsKDApLm1hcCgoZSx0KT0+IlxyIisiICIucmVwZWF0KHQpKSwiXHJcbiI6bmV3IEFycmF5KEx0KS5maWxsKDApLm1hcCgoZSx0KT0+YFxyCmArIiAiLnJlcGVhdCh0KSl9LCIJIjp7IlxuIjpuZXcgQXJyYXkoTHQpLmZpbGwoMCkubWFwKChlLHQpPT5gCmArIgkiLnJlcGVhdCh0KSksIlxyIjpuZXcgQXJyYXkoTHQpLmZpbGwoMCkubWFwKChlLHQpPT4iXHIiKyIJIi5yZXBlYXQodCkpLCJcclxuIjpuZXcgQXJyYXkoTHQpLmZpbGwoMCkubWFwKChlLHQpPT5gXHIKYCsiCSIucmVwZWF0KHQpKX19LHVjPVtgCmAsIlxyIixgXHIKYF07ZnVuY3Rpb24gY2MoZSx0LG4pe2xldCByLGkscyxhLGw7aWYodCl7Zm9yKGE9dC5vZmZzZXQsbD1hK3QubGVuZ3RoLHM9YTtzPjAmJiFjYShlLHMtMSk7KXMtLTtsZXQgYj1sO2Zvcig7YjxlLmxlbmd0aCYmIWNhKGUsYik7KWIrKztpPWUuc3Vic3RyaW5nKHMsYikscj1mYyhpLG4pfWVsc2UgaT1lLHI9MCxzPTAsYT0wLGw9ZS5sZW5ndGg7Y29uc3Qgbz1oYyhuLGUpLHU9dWMuaW5jbHVkZXMobyk7bGV0IGg9MCxjPTAsZDtuLmluc2VydFNwYWNlcz9kPV9lW24udGFiU2l6ZXx8NF0/P050KF9lWzFdLG4udGFiU2l6ZXx8NCk6ZD0iCSI7Y29uc3QgbT1kPT09IgkiPyIJIjoiICI7bGV0IGc9QXIoaSwhMSkscD0hMTtmdW5jdGlvbiB2KCl7aWYoaD4xKXJldHVybiBOdChvLGgpK050KGQscitjKTtjb25zdCBiPWQubGVuZ3RoKihyK2MpO3JldHVybiF1fHxiPnVhW21dW29dLmxlbmd0aD9vK050KGQscitjKTpiPD0wP286dWFbbV1bb11bYl19ZnVuY3Rpb24gXygpe2xldCBiPWcuc2NhbigpO2ZvcihoPTA7Yj09PTE1fHxiPT09MTQ7KWI9PT0xNCYmbi5rZWVwTGluZXM/aCs9MTpiPT09MTQmJihoPTEpLGI9Zy5zY2FuKCk7cmV0dXJuIHA9Yj09PTE2fHxnLmdldFRva2VuRXJyb3IoKSE9PTAsYn1jb25zdCBOPVtdO2Z1bmN0aW9uIHgoYixMLEEpeyFwJiYoIXR8fEw8bCYmQT5hKSYmZS5zdWJzdHJpbmcoTCxBKSE9PWImJk4ucHVzaCh7b2Zmc2V0OkwsbGVuZ3RoOkEtTCxjb250ZW50OmJ9KX1sZXQgeT1fKCk7aWYobi5rZWVwTGluZXMmJmg+MCYmeChOdChvLGgpLDAsMCkseSE9PTE3KXtsZXQgYj1nLmdldFRva2VuT2Zmc2V0KCkrcyxMPWQubGVuZ3RoKnI8MjAmJm4uaW5zZXJ0U3BhY2VzP19lW2QubGVuZ3RoKnJdOk50KGQscik7eChMLHMsYil9Zm9yKDt5IT09MTc7KXtsZXQgYj1nLmdldFRva2VuT2Zmc2V0KCkrZy5nZXRUb2tlbkxlbmd0aCgpK3MsTD1fKCksQT0iIixSPSExO2Zvcig7aD09PTAmJihMPT09MTJ8fEw9PT0xMyk7KXtsZXQgRD1nLmdldFRva2VuT2Zmc2V0KCkrczt4KF9lWzFdLGIsRCksYj1nLmdldFRva2VuT2Zmc2V0KCkrZy5nZXRUb2tlbkxlbmd0aCgpK3MsUj1MPT09MTIsQT1SP3YoKToiIixMPV8oKX1pZihMPT09Mil5IT09MSYmYy0tLG4ua2VlcExpbmVzJiZoPjB8fCFuLmtlZXBMaW5lcyYmeSE9PTE/QT12KCk6bi5rZWVwTGluZXMmJihBPV9lWzFdKTtlbHNlIGlmKEw9PT00KXkhPT0zJiZjLS0sbi5rZWVwTGluZXMmJmg+MHx8IW4ua2VlcExpbmVzJiZ5IT09Mz9BPXYoKTpuLmtlZXBMaW5lcyYmKEE9X2VbMV0pO2Vsc2V7c3dpdGNoKHkpe2Nhc2UgMzpjYXNlIDE6YysrLG4ua2VlcExpbmVzJiZoPjB8fCFuLmtlZXBMaW5lcz9BPXYoKTpBPV9lWzFdO2JyZWFrO2Nhc2UgNTpuLmtlZXBMaW5lcyYmaD4wfHwhbi5rZWVwTGluZXM/QT12KCk6QT1fZVsxXTticmVhaztjYXNlIDEyOkE9digpO2JyZWFrO2Nhc2UgMTM6aD4wP0E9digpOlJ8fChBPV9lWzFdKTticmVhaztjYXNlIDY6bi5rZWVwTGluZXMmJmg+MD9BPXYoKTpSfHwoQT1fZVsxXSk7YnJlYWs7Y2FzZSAxMDpuLmtlZXBMaW5lcyYmaD4wP0E9digpOkw9PT02JiYhUiYmKEE9IiIpO2JyZWFrO2Nhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTE6Y2FzZSAyOmNhc2UgNDpuLmtlZXBMaW5lcyYmaD4wP0E9digpOihMPT09MTJ8fEw9PT0xMykmJiFSP0E9X2VbMV06TCE9PTUmJkwhPT0xNyYmKHA9ITApO2JyZWFrO2Nhc2UgMTY6cD0hMDticmVha31oPjAmJihMPT09MTJ8fEw9PT0xMykmJihBPXYoKSl9TD09PTE3JiYobi5rZWVwTGluZXMmJmg+MD9BPXYoKTpBPW4uaW5zZXJ0RmluYWxOZXdsaW5lP286IiIpO2NvbnN0IEk9Zy5nZXRUb2tlbk9mZnNldCgpK3M7eChBLGIsSSkseT1MfXJldHVybiBOfWZ1bmN0aW9uIE50KGUsdCl7bGV0IG49IiI7Zm9yKGxldCByPTA7cjx0O3IrKyluKz1lO3JldHVybiBufWZ1bmN0aW9uIGZjKGUsdCl7bGV0IG49MCxyPTA7Y29uc3QgaT10LnRhYlNpemV8fDQ7Zm9yKDtuPGUubGVuZ3RoOyl7bGV0IHM9ZS5jaGFyQXQobik7aWYocz09PV9lWzFdKXIrKztlbHNlIGlmKHM9PT0iCSIpcis9aTtlbHNlIGJyZWFrO24rK31yZXR1cm4gTWF0aC5mbG9vcihyL2kpfWZ1bmN0aW9uIGhjKGUsdCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHI9dC5jaGFyQXQobik7aWYocj09PSJcciIpcmV0dXJuIG4rMTx0Lmxlbmd0aCYmdC5jaGFyQXQobisxKT09PWAKYD9gXHIKYDoiXHIiO2lmKHI9PT1gCmApcmV0dXJuYApgfXJldHVybiBlJiZlLmVvbHx8YApgfWZ1bmN0aW9uIGNhKGUsdCl7cmV0dXJuYFxyCmAuaW5kZXhPZihlLmNoYXJBdCh0KSkhPT0tMX12YXIgX247KGZ1bmN0aW9uKGUpe2UuREVGQVVMVD17YWxsb3dUcmFpbGluZ0NvbW1hOiExfX0pKF9ufHwoX249e30pKTtmdW5jdGlvbiBkYyhlLHQ9W10sbj1fbi5ERUZBVUxUKXtsZXQgcj1udWxsLGk9W107Y29uc3Qgcz1bXTtmdW5jdGlvbiBhKG8pe0FycmF5LmlzQXJyYXkoaSk/aS5wdXNoKG8pOnIhPT1udWxsJiYoaVtyXT1vKX1yZXR1cm4gZ2MoZSx7b25PYmplY3RCZWdpbjooKT0+e2NvbnN0IG89e307YShvKSxzLnB1c2goaSksaT1vLHI9bnVsbH0sb25PYmplY3RQcm9wZXJ0eTpvPT57cj1vfSxvbk9iamVjdEVuZDooKT0+e2k9cy5wb3AoKX0sb25BcnJheUJlZ2luOigpPT57Y29uc3Qgbz1bXTthKG8pLHMucHVzaChpKSxpPW8scj1udWxsfSxvbkFycmF5RW5kOigpPT57aT1zLnBvcCgpfSxvbkxpdGVyYWxWYWx1ZTphLG9uRXJyb3I6KG8sdSxoKT0+e3QucHVzaCh7ZXJyb3I6byxvZmZzZXQ6dSxsZW5ndGg6aH0pfX0sbiksaVswXX1mdW5jdGlvbiBmYShlKXtpZighZS5wYXJlbnR8fCFlLnBhcmVudC5jaGlsZHJlbilyZXR1cm5bXTtjb25zdCB0PWZhKGUucGFyZW50KTtpZihlLnBhcmVudC50eXBlPT09InByb3BlcnR5Iil7Y29uc3Qgbj1lLnBhcmVudC5jaGlsZHJlblswXS52YWx1ZTt0LnB1c2gobil9ZWxzZSBpZihlLnBhcmVudC50eXBlPT09ImFycmF5Iil7Y29uc3Qgbj1lLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKGUpO24hPT0tMSYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIEVyKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiBlLmNoaWxkcmVuLm1hcChFcik7Y2FzZSJvYmplY3QiOmNvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IG4gb2YgZS5jaGlsZHJlbil7Y29uc3Qgcj1uLmNoaWxkcmVuWzFdO3ImJih0W24uY2hpbGRyZW5bMF0udmFsdWVdPUVyKHIpKX1yZXR1cm4gdDtjYXNlIm51bGwiOmNhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpyZXR1cm4gZS52YWx1ZTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gbWMoZSx0LG49ITEpe3JldHVybiB0Pj1lLm9mZnNldCYmdDxlLm9mZnNldCtlLmxlbmd0aHx8biYmdD09PWUub2Zmc2V0K2UubGVuZ3RofWZ1bmN0aW9uIGhhKGUsdCxuPSExKXtpZihtYyhlLHQsbikpe2NvbnN0IHI9ZS5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KHIpKWZvcihsZXQgaT0wO2k8ci5sZW5ndGgmJnJbaV0ub2Zmc2V0PD10O2krKyl7Y29uc3Qgcz1oYShyW2ldLHQsbik7aWYocylyZXR1cm4gc31yZXR1cm4gZX19ZnVuY3Rpb24gZ2MoZSx0LG49X24uREVGQVVMVCl7Y29uc3Qgcj1BcihlLCExKSxpPVtdO2Z1bmN0aW9uIHModyl7cmV0dXJuIHc/KCk9Pncoci5nZXRUb2tlbk9mZnNldCgpLHIuZ2V0VG9rZW5MZW5ndGgoKSxyLmdldFRva2VuU3RhcnRMaW5lKCksci5nZXRUb2tlblN0YXJ0Q2hhcmFjdGVyKCkpOigpPT4hMH1mdW5jdGlvbiBhKHcpe3JldHVybiB3PygpPT53KHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpLCgpPT5pLnNsaWNlKCkpOigpPT4hMH1mdW5jdGlvbiBsKHcpe3JldHVybiB3P1M9PncoUyxyLmdldFRva2VuT2Zmc2V0KCksci5nZXRUb2tlbkxlbmd0aCgpLHIuZ2V0VG9rZW5TdGFydExpbmUoKSxyLmdldFRva2VuU3RhcnRDaGFyYWN0ZXIoKSk6KCk9PiEwfWZ1bmN0aW9uIG8odyl7cmV0dXJuIHc/Uz0+dyhTLHIuZ2V0VG9rZW5PZmZzZXQoKSxyLmdldFRva2VuTGVuZ3RoKCksci5nZXRUb2tlblN0YXJ0TGluZSgpLHIuZ2V0VG9rZW5TdGFydENoYXJhY3RlcigpLCgpPT5pLnNsaWNlKCkpOigpPT4hMH1jb25zdCB1PWEodC5vbk9iamVjdEJlZ2luKSxoPW8odC5vbk9iamVjdFByb3BlcnR5KSxjPXModC5vbk9iamVjdEVuZCksZD1hKHQub25BcnJheUJlZ2luKSxtPXModC5vbkFycmF5RW5kKSxnPW8odC5vbkxpdGVyYWxWYWx1ZSkscD1sKHQub25TZXBhcmF0b3IpLHY9cyh0Lm9uQ29tbWVudCksXz1sKHQub25FcnJvciksTj1uJiZuLmRpc2FsbG93Q29tbWVudHMseD1uJiZuLmFsbG93VHJhaWxpbmdDb21tYTtmdW5jdGlvbiB5KCl7Zm9yKDs7KXtjb25zdCB3PXIuc2NhbigpO3N3aXRjaChyLmdldFRva2VuRXJyb3IoKSl7Y2FzZSA0OmIoMTQpO2JyZWFrO2Nhc2UgNTpiKDE1KTticmVhaztjYXNlIDM6YigxMyk7YnJlYWs7Y2FzZSAxOk58fGIoMTEpO2JyZWFrO2Nhc2UgMjpiKDEyKTticmVhaztjYXNlIDY6YigxNik7YnJlYWt9c3dpdGNoKHcpe2Nhc2UgMTI6Y2FzZSAxMzpOP2IoMTApOnYoKTticmVhaztjYXNlIDE2OmIoMSk7YnJlYWs7Y2FzZSAxNTpjYXNlIDE0OmJyZWFrO2RlZmF1bHQ6cmV0dXJuIHd9fX1mdW5jdGlvbiBiKHcsUz1bXSxDPVtdKXtpZihfKHcpLFMubGVuZ3RoK0MubGVuZ3RoPjApe2xldCBUPXIuZ2V0VG9rZW4oKTtmb3IoO1QhPT0xNzspe2lmKFMuaW5kZXhPZihUKSE9PS0xKXt5KCk7YnJlYWt9ZWxzZSBpZihDLmluZGV4T2YoVCkhPT0tMSlicmVhaztUPXkoKX19fWZ1bmN0aW9uIEwodyl7Y29uc3QgUz1yLmdldFRva2VuVmFsdWUoKTtyZXR1cm4gdz9nKFMpOihoKFMpLGkucHVzaChTKSkseSgpLCEwfWZ1bmN0aW9uIEEoKXtzd2l0Y2goci5nZXRUb2tlbigpKXtjYXNlIDExOmNvbnN0IHc9ci5nZXRUb2tlblZhbHVlKCk7bGV0IFM9TnVtYmVyKHcpO2lzTmFOKFMpJiYoYigyKSxTPTApLGcoUyk7YnJlYWs7Y2FzZSA3OmcobnVsbCk7YnJlYWs7Y2FzZSA4OmcoITApO2JyZWFrO2Nhc2UgOTpnKCExKTticmVhaztkZWZhdWx0OnJldHVybiExfXJldHVybiB5KCksITB9ZnVuY3Rpb24gUigpe3JldHVybiByLmdldFRva2VuKCkhPT0xMD8oYigzLFtdLFsyLDVdKSwhMSk6KEwoITEpLHIuZ2V0VG9rZW4oKT09PTY/KHAoIjoiKSx5KCksTSgpfHxiKDQsW10sWzIsNV0pKTpiKDUsW10sWzIsNV0pLGkucG9wKCksITApfWZ1bmN0aW9uIEkoKXt1KCkseSgpO2xldCB3PSExO2Zvcig7ci5nZXRUb2tlbigpIT09MiYmci5nZXRUb2tlbigpIT09MTc7KXtpZihyLmdldFRva2VuKCk9PT01KXtpZih3fHxiKDQsW10sW10pLHAoIiwiKSx5KCksci5nZXRUb2tlbigpPT09MiYmeClicmVha31lbHNlIHcmJmIoNixbXSxbXSk7UigpfHxiKDQsW10sWzIsNV0pLHc9ITB9cmV0dXJuIGMoKSxyLmdldFRva2VuKCkhPT0yP2IoNyxbMl0sW10pOnkoKSwhMH1mdW5jdGlvbiBEKCl7ZCgpLHkoKTtsZXQgdz0hMCxTPSExO2Zvcig7ci5nZXRUb2tlbigpIT09NCYmci5nZXRUb2tlbigpIT09MTc7KXtpZihyLmdldFRva2VuKCk9PT01KXtpZihTfHxiKDQsW10sW10pLHAoIiwiKSx5KCksci5nZXRUb2tlbigpPT09NCYmeClicmVha31lbHNlIFMmJmIoNixbXSxbXSk7dz8oaS5wdXNoKDApLHc9ITEpOmlbaS5sZW5ndGgtMV0rKyxNKCl8fGIoNCxbXSxbNCw1XSksUz0hMH1yZXR1cm4gbSgpLHd8fGkucG9wKCksci5nZXRUb2tlbigpIT09ND9iKDgsWzRdLFtdKTp5KCksITB9ZnVuY3Rpb24gTSgpe3N3aXRjaChyLmdldFRva2VuKCkpe2Nhc2UgMzpyZXR1cm4gRCgpO2Nhc2UgMTpyZXR1cm4gSSgpO2Nhc2UgMTA6cmV0dXJuIEwoITApO2RlZmF1bHQ6cmV0dXJuIEEoKX19cmV0dXJuIHkoKSxyLmdldFRva2VuKCk9PT0xNz9uLmFsbG93RW1wdHlDb250ZW50PyEwOihiKDQsW10sW10pLCExKTpNKCk/KHIuZ2V0VG9rZW4oKSE9PTE3JiZiKDksW10sW10pLCEwKTooYig0LFtdLFtdKSwhMSl9dmFyIHJ0PUFyLGRhOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQ9MV09IlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQiLGVbZS5VbmV4cGVjdGVkRW5kT2ZTdHJpbmc9Ml09IlVuZXhwZWN0ZWRFbmRPZlN0cmluZyIsZVtlLlVuZXhwZWN0ZWRFbmRPZk51bWJlcj0zXT0iVW5leHBlY3RlZEVuZE9mTnVtYmVyIixlW2UuSW52YWxpZFVuaWNvZGU9NF09IkludmFsaWRVbmljb2RlIixlW2UuSW52YWxpZEVzY2FwZUNoYXJhY3Rlcj01XT0iSW52YWxpZEVzY2FwZUNoYXJhY3RlciIsZVtlLkludmFsaWRDaGFyYWN0ZXI9Nl09IkludmFsaWRDaGFyYWN0ZXIifSkoZGF8fChkYT17fSkpO3ZhciBtYTsoZnVuY3Rpb24oZSl7ZVtlLk9wZW5CcmFjZVRva2VuPTFdPSJPcGVuQnJhY2VUb2tlbiIsZVtlLkNsb3NlQnJhY2VUb2tlbj0yXT0iQ2xvc2VCcmFjZVRva2VuIixlW2UuT3BlbkJyYWNrZXRUb2tlbj0zXT0iT3BlbkJyYWNrZXRUb2tlbiIsZVtlLkNsb3NlQnJhY2tldFRva2VuPTRdPSJDbG9zZUJyYWNrZXRUb2tlbiIsZVtlLkNvbW1hVG9rZW49NV09IkNvbW1hVG9rZW4iLGVbZS5Db2xvblRva2VuPTZdPSJDb2xvblRva2VuIixlW2UuTnVsbEtleXdvcmQ9N109Ik51bGxLZXl3b3JkIixlW2UuVHJ1ZUtleXdvcmQ9OF09IlRydWVLZXl3b3JkIixlW2UuRmFsc2VLZXl3b3JkPTldPSJGYWxzZUtleXdvcmQiLGVbZS5TdHJpbmdMaXRlcmFsPTEwXT0iU3RyaW5nTGl0ZXJhbCIsZVtlLk51bWVyaWNMaXRlcmFsPTExXT0iTnVtZXJpY0xpdGVyYWwiLGVbZS5MaW5lQ29tbWVudFRyaXZpYT0xMl09IkxpbmVDb21tZW50VHJpdmlhIixlW2UuQmxvY2tDb21tZW50VHJpdmlhPTEzXT0iQmxvY2tDb21tZW50VHJpdmlhIixlW2UuTGluZUJyZWFrVHJpdmlhPTE0XT0iTGluZUJyZWFrVHJpdmlhIixlW2UuVHJpdmlhPTE1XT0iVHJpdmlhIixlW2UuVW5rbm93bj0xNl09IlVua25vd24iLGVbZS5FT0Y9MTddPSJFT0YifSkobWF8fChtYT17fSkpO3ZhciBwYz1kYyxiYz1oYSx2Yz1mYSx4Yz1FcixnYTsoZnVuY3Rpb24oZSl7ZVtlLkludmFsaWRTeW1ib2w9MV09IkludmFsaWRTeW1ib2wiLGVbZS5JbnZhbGlkTnVtYmVyRm9ybWF0PTJdPSJJbnZhbGlkTnVtYmVyRm9ybWF0IixlW2UuUHJvcGVydHlOYW1lRXhwZWN0ZWQ9M109IlByb3BlcnR5TmFtZUV4cGVjdGVkIixlW2UuVmFsdWVFeHBlY3RlZD00XT0iVmFsdWVFeHBlY3RlZCIsZVtlLkNvbG9uRXhwZWN0ZWQ9NV09IkNvbG9uRXhwZWN0ZWQiLGVbZS5Db21tYUV4cGVjdGVkPTZdPSJDb21tYUV4cGVjdGVkIixlW2UuQ2xvc2VCcmFjZUV4cGVjdGVkPTddPSJDbG9zZUJyYWNlRXhwZWN0ZWQiLGVbZS5DbG9zZUJyYWNrZXRFeHBlY3RlZD04XT0iQ2xvc2VCcmFja2V0RXhwZWN0ZWQiLGVbZS5FbmRPZkZpbGVFeHBlY3RlZD05XT0iRW5kT2ZGaWxlRXhwZWN0ZWQiLGVbZS5JbnZhbGlkQ29tbWVudFRva2VuPTEwXT0iSW52YWxpZENvbW1lbnRUb2tlbiIsZVtlLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQ9MTFdPSJVbmV4cGVjdGVkRW5kT2ZDb21tZW50IixlW2UuVW5leHBlY3RlZEVuZE9mU3RyaW5nPTEyXT0iVW5leHBlY3RlZEVuZE9mU3RyaW5nIixlW2UuVW5leHBlY3RlZEVuZE9mTnVtYmVyPTEzXT0iVW5leHBlY3RlZEVuZE9mTnVtYmVyIixlW2UuSW52YWxpZFVuaWNvZGU9MTRdPSJJbnZhbGlkVW5pY29kZSIsZVtlLkludmFsaWRFc2NhcGVDaGFyYWN0ZXI9MTVdPSJJbnZhbGlkRXNjYXBlQ2hhcmFjdGVyIixlW2UuSW52YWxpZENoYXJhY3Rlcj0xNl09IkludmFsaWRDaGFyYWN0ZXIifSkoZ2F8fChnYT17fSkpO2Z1bmN0aW9uIHljKGUsdCxuKXtyZXR1cm4gY2MoZSx0LG4pfWZ1bmN0aW9uIFN0KGUsdCl7aWYoZT09PXQpcmV0dXJuITA7aWYoZT09bnVsbHx8dD09PW51bGx8fHQ9PT12b2lkIDB8fHR5cGVvZiBlIT10eXBlb2YgdHx8dHlwZW9mIGUhPSJvYmplY3QifHxBcnJheS5pc0FycmF5KGUpIT09QXJyYXkuaXNBcnJheSh0KSlyZXR1cm4hMTtsZXQgbixyO2lmKEFycmF5LmlzQXJyYXkoZSkpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZighU3QoZVtuXSx0W25dKSlyZXR1cm4hMX1lbHNle2NvbnN0IGk9W107Zm9yKHIgaW4gZSlpLnB1c2gocik7aS5zb3J0KCk7Y29uc3Qgcz1bXTtmb3IociBpbiB0KXMucHVzaChyKTtpZihzLnNvcnQoKSwhU3QoaSxzKSlyZXR1cm4hMTtmb3Iobj0wO248aS5sZW5ndGg7bisrKWlmKCFTdChlW2lbbl1dLHRbaVtuXV0pKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGxlKGUpe3JldHVybiB0eXBlb2YgZT09Im51bWJlciJ9ZnVuY3Rpb24gQWUoZSl7cmV0dXJuIHR5cGVvZiBlPCJ1In1mdW5jdGlvbiBUZShlKXtyZXR1cm4gdHlwZW9mIGU9PSJib29sZWFuIn1mdW5jdGlvbiBwYShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmcifWZ1bmN0aW9uIFFlKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiYhQXJyYXkuaXNBcnJheShlKX1mdW5jdGlvbiB3YyhlLHQpe2lmKGUubGVuZ3RoPHQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKWlmKGVbbl0hPT10W25dKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEd0KGUsdCl7Y29uc3Qgbj1lLmxlbmd0aC10Lmxlbmd0aDtyZXR1cm4gbj4wP2UubGFzdEluZGV4T2YodCk9PT1uOm49PT0wP2U9PT10OiExfWZ1bmN0aW9uIExuKGUpe2xldCB0PSIiO3djKGUsIig/aSkiKSYmKGU9ZS5zdWJzdHJpbmcoNCksdD0iaSIpO3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChlLHQrInUiKX1jYXRjaHt0cnl7cmV0dXJuIG5ldyBSZWdFeHAoZSx0KX1jYXRjaHtyZXR1cm59fX1mdW5jdGlvbiBiYShlKXtsZXQgdD0wO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXt0Kys7Y29uc3Qgcj1lLmNoYXJDb2RlQXQobik7NTUyOTY8PXImJnI8PTU2MzE5JiZuKyt9cmV0dXJuIHR9dmFyIHZhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe3JldHVybiB0eXBlb2Ygbj09InN0cmluZyJ9ZS5pcz10fSkodmF8fCh2YT17fSkpO3ZhciBScjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gdHlwZW9mIG49PSJzdHJpbmcifWUuaXM9dH0pKFJyfHwoUnI9e30pKTt2YXIgeGE7KGZ1bmN0aW9uKGUpe2UuTUlOX1ZBTFVFPS0yMTQ3NDgzNjQ4LGUuTUFYX1ZBTFVFPTIxNDc0ODM2NDc7ZnVuY3Rpb24gdChuKXtyZXR1cm4gdHlwZW9mIG49PSJudW1iZXIiJiZlLk1JTl9WQUxVRTw9biYmbjw9ZS5NQVhfVkFMVUV9ZS5pcz10fSkoeGF8fCh4YT17fSkpO3ZhciBObjsoZnVuY3Rpb24oZSl7ZS5NSU5fVkFMVUU9MCxlLk1BWF9WQUxVRT0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIHQobil7cmV0dXJuIHR5cGVvZiBuPT0ibnVtYmVyIiYmZS5NSU5fVkFMVUU8PW4mJm48PWUuTUFYX1ZBTFVFfWUuaXM9dH0pKE5ufHwoTm49e30pKTt2YXIgWTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybiByPT09TnVtYmVyLk1BWF9WQUxVRSYmKHI9Tm4uTUFYX1ZBTFVFKSxpPT09TnVtYmVyLk1BWF9WQUxVRSYmKGk9Tm4uTUFYX1ZBTFVFKSx7bGluZTpyLGNoYXJhY3RlcjppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZrLnVpbnRlZ2VyKGkubGluZSkmJmsudWludGVnZXIoaS5jaGFyYWN0ZXIpfWUuaXM9bn0pKFl8fChZPXt9KSk7dmFyIFU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7aWYoay51aW50ZWdlcihyKSYmay51aW50ZWdlcihpKSYmay51aW50ZWdlcihzKSYmay51aW50ZWdlcihhKSlyZXR1cm57c3RhcnQ6WS5jcmVhdGUocixpKSxlbmQ6WS5jcmVhdGUocyxhKX07aWYoWS5pcyhyKSYmWS5pcyhpKSlyZXR1cm57c3RhcnQ6cixlbmQ6aX07dGhyb3cgbmV3IEVycm9yKGBSYW5nZSNjcmVhdGUgY2FsbGVkIHdpdGggaW52YWxpZCBhcmd1bWVudHNbJHtyfSwgJHtpfSwgJHtzfSwgJHthfV1gKX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZZLmlzKGkuc3RhcnQpJiZZLmlzKGkuZW5kKX1lLmlzPW59KShVfHwoVT17fSkpO3ZhciBBdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt1cmk6cixyYW5nZTppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZVLmlzKGkucmFuZ2UpJiYoay5zdHJpbmcoaS51cmkpfHxrLnVuZGVmaW5lZChpLnVyaSkpfWUuaXM9bn0pKEF0fHwoQXQ9e30pKTt2YXIgeWE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7cmV0dXJue3RhcmdldFVyaTpyLHRhcmdldFJhbmdlOmksdGFyZ2V0U2VsZWN0aW9uUmFuZ2U6cyxvcmlnaW5TZWxlY3Rpb25SYW5nZTphfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZVLmlzKGkudGFyZ2V0UmFuZ2UpJiZrLnN0cmluZyhpLnRhcmdldFVyaSkmJlUuaXMoaS50YXJnZXRTZWxlY3Rpb25SYW5nZSkmJihVLmlzKGkub3JpZ2luU2VsZWN0aW9uUmFuZ2UpfHxrLnVuZGVmaW5lZChpLm9yaWdpblNlbGVjdGlvblJhbmdlKSl9ZS5pcz1ufSkoeWF8fCh5YT17fSkpO3ZhciBNcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyxhKXtyZXR1cm57cmVkOnIsZ3JlZW46aSxibHVlOnMsYWxwaGE6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZrLm51bWJlclJhbmdlKGkucmVkLDAsMSkmJmsubnVtYmVyUmFuZ2UoaS5ncmVlbiwwLDEpJiZrLm51bWJlclJhbmdlKGkuYmx1ZSwwLDEpJiZrLm51bWJlclJhbmdlKGkuYWxwaGEsMCwxKX1lLmlzPW59KShNcnx8KE1yPXt9KSk7dmFyIHdhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue3JhbmdlOnIsY29sb3I6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZVLmlzKGkucmFuZ2UpJiZNci5pcyhpLmNvbG9yKX1lLmlzPW59KSh3YXx8KHdhPXt9KSk7dmFyIF9hOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXtyZXR1cm57bGFiZWw6cix0ZXh0RWRpdDppLGFkZGl0aW9uYWxUZXh0RWRpdHM6c319ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZrLnN0cmluZyhpLmxhYmVsKSYmKGsudW5kZWZpbmVkKGkudGV4dEVkaXQpfHxQZS5pcyhpKSkmJihrLnVuZGVmaW5lZChpLmFkZGl0aW9uYWxUZXh0RWRpdHMpfHxrLnR5cGVkQXJyYXkoaS5hZGRpdGlvbmFsVGV4dEVkaXRzLFBlLmlzKSl9ZS5pcz1ufSkoX2F8fChfYT17fSkpO3ZhciBKdDsoZnVuY3Rpb24oZSl7ZS5Db21tZW50PSJjb21tZW50IixlLkltcG9ydHM9ImltcG9ydHMiLGUuUmVnaW9uPSJyZWdpb24ifSkoSnR8fChKdD17fSkpO3ZhciBMYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyxhLGwsbyl7Y29uc3QgdT17c3RhcnRMaW5lOnIsZW5kTGluZTppfTtyZXR1cm4gay5kZWZpbmVkKHMpJiYodS5zdGFydENoYXJhY3Rlcj1zKSxrLmRlZmluZWQoYSkmJih1LmVuZENoYXJhY3Rlcj1hKSxrLmRlZmluZWQobCkmJih1LmtpbmQ9bCksay5kZWZpbmVkKG8pJiYodS5jb2xsYXBzZWRUZXh0PW8pLHV9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZrLnVpbnRlZ2VyKGkuc3RhcnRMaW5lKSYmay51aW50ZWdlcihpLnN0YXJ0TGluZSkmJihrLnVuZGVmaW5lZChpLnN0YXJ0Q2hhcmFjdGVyKXx8ay51aW50ZWdlcihpLnN0YXJ0Q2hhcmFjdGVyKSkmJihrLnVuZGVmaW5lZChpLmVuZENoYXJhY3Rlcil8fGsudWludGVnZXIoaS5lbmRDaGFyYWN0ZXIpKSYmKGsudW5kZWZpbmVkKGkua2luZCl8fGsuc3RyaW5nKGkua2luZCkpfWUuaXM9bn0pKExhfHwoTGE9e30pKTt2YXIgQ3I7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57bG9jYXRpb246cixtZXNzYWdlOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBrLmRlZmluZWQoaSkmJkF0LmlzKGkubG9jYXRpb24pJiZrLnN0cmluZyhpLm1lc3NhZ2UpfWUuaXM9bn0pKENyfHwoQ3I9e30pKTt2YXIgYmU7KGZ1bmN0aW9uKGUpe2UuRXJyb3I9MSxlLldhcm5pbmc9MixlLkluZm9ybWF0aW9uPTMsZS5IaW50PTR9KShiZXx8KGJlPXt9KSk7dmFyIE5hOyhmdW5jdGlvbihlKXtlLlVubmVjZXNzYXJ5PTEsZS5EZXByZWNhdGVkPTJ9KShOYXx8KE5hPXt9KSk7dmFyIFNhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IHI9bjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKHIpJiZrLnN0cmluZyhyLmhyZWYpfWUuaXM9dH0pKFNhfHwoU2E9e30pKTt2YXIgJGU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSxsLG8pe2xldCB1PXtyYW5nZTpyLG1lc3NhZ2U6aX07cmV0dXJuIGsuZGVmaW5lZChzKSYmKHUuc2V2ZXJpdHk9cyksay5kZWZpbmVkKGEpJiYodS5jb2RlPWEpLGsuZGVmaW5lZChsKSYmKHUuc291cmNlPWwpLGsuZGVmaW5lZChvKSYmKHUucmVsYXRlZEluZm9ybWF0aW9uPW8pLHV9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe3ZhciBpO2xldCBzPXI7cmV0dXJuIGsuZGVmaW5lZChzKSYmVS5pcyhzLnJhbmdlKSYmay5zdHJpbmcocy5tZXNzYWdlKSYmKGsubnVtYmVyKHMuc2V2ZXJpdHkpfHxrLnVuZGVmaW5lZChzLnNldmVyaXR5KSkmJihrLmludGVnZXIocy5jb2RlKXx8ay5zdHJpbmcocy5jb2RlKXx8ay51bmRlZmluZWQocy5jb2RlKSkmJihrLnVuZGVmaW5lZChzLmNvZGVEZXNjcmlwdGlvbil8fGsuc3RyaW5nKChpPXMuY29kZURlc2NyaXB0aW9uKT09PW51bGx8fGk9PT12b2lkIDA/dm9pZCAwOmkuaHJlZikpJiYoay5zdHJpbmcocy5zb3VyY2UpfHxrLnVuZGVmaW5lZChzLnNvdXJjZSkpJiYoay51bmRlZmluZWQocy5yZWxhdGVkSW5mb3JtYXRpb24pfHxrLnR5cGVkQXJyYXkocy5yZWxhdGVkSW5mb3JtYXRpb24sQ3IuaXMpKX1lLmlzPW59KSgkZXx8KCRlPXt9KSk7dmFyIGt0OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSwuLi5zKXtsZXQgYT17dGl0bGU6cixjb21tYW5kOml9O3JldHVybiBrLmRlZmluZWQocykmJnMubGVuZ3RoPjAmJihhLmFyZ3VtZW50cz1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBrLmRlZmluZWQoaSkmJmsuc3RyaW5nKGkudGl0bGUpJiZrLnN0cmluZyhpLmNvbW1hbmQpfWUuaXM9bn0pKGt0fHwoa3Q9e30pKTt2YXIgUGU7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocyxhKXtyZXR1cm57cmFuZ2U6cyxuZXdUZXh0OmF9fWUucmVwbGFjZT10O2Z1bmN0aW9uIG4ocyxhKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OnMsZW5kOnN9LG5ld1RleHQ6YX19ZS5pbnNlcnQ9bjtmdW5jdGlvbiByKHMpe3JldHVybntyYW5nZTpzLG5ld1RleHQ6IiJ9fWUuZGVsPXI7ZnVuY3Rpb24gaShzKXtjb25zdCBhPXM7cmV0dXJuIGsub2JqZWN0TGl0ZXJhbChhKSYmay5zdHJpbmcoYS5uZXdUZXh0KSYmVS5pcyhhLnJhbmdlKX1lLmlzPWl9KShQZXx8KFBlPXt9KSk7dmFyIFRyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXtjb25zdCBhPXtsYWJlbDpyfTtyZXR1cm4gaSE9PXZvaWQgMCYmKGEubmVlZHNDb25maXJtYXRpb249aSkscyE9PXZvaWQgMCYmKGEuZGVzY3JpcHRpb249cyksYX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7Y29uc3QgaT1yO3JldHVybiBrLm9iamVjdExpdGVyYWwoaSkmJmsuc3RyaW5nKGkubGFiZWwpJiYoay5ib29sZWFuKGkubmVlZHNDb25maXJtYXRpb24pfHxpLm5lZWRzQ29uZmlybWF0aW9uPT09dm9pZCAwKSYmKGsuc3RyaW5nKGkuZGVzY3JpcHRpb24pfHxpLmRlc2NyaXB0aW9uPT09dm9pZCAwKX1lLmlzPW59KShUcnx8KFRyPXt9KSk7dmFyIEV0OyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IHI9bjtyZXR1cm4gay5zdHJpbmcocil9ZS5pcz10fSkoRXR8fChFdD17fSkpO3ZhciBBYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChzLGEsbCl7cmV0dXJue3JhbmdlOnMsbmV3VGV4dDphLGFubm90YXRpb25JZDpsfX1lLnJlcGxhY2U9dDtmdW5jdGlvbiBuKHMsYSxsKXtyZXR1cm57cmFuZ2U6e3N0YXJ0OnMsZW5kOnN9LG5ld1RleHQ6YSxhbm5vdGF0aW9uSWQ6bH19ZS5pbnNlcnQ9bjtmdW5jdGlvbiByKHMsYSl7cmV0dXJue3JhbmdlOnMsbmV3VGV4dDoiIixhbm5vdGF0aW9uSWQ6YX19ZS5kZWw9cjtmdW5jdGlvbiBpKHMpe2NvbnN0IGE9cztyZXR1cm4gUGUuaXMoYSkmJihUci5pcyhhLmFubm90YXRpb25JZCl8fEV0LmlzKGEuYW5ub3RhdGlvbklkKSl9ZS5pcz1pfSkoQWF8fChBYT17fSkpO3ZhciBQcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt0ZXh0RG9jdW1lbnQ6cixlZGl0czppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5kZWZpbmVkKGkpJiZPci5pcyhpLnRleHREb2N1bWVudCkmJkFycmF5LmlzQXJyYXkoaS5lZGl0cyl9ZS5pcz1ufSkoUHJ8fChQcj17fSkpO3ZhciBJcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7bGV0IGE9e2tpbmQ6ImNyZWF0ZSIsdXJpOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoaS5vdmVyd3JpdGUhPT12b2lkIDB8fGkuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPWkpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0iY3JlYXRlIiYmay5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLm92ZXJ3cml0ZT09PXZvaWQgMHx8ay5ib29sZWFuKGkub3B0aW9ucy5vdmVyd3JpdGUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cz09PXZvaWQgMHx8ay5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZkV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxFdC5pcyhpLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKElyfHwoSXI9e30pKTt2YXIgRnI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMsYSl7bGV0IGw9e2tpbmQ6InJlbmFtZSIsb2xkVXJpOnIsbmV3VXJpOml9O3JldHVybiBzIT09dm9pZCAwJiYocy5vdmVyd3JpdGUhPT12b2lkIDB8fHMuaWdub3JlSWZFeGlzdHMhPT12b2lkIDApJiYobC5vcHRpb25zPXMpLGEhPT12b2lkIDAmJihsLmFubm90YXRpb25JZD1hKSxsfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0icmVuYW1lIiYmay5zdHJpbmcoaS5vbGRVcmkpJiZrLnN0cmluZyhpLm5ld1VyaSkmJihpLm9wdGlvbnM9PT12b2lkIDB8fChpLm9wdGlvbnMub3ZlcndyaXRlPT09dm9pZCAwfHxrLmJvb2xlYW4oaS5vcHRpb25zLm92ZXJ3cml0ZSkpJiYoaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzPT09dm9pZCAwfHxrLmJvb2xlYW4oaS5vcHRpb25zLmlnbm9yZUlmRXhpc3RzKSkpJiYoaS5hbm5vdGF0aW9uSWQ9PT12b2lkIDB8fEV0LmlzKGkuYW5ub3RhdGlvbklkKSl9ZS5pcz1ufSkoRnJ8fChGcj17fSkpO3ZhciBWcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7bGV0IGE9e2tpbmQ6ImRlbGV0ZSIsdXJpOnJ9O3JldHVybiBpIT09dm9pZCAwJiYoaS5yZWN1cnNpdmUhPT12b2lkIDB8fGkuaWdub3JlSWZOb3RFeGlzdHMhPT12b2lkIDApJiYoYS5vcHRpb25zPWkpLHMhPT12b2lkIDAmJihhLmFubm90YXRpb25JZD1zKSxhfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBpJiZpLmtpbmQ9PT0iZGVsZXRlIiYmay5zdHJpbmcoaS51cmkpJiYoaS5vcHRpb25zPT09dm9pZCAwfHwoaS5vcHRpb25zLnJlY3Vyc2l2ZT09PXZvaWQgMHx8ay5ib29sZWFuKGkub3B0aW9ucy5yZWN1cnNpdmUpKSYmKGkub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cz09PXZvaWQgMHx8ay5ib29sZWFuKGkub3B0aW9ucy5pZ25vcmVJZk5vdEV4aXN0cykpKSYmKGkuYW5ub3RhdGlvbklkPT09dm9pZCAwfHxFdC5pcyhpLmFubm90YXRpb25JZCkpfWUuaXM9bn0pKFZyfHwoVnI9e30pKTt2YXIgRHI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7bGV0IHI9bjtyZXR1cm4gciYmKHIuY2hhbmdlcyE9PXZvaWQgMHx8ci5kb2N1bWVudENoYW5nZXMhPT12b2lkIDApJiYoci5kb2N1bWVudENoYW5nZXM9PT12b2lkIDB8fHIuZG9jdW1lbnRDaGFuZ2VzLmV2ZXJ5KGk9Pmsuc3RyaW5nKGkua2luZCk/SXIuaXMoaSl8fEZyLmlzKGkpfHxWci5pcyhpKTpQci5pcyhpKSkpfWUuaXM9dH0pKERyfHwoRHI9e30pKTt2YXIga2E7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJue3VyaTpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5kZWZpbmVkKGkpJiZrLnN0cmluZyhpLnVyaSl9ZS5pcz1ufSkoa2F8fChrYT17fSkpO3ZhciBFYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt1cmk6cix2ZXJzaW9uOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBrLmRlZmluZWQoaSkmJmsuc3RyaW5nKGkudXJpKSYmay5pbnRlZ2VyKGkudmVyc2lvbil9ZS5pcz1ufSkoRWF8fChFYT17fSkpO3ZhciBPcjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe3JldHVybnt1cmk6cix2ZXJzaW9uOml9fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBrLmRlZmluZWQoaSkmJmsuc3RyaW5nKGkudXJpKSYmKGkudmVyc2lvbj09PW51bGx8fGsuaW50ZWdlcihpLnZlcnNpb24pKX1lLmlzPW59KShPcnx8KE9yPXt9KSk7dmFyIFJhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEpe3JldHVybnt1cmk6cixsYW5ndWFnZUlkOmksdmVyc2lvbjpzLHRleHQ6YX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIGsuZGVmaW5lZChpKSYmay5zdHJpbmcoaS51cmkpJiZrLnN0cmluZyhpLmxhbmd1YWdlSWQpJiZrLmludGVnZXIoaS52ZXJzaW9uKSYmay5zdHJpbmcoaS50ZXh0KX1lLmlzPW59KShSYXx8KFJhPXt9KSk7dmFyIGl0OyhmdW5jdGlvbihlKXtlLlBsYWluVGV4dD0icGxhaW50ZXh0IixlLk1hcmtkb3duPSJtYXJrZG93biI7ZnVuY3Rpb24gdChuKXtjb25zdCByPW47cmV0dXJuIHI9PT1lLlBsYWluVGV4dHx8cj09PWUuTWFya2Rvd259ZS5pcz10fSkoaXR8fChpdD17fSkpO3ZhciBYdDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtjb25zdCByPW47cmV0dXJuIGsub2JqZWN0TGl0ZXJhbChuKSYmaXQuaXMoci5raW5kKSYmay5zdHJpbmcoci52YWx1ZSl9ZS5pcz10fSkoWHR8fChYdD17fSkpO3ZhciB2ZTsoZnVuY3Rpb24oZSl7ZS5UZXh0PTEsZS5NZXRob2Q9MixlLkZ1bmN0aW9uPTMsZS5Db25zdHJ1Y3Rvcj00LGUuRmllbGQ9NSxlLlZhcmlhYmxlPTYsZS5DbGFzcz03LGUuSW50ZXJmYWNlPTgsZS5Nb2R1bGU9OSxlLlByb3BlcnR5PTEwLGUuVW5pdD0xMSxlLlZhbHVlPTEyLGUuRW51bT0xMyxlLktleXdvcmQ9MTQsZS5TbmlwcGV0PTE1LGUuQ29sb3I9MTYsZS5GaWxlPTE3LGUuUmVmZXJlbmNlPTE4LGUuRm9sZGVyPTE5LGUuRW51bU1lbWJlcj0yMCxlLkNvbnN0YW50PTIxLGUuU3RydWN0PTIyLGUuRXZlbnQ9MjMsZS5PcGVyYXRvcj0yNCxlLlR5cGVQYXJhbWV0ZXI9MjV9KSh2ZXx8KHZlPXt9KSk7dmFyIHJlOyhmdW5jdGlvbihlKXtlLlBsYWluVGV4dD0xLGUuU25pcHBldD0yfSkocmV8fChyZT17fSkpO3ZhciBNYTsoZnVuY3Rpb24oZSl7ZS5EZXByZWNhdGVkPTF9KShNYXx8KE1hPXt9KSk7dmFyIENhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXtyZXR1cm57bmV3VGV4dDpyLGluc2VydDppLHJlcGxhY2U6c319ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gaSYmay5zdHJpbmcoaS5uZXdUZXh0KSYmVS5pcyhpLmluc2VydCkmJlUuaXMoaS5yZXBsYWNlKX1lLmlzPW59KShDYXx8KENhPXt9KSk7dmFyIFRhOyhmdW5jdGlvbihlKXtlLmFzSXM9MSxlLmFkanVzdEluZGVudGF0aW9uPTJ9KShUYXx8KFRhPXt9KSk7dmFyIFBhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IHI9bjtyZXR1cm4gciYmKGsuc3RyaW5nKHIuZGV0YWlsKXx8ci5kZXRhaWw9PT12b2lkIDApJiYoay5zdHJpbmcoci5kZXNjcmlwdGlvbil8fHIuZGVzY3JpcHRpb249PT12b2lkIDApfWUuaXM9dH0pKFBhfHwoUGE9e30pKTt2YXIgQnI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2xhYmVsOm59fWUuY3JlYXRlPXR9KShCcnx8KEJyPXt9KSk7dmFyIElhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7cmV0dXJue2l0ZW1zOm58fFtdLGlzSW5jb21wbGV0ZTohIXJ9fWUuY3JlYXRlPXR9KShJYXx8KElhPXt9KSk7dmFyIFNuOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiByLnJlcGxhY2UoL1tcXGAqX3t9W1xdKCkjK1wtLiFdL2csIlxcJCYiKX1lLmZyb21QbGFpblRleHQ9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gay5zdHJpbmcoaSl8fGsub2JqZWN0TGl0ZXJhbChpKSYmay5zdHJpbmcoaS5sYW5ndWFnZSkmJmsuc3RyaW5nKGkudmFsdWUpfWUuaXM9bn0pKFNufHwoU249e30pKTt2YXIgRmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7bGV0IHI9bjtyZXR1cm4hIXImJmsub2JqZWN0TGl0ZXJhbChyKSYmKFh0LmlzKHIuY29udGVudHMpfHxTbi5pcyhyLmNvbnRlbnRzKXx8ay50eXBlZEFycmF5KHIuY29udGVudHMsU24uaXMpKSYmKG4ucmFuZ2U9PT12b2lkIDB8fFUuaXMobi5yYW5nZSkpfWUuaXM9dH0pKEZhfHwoRmE9e30pKTt2YXIgVmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXtyZXR1cm4gcj97bGFiZWw6bixkb2N1bWVudGF0aW9uOnJ9OntsYWJlbDpufX1lLmNyZWF0ZT10fSkoVmF8fChWYT17fSkpO3ZhciBEYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIsLi4uaSl7bGV0IHM9e2xhYmVsOm59O3JldHVybiBrLmRlZmluZWQocikmJihzLmRvY3VtZW50YXRpb249ciksay5kZWZpbmVkKGkpP3MucGFyYW1ldGVycz1pOnMucGFyYW1ldGVycz1bXSxzfWUuY3JlYXRlPXR9KShEYXx8KERhPXt9KSk7dmFyIE9hOyhmdW5jdGlvbihlKXtlLlRleHQ9MSxlLlJlYWQ9MixlLldyaXRlPTN9KShPYXx8KE9hPXt9KSk7dmFyIEJhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4scil7bGV0IGk9e3JhbmdlOm59O3JldHVybiBrLm51bWJlcihyKSYmKGkua2luZD1yKSxpfWUuY3JlYXRlPXR9KShCYXx8KEJhPXt9KSk7dmFyIEllOyhmdW5jdGlvbihlKXtlLkZpbGU9MSxlLk1vZHVsZT0yLGUuTmFtZXNwYWNlPTMsZS5QYWNrYWdlPTQsZS5DbGFzcz01LGUuTWV0aG9kPTYsZS5Qcm9wZXJ0eT03LGUuRmllbGQ9OCxlLkNvbnN0cnVjdG9yPTksZS5FbnVtPTEwLGUuSW50ZXJmYWNlPTExLGUuRnVuY3Rpb249MTIsZS5WYXJpYWJsZT0xMyxlLkNvbnN0YW50PTE0LGUuU3RyaW5nPTE1LGUuTnVtYmVyPTE2LGUuQm9vbGVhbj0xNyxlLkFycmF5PTE4LGUuT2JqZWN0PTE5LGUuS2V5PTIwLGUuTnVsbD0yMSxlLkVudW1NZW1iZXI9MjIsZS5TdHJ1Y3Q9MjMsZS5FdmVudD0yNCxlLk9wZXJhdG9yPTI1LGUuVHlwZVBhcmFtZXRlcj0yNn0pKEllfHwoSWU9e30pKTt2YXIgVWE7KGZ1bmN0aW9uKGUpe2UuRGVwcmVjYXRlZD0xfSkoVWF8fChVYT17fSkpO3ZhciBxYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIsaSxzLGEpe2xldCBsPXtuYW1lOm4sa2luZDpyLGxvY2F0aW9uOnt1cmk6cyxyYW5nZTppfX07cmV0dXJuIGEmJihsLmNvbnRhaW5lck5hbWU9YSksbH1lLmNyZWF0ZT10fSkocWF8fChxYT17fSkpO3ZhciAkYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIsaSxzKXtyZXR1cm4gcyE9PXZvaWQgMD97bmFtZTpuLGtpbmQ6cixsb2NhdGlvbjp7dXJpOmkscmFuZ2U6c319OntuYW1lOm4sa2luZDpyLGxvY2F0aW9uOnt1cmk6aX19fWUuY3JlYXRlPXR9KSgkYXx8KCRhPXt9KSk7dmFyIGphOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzLGEsbCxvKXtsZXQgdT17bmFtZTpyLGRldGFpbDppLGtpbmQ6cyxyYW5nZTphLHNlbGVjdGlvblJhbmdlOmx9O3JldHVybiBvIT09dm9pZCAwJiYodS5jaGlsZHJlbj1vKSx1fWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihyKXtsZXQgaT1yO3JldHVybiBpJiZrLnN0cmluZyhpLm5hbWUpJiZrLm51bWJlcihpLmtpbmQpJiZVLmlzKGkucmFuZ2UpJiZVLmlzKGkuc2VsZWN0aW9uUmFuZ2UpJiYoaS5kZXRhaWw9PT12b2lkIDB8fGsuc3RyaW5nKGkuZGV0YWlsKSkmJihpLmRlcHJlY2F0ZWQ9PT12b2lkIDB8fGsuYm9vbGVhbihpLmRlcHJlY2F0ZWQpKSYmKGkuY2hpbGRyZW49PT12b2lkIDB8fEFycmF5LmlzQXJyYXkoaS5jaGlsZHJlbikpJiYoaS50YWdzPT09dm9pZCAwfHxBcnJheS5pc0FycmF5KGkudGFncykpfWUuaXM9bn0pKGphfHwoamE9e30pKTt2YXIgSGE7KGZ1bmN0aW9uKGUpe2UuRW1wdHk9IiIsZS5RdWlja0ZpeD0icXVpY2tmaXgiLGUuUmVmYWN0b3I9InJlZmFjdG9yIixlLlJlZmFjdG9yRXh0cmFjdD0icmVmYWN0b3IuZXh0cmFjdCIsZS5SZWZhY3RvcklubGluZT0icmVmYWN0b3IuaW5saW5lIixlLlJlZmFjdG9yUmV3cml0ZT0icmVmYWN0b3IucmV3cml0ZSIsZS5Tb3VyY2U9InNvdXJjZSIsZS5Tb3VyY2VPcmdhbml6ZUltcG9ydHM9InNvdXJjZS5vcmdhbml6ZUltcG9ydHMiLGUuU291cmNlRml4QWxsPSJzb3VyY2UuZml4QWxsIn0pKEhhfHwoSGE9e30pKTt2YXIgQW47KGZ1bmN0aW9uKGUpe2UuSW52b2tlZD0xLGUuQXV0b21hdGljPTJ9KShBbnx8KEFuPXt9KSk7dmFyIFdhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXtsZXQgYT17ZGlhZ25vc3RpY3M6cn07cmV0dXJuIGkhPW51bGwmJihhLm9ubHk9aSkscyE9bnVsbCYmKGEudHJpZ2dlcktpbmQ9cyksYX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5kZWZpbmVkKGkpJiZrLnR5cGVkQXJyYXkoaS5kaWFnbm9zdGljcywkZS5pcykmJihpLm9ubHk9PT12b2lkIDB8fGsudHlwZWRBcnJheShpLm9ubHksay5zdHJpbmcpKSYmKGkudHJpZ2dlcktpbmQ9PT12b2lkIDB8fGkudHJpZ2dlcktpbmQ9PT1Bbi5JbnZva2VkfHxpLnRyaWdnZXJLaW5kPT09QW4uQXV0b21hdGljKX1lLmlzPW59KShXYXx8KFdhPXt9KSk7dmFyIHphOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXtsZXQgYT17dGl0bGU6cn0sbD0hMDtyZXR1cm4gdHlwZW9mIGk9PSJzdHJpbmciPyhsPSExLGEua2luZD1pKTprdC5pcyhpKT9hLmNvbW1hbmQ9aTphLmVkaXQ9aSxsJiZzIT09dm9pZCAwJiYoYS5raW5kPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIGkmJmsuc3RyaW5nKGkudGl0bGUpJiYoaS5kaWFnbm9zdGljcz09PXZvaWQgMHx8ay50eXBlZEFycmF5KGkuZGlhZ25vc3RpY3MsJGUuaXMpKSYmKGkua2luZD09PXZvaWQgMHx8ay5zdHJpbmcoaS5raW5kKSkmJihpLmVkaXQhPT12b2lkIDB8fGkuY29tbWFuZCE9PXZvaWQgMCkmJihpLmNvbW1hbmQ9PT12b2lkIDB8fGt0LmlzKGkuY29tbWFuZCkpJiYoaS5pc1ByZWZlcnJlZD09PXZvaWQgMHx8ay5ib29sZWFuKGkuaXNQcmVmZXJyZWQpKSYmKGkuZWRpdD09PXZvaWQgMHx8RHIuaXMoaS5lZGl0KSl9ZS5pcz1ufSkoemF8fCh6YT17fSkpO3ZhciBHYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkpe2xldCBzPXtyYW5nZTpyfTtyZXR1cm4gay5kZWZpbmVkKGkpJiYocy5kYXRhPWkpLHN9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIGsuZGVmaW5lZChpKSYmVS5pcyhpLnJhbmdlKSYmKGsudW5kZWZpbmVkKGkuY29tbWFuZCl8fGt0LmlzKGkuY29tbWFuZCkpfWUuaXM9bn0pKEdhfHwoR2E9e30pKTt2YXIgSmE7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57dGFiU2l6ZTpyLGluc2VydFNwYWNlczppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5kZWZpbmVkKGkpJiZrLnVpbnRlZ2VyKGkudGFiU2l6ZSkmJmsuYm9vbGVhbihpLmluc2VydFNwYWNlcyl9ZS5pcz1ufSkoSmF8fChKYT17fSkpO3ZhciBYYTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyLGkscyl7cmV0dXJue3JhbmdlOnIsdGFyZ2V0OmksZGF0YTpzfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7bGV0IGk9cjtyZXR1cm4gay5kZWZpbmVkKGkpJiZVLmlzKGkucmFuZ2UpJiYoay51bmRlZmluZWQoaS50YXJnZXQpfHxrLnN0cmluZyhpLnRhcmdldCkpfWUuaXM9bn0pKFhhfHwoWGE9e30pKTt2YXIga247KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpKXtyZXR1cm57cmFuZ2U6cixwYXJlbnQ6aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2xldCBpPXI7cmV0dXJuIGsub2JqZWN0TGl0ZXJhbChpKSYmVS5pcyhpLnJhbmdlKSYmKGkucGFyZW50PT09dm9pZCAwfHxlLmlzKGkucGFyZW50KSl9ZS5pcz1ufSkoa258fChrbj17fSkpO3ZhciBRYTsoZnVuY3Rpb24oZSl7ZS5uYW1lc3BhY2U9Im5hbWVzcGFjZSIsZS50eXBlPSJ0eXBlIixlLmNsYXNzPSJjbGFzcyIsZS5lbnVtPSJlbnVtIixlLmludGVyZmFjZT0iaW50ZXJmYWNlIixlLnN0cnVjdD0ic3RydWN0IixlLnR5cGVQYXJhbWV0ZXI9InR5cGVQYXJhbWV0ZXIiLGUucGFyYW1ldGVyPSJwYXJhbWV0ZXIiLGUudmFyaWFibGU9InZhcmlhYmxlIixlLnByb3BlcnR5PSJwcm9wZXJ0eSIsZS5lbnVtTWVtYmVyPSJlbnVtTWVtYmVyIixlLmV2ZW50PSJldmVudCIsZS5mdW5jdGlvbj0iZnVuY3Rpb24iLGUubWV0aG9kPSJtZXRob2QiLGUubWFjcm89Im1hY3JvIixlLmtleXdvcmQ9ImtleXdvcmQiLGUubW9kaWZpZXI9Im1vZGlmaWVyIixlLmNvbW1lbnQ9ImNvbW1lbnQiLGUuc3RyaW5nPSJzdHJpbmciLGUubnVtYmVyPSJudW1iZXIiLGUucmVnZXhwPSJyZWdleHAiLGUub3BlcmF0b3I9Im9wZXJhdG9yIixlLmRlY29yYXRvcj0iZGVjb3JhdG9yIn0pKFFhfHwoUWE9e30pKTt2YXIgWmE7KGZ1bmN0aW9uKGUpe2UuZGVjbGFyYXRpb249ImRlY2xhcmF0aW9uIixlLmRlZmluaXRpb249ImRlZmluaXRpb24iLGUucmVhZG9ubHk9InJlYWRvbmx5IixlLnN0YXRpYz0ic3RhdGljIixlLmRlcHJlY2F0ZWQ9ImRlcHJlY2F0ZWQiLGUuYWJzdHJhY3Q9ImFic3RyYWN0IixlLmFzeW5jPSJhc3luYyIsZS5tb2RpZmljYXRpb249Im1vZGlmaWNhdGlvbiIsZS5kb2N1bWVudGF0aW9uPSJkb2N1bWVudGF0aW9uIixlLmRlZmF1bHRMaWJyYXJ5PSJkZWZhdWx0TGlicmFyeSJ9KShaYXx8KFphPXt9KSk7dmFyIFlhOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IHI9bjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKHIpJiYoci5yZXN1bHRJZD09PXZvaWQgMHx8dHlwZW9mIHIucmVzdWx0SWQ9PSJzdHJpbmciKSYmQXJyYXkuaXNBcnJheShyLmRhdGEpJiYoci5kYXRhLmxlbmd0aD09PTB8fHR5cGVvZiByLmRhdGFbMF09PSJudW1iZXIiKX1lLmlzPXR9KShZYXx8KFlhPXt9KSk7dmFyIEthOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue3JhbmdlOnIsdGV4dDppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7Y29uc3QgaT1yO3JldHVybiBpIT1udWxsJiZVLmlzKGkucmFuZ2UpJiZrLnN0cmluZyhpLnRleHQpfWUuaXM9bn0pKEthfHwoS2E9e30pKTt2YXIgZW87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixpLHMpe3JldHVybntyYW5nZTpyLHZhcmlhYmxlTmFtZTppLGNhc2VTZW5zaXRpdmVMb29rdXA6c319ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gaSE9bnVsbCYmVS5pcyhpLnJhbmdlKSYmay5ib29sZWFuKGkuY2FzZVNlbnNpdGl2ZUxvb2t1cCkmJihrLnN0cmluZyhpLnZhcmlhYmxlTmFtZSl8fGkudmFyaWFibGVOYW1lPT09dm9pZCAwKX1lLmlzPW59KShlb3x8KGVvPXt9KSk7dmFyIHRvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue3JhbmdlOnIsZXhwcmVzc2lvbjppfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7Y29uc3QgaT1yO3JldHVybiBpIT1udWxsJiZVLmlzKGkucmFuZ2UpJiYoay5zdHJpbmcoaS5leHByZXNzaW9uKXx8aS5leHByZXNzaW9uPT09dm9pZCAwKX1lLmlzPW59KSh0b3x8KHRvPXt9KSk7dmFyIG5vOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSl7cmV0dXJue2ZyYW1lSWQ6cixzdG9wcGVkTG9jYXRpb246aX19ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gay5kZWZpbmVkKGkpJiZVLmlzKHIuc3RvcHBlZExvY2F0aW9uKX1lLmlzPW59KShub3x8KG5vPXt9KSk7dmFyIFVyOyhmdW5jdGlvbihlKXtlLlR5cGU9MSxlLlBhcmFtZXRlcj0yO2Z1bmN0aW9uIHQobil7cmV0dXJuIG49PT0xfHxuPT09Mn1lLmlzPXR9KShVcnx8KFVyPXt9KSk7dmFyIHFyOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybnt2YWx1ZTpyfX1lLmNyZWF0ZT10O2Z1bmN0aW9uIG4ocil7Y29uc3QgaT1yO3JldHVybiBrLm9iamVjdExpdGVyYWwoaSkmJihpLnRvb2x0aXA9PT12b2lkIDB8fGsuc3RyaW5nKGkudG9vbHRpcCl8fFh0LmlzKGkudG9vbHRpcCkpJiYoaS5sb2NhdGlvbj09PXZvaWQgMHx8QXQuaXMoaS5sb2NhdGlvbikpJiYoaS5jb21tYW5kPT09dm9pZCAwfHxrdC5pcyhpLmNvbW1hbmQpKX1lLmlzPW59KShxcnx8KHFyPXt9KSk7dmFyIHJvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIsaSxzKXtjb25zdCBhPXtwb3NpdGlvbjpyLGxhYmVsOml9O3JldHVybiBzIT09dm9pZCAwJiYoYS5raW5kPXMpLGF9ZS5jcmVhdGU9dDtmdW5jdGlvbiBuKHIpe2NvbnN0IGk9cjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKGkpJiZZLmlzKGkucG9zaXRpb24pJiYoay5zdHJpbmcoaS5sYWJlbCl8fGsudHlwZWRBcnJheShpLmxhYmVsLHFyLmlzKSkmJihpLmtpbmQ9PT12b2lkIDB8fFVyLmlzKGkua2luZCkpJiZpLnRleHRFZGl0cz09PXZvaWQgMHx8ay50eXBlZEFycmF5KGkudGV4dEVkaXRzLFBlLmlzKSYmKGkudG9vbHRpcD09PXZvaWQgMHx8ay5zdHJpbmcoaS50b29sdGlwKXx8WHQuaXMoaS50b29sdGlwKSkmJihpLnBhZGRpbmdMZWZ0PT09dm9pZCAwfHxrLmJvb2xlYW4oaS5wYWRkaW5nTGVmdCkpJiYoaS5wYWRkaW5nUmlnaHQ9PT12b2lkIDB8fGsuYm9vbGVhbihpLnBhZGRpbmdSaWdodCkpfWUuaXM9bn0pKHJvfHwocm89e30pKTt2YXIgaW87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2tpbmQ6InNuaXBwZXQiLHZhbHVlOm59fWUuY3JlYXRlU25pcHBldD10fSkoaW98fChpbz17fSkpO3ZhciBzbzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIsaSxzKXtyZXR1cm57aW5zZXJ0VGV4dDpuLGZpbHRlclRleHQ6cixyYW5nZTppLGNvbW1hbmQ6c319ZS5jcmVhdGU9dH0pKHNvfHwoc289e30pKTt2YXIgYW87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJue2l0ZW1zOm59fWUuY3JlYXRlPXR9KShhb3x8KGFvPXt9KSk7dmFyIG9vOyhmdW5jdGlvbihlKXtlLkludm9rZWQ9MCxlLkF1dG9tYXRpYz0xfSkob298fChvbz17fSkpO3ZhciBsbzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuLHIpe3JldHVybntyYW5nZTpuLHRleHQ6cn19ZS5jcmVhdGU9dH0pKGxvfHwobG89e30pKTt2YXIgdW87KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobixyKXtyZXR1cm57dHJpZ2dlcktpbmQ6bixzZWxlY3RlZENvbXBsZXRpb25JbmZvOnJ9fWUuY3JlYXRlPXR9KSh1b3x8KHVvPXt9KSk7dmFyIGNvOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG4pe2NvbnN0IHI9bjtyZXR1cm4gay5vYmplY3RMaXRlcmFsKHIpJiZSci5pcyhyLnVyaSkmJmsuc3RyaW5nKHIubmFtZSl9ZS5pcz10fSkoY298fChjbz17fSkpO3ZhciBmbzsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChzLGEsbCxvKXtyZXR1cm4gbmV3IF9jKHMsYSxsLG8pfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihzKXtsZXQgYT1zO3JldHVybiEhKGsuZGVmaW5lZChhKSYmay5zdHJpbmcoYS51cmkpJiYoay51bmRlZmluZWQoYS5sYW5ndWFnZUlkKXx8ay5zdHJpbmcoYS5sYW5ndWFnZUlkKSkmJmsudWludGVnZXIoYS5saW5lQ291bnQpJiZrLmZ1bmMoYS5nZXRUZXh0KSYmay5mdW5jKGEucG9zaXRpb25BdCkmJmsuZnVuYyhhLm9mZnNldEF0KSl9ZS5pcz1uO2Z1bmN0aW9uIHIocyxhKXtsZXQgbD1zLmdldFRleHQoKSxvPWkoYSwoaCxjKT0+e2xldCBkPWgucmFuZ2Uuc3RhcnQubGluZS1jLnJhbmdlLnN0YXJ0LmxpbmU7cmV0dXJuIGQ9PT0wP2gucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyLWMucmFuZ2Uuc3RhcnQuY2hhcmFjdGVyOmR9KSx1PWwubGVuZ3RoO2ZvcihsZXQgaD1vLmxlbmd0aC0xO2g+PTA7aC0tKXtsZXQgYz1vW2hdLGQ9cy5vZmZzZXRBdChjLnJhbmdlLnN0YXJ0KSxtPXMub2Zmc2V0QXQoYy5yYW5nZS5lbmQpO2lmKG08PXUpbD1sLnN1YnN0cmluZygwLGQpK2MubmV3VGV4dCtsLnN1YnN0cmluZyhtLGwubGVuZ3RoKTtlbHNlIHRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO3U9ZH1yZXR1cm4gbH1lLmFwcGx5RWRpdHM9cjtmdW5jdGlvbiBpKHMsYSl7aWYocy5sZW5ndGg8PTEpcmV0dXJuIHM7Y29uc3QgbD1zLmxlbmd0aC8yfDAsbz1zLnNsaWNlKDAsbCksdT1zLnNsaWNlKGwpO2kobyxhKSxpKHUsYSk7bGV0IGg9MCxjPTAsZD0wO2Zvcig7aDxvLmxlbmd0aCYmYzx1Lmxlbmd0aDspYShvW2hdLHVbY10pPD0wP3NbZCsrXT1vW2grK106c1tkKytdPXVbYysrXTtmb3IoO2g8by5sZW5ndGg7KXNbZCsrXT1vW2grK107Zm9yKDtjPHUubGVuZ3RoOylzW2QrK109dVtjKytdO3JldHVybiBzfX0pKGZvfHwoZm89e30pKTt2YXIgX2M9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4scil7dGhpcy5fdXJpPWUsdGhpcy5fbGFuZ3VhZ2VJZD10LHRoaXMuX3ZlcnNpb249bix0aGlzLl9jb250ZW50PXIsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBsYW5ndWFnZUlkKCl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlSWR9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbn1nZXRUZXh0KGUpe2lmKGUpe2xldCB0PXRoaXMub2Zmc2V0QXQoZS5zdGFydCksbj10aGlzLm9mZnNldEF0KGUuZW5kKTtyZXR1cm4gdGhpcy5fY29udGVudC5zdWJzdHJpbmcodCxuKX1yZXR1cm4gdGhpcy5fY29udGVudH11cGRhdGUoZSx0KXt0aGlzLl9jb250ZW50PWUudGV4dCx0aGlzLl92ZXJzaW9uPXQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwfWdldExpbmVPZmZzZXRzKCl7aWYodGhpcy5fbGluZU9mZnNldHM9PT12b2lkIDApe2xldCBlPVtdLHQ9dGhpcy5fY29udGVudCxuPSEwO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKXtuJiYoZS5wdXNoKHIpLG49ITEpO2xldCBpPXQuY2hhckF0KHIpO249aT09PSJcciJ8fGk9PT1gCmAsaT09PSJcciImJnIrMTx0Lmxlbmd0aCYmdC5jaGFyQXQocisxKT09PWAKYCYmcisrfW4mJnQubGVuZ3RoPjAmJmUucHVzaCh0Lmxlbmd0aCksdGhpcy5fbGluZU9mZnNldHM9ZX1yZXR1cm4gdGhpcy5fbGluZU9mZnNldHN9cG9zaXRpb25BdChlKXtlPU1hdGgubWF4KE1hdGgubWluKGUsdGhpcy5fY29udGVudC5sZW5ndGgpLDApO2xldCB0PXRoaXMuZ2V0TGluZU9mZnNldHMoKSxuPTAscj10Lmxlbmd0aDtpZihyPT09MClyZXR1cm4gWS5jcmVhdGUoMCxlKTtmb3IoO248cjspe2xldCBzPU1hdGguZmxvb3IoKG4rcikvMik7dFtzXT5lP3I9czpuPXMrMX1sZXQgaT1uLTE7cmV0dXJuIFkuY3JlYXRlKGksZS10W2ldKX1vZmZzZXRBdChlKXtsZXQgdD10aGlzLmdldExpbmVPZmZzZXRzKCk7aWYoZS5saW5lPj10Lmxlbmd0aClyZXR1cm4gdGhpcy5fY29udGVudC5sZW5ndGg7aWYoZS5saW5lPDApcmV0dXJuIDA7bGV0IG49dFtlLmxpbmVdLHI9ZS5saW5lKzE8dC5sZW5ndGg/dFtlLmxpbmUrMV06dGhpcy5fY29udGVudC5sZW5ndGg7cmV0dXJuIE1hdGgubWF4KE1hdGgubWluKG4rZS5jaGFyYWN0ZXIsciksbil9Z2V0IGxpbmVDb3VudCgpe3JldHVybiB0aGlzLmdldExpbmVPZmZzZXRzKCkubGVuZ3RofX0sazsoZnVuY3Rpb24oZSl7Y29uc3QgdD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIG4obSl7cmV0dXJuIHR5cGVvZiBtPCJ1In1lLmRlZmluZWQ9bjtmdW5jdGlvbiByKG0pe3JldHVybiB0eXBlb2YgbT4idSJ9ZS51bmRlZmluZWQ9cjtmdW5jdGlvbiBpKG0pe3JldHVybiBtPT09ITB8fG09PT0hMX1lLmJvb2xlYW49aTtmdW5jdGlvbiBzKG0pe3JldHVybiB0LmNhbGwobSk9PT0iW29iamVjdCBTdHJpbmddIn1lLnN0cmluZz1zO2Z1bmN0aW9uIGEobSl7cmV0dXJuIHQuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0ifWUubnVtYmVyPWE7ZnVuY3Rpb24gbChtLGcscCl7cmV0dXJuIHQuY2FsbChtKT09PSJbb2JqZWN0IE51bWJlcl0iJiZnPD1tJiZtPD1wfWUubnVtYmVyUmFuZ2U9bDtmdW5jdGlvbiBvKG0pe3JldHVybiB0LmNhbGwobSk9PT0iW29iamVjdCBOdW1iZXJdIiYmLTIxNDc0ODM2NDg8PW0mJm08PTIxNDc0ODM2NDd9ZS5pbnRlZ2VyPW87ZnVuY3Rpb24gdShtKXtyZXR1cm4gdC5jYWxsKG0pPT09IltvYmplY3QgTnVtYmVyXSImJjA8PW0mJm08PTIxNDc0ODM2NDd9ZS51aW50ZWdlcj11O2Z1bmN0aW9uIGgobSl7cmV0dXJuIHQuY2FsbChtKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9ZS5mdW5jPWg7ZnVuY3Rpb24gYyhtKXtyZXR1cm4gbSE9PW51bGwmJnR5cGVvZiBtPT0ib2JqZWN0In1lLm9iamVjdExpdGVyYWw9YztmdW5jdGlvbiBkKG0sZyl7cmV0dXJuIEFycmF5LmlzQXJyYXkobSkmJm0uZXZlcnkoZyl9ZS50eXBlZEFycmF5PWR9KShrfHwoaz17fSkpO3ZhciBobz1jbGFzcyBLcntjb25zdHJ1Y3Rvcih0LG4scixpKXt0aGlzLl91cmk9dCx0aGlzLl9sYW5ndWFnZUlkPW4sdGhpcy5fdmVyc2lvbj1yLHRoaXMuX2NvbnRlbnQ9aSx0aGlzLl9saW5lT2Zmc2V0cz12b2lkIDB9Z2V0IHVyaSgpe3JldHVybiB0aGlzLl91cml9Z2V0IGxhbmd1YWdlSWQoKXtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VJZH1nZXQgdmVyc2lvbigpe3JldHVybiB0aGlzLl92ZXJzaW9ufWdldFRleHQodCl7aWYodCl7Y29uc3Qgbj10aGlzLm9mZnNldEF0KHQuc3RhcnQpLHI9dGhpcy5vZmZzZXRBdCh0LmVuZCk7cmV0dXJuIHRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKG4scil9cmV0dXJuIHRoaXMuX2NvbnRlbnR9dXBkYXRlKHQsbil7Zm9yKGxldCByIG9mIHQpaWYoS3IuaXNJbmNyZW1lbnRhbChyKSl7Y29uc3QgaT1nbyhyLnJhbmdlKSxzPXRoaXMub2Zmc2V0QXQoaS5zdGFydCksYT10aGlzLm9mZnNldEF0KGkuZW5kKTt0aGlzLl9jb250ZW50PXRoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKDAscykrci50ZXh0K3RoaXMuX2NvbnRlbnQuc3Vic3RyaW5nKGEsdGhpcy5fY29udGVudC5sZW5ndGgpO2NvbnN0IGw9TWF0aC5tYXgoaS5zdGFydC5saW5lLDApLG89TWF0aC5tYXgoaS5lbmQubGluZSwwKTtsZXQgdT10aGlzLl9saW5lT2Zmc2V0cztjb25zdCBoPW1vKHIudGV4dCwhMSxzKTtpZihvLWw9PT1oLmxlbmd0aClmb3IobGV0IGQ9MCxtPWgubGVuZ3RoO2Q8bTtkKyspdVtkK2wrMV09aFtkXTtlbHNlIGgubGVuZ3RoPDFlND91LnNwbGljZShsKzEsby1sLC4uLmgpOnRoaXMuX2xpbmVPZmZzZXRzPXU9dS5zbGljZSgwLGwrMSkuY29uY2F0KGgsdS5zbGljZShvKzEpKTtjb25zdCBjPXIudGV4dC5sZW5ndGgtKGEtcyk7aWYoYyE9PTApZm9yKGxldCBkPWwrMStoLmxlbmd0aCxtPXUubGVuZ3RoO2Q8bTtkKyspdVtkXT11W2RdK2N9ZWxzZSBpZihLci5pc0Z1bGwocikpdGhpcy5fY29udGVudD1yLnRleHQsdGhpcy5fbGluZU9mZnNldHM9dm9pZCAwO2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNoYW5nZSBldmVudCByZWNlaXZlZCIpO3RoaXMuX3ZlcnNpb249bn1nZXRMaW5lT2Zmc2V0cygpe3JldHVybiB0aGlzLl9saW5lT2Zmc2V0cz09PXZvaWQgMCYmKHRoaXMuX2xpbmVPZmZzZXRzPW1vKHRoaXMuX2NvbnRlbnQsITApKSx0aGlzLl9saW5lT2Zmc2V0c31wb3NpdGlvbkF0KHQpe3Q9TWF0aC5tYXgoTWF0aC5taW4odCx0aGlzLl9jb250ZW50Lmxlbmd0aCksMCk7bGV0IG49dGhpcy5nZXRMaW5lT2Zmc2V0cygpLHI9MCxpPW4ubGVuZ3RoO2lmKGk9PT0wKXJldHVybntsaW5lOjAsY2hhcmFjdGVyOnR9O2Zvcig7cjxpOyl7bGV0IGE9TWF0aC5mbG9vcigocitpKS8yKTtuW2FdPnQ/aT1hOnI9YSsxfWxldCBzPXItMTtyZXR1cm57bGluZTpzLGNoYXJhY3Rlcjp0LW5bc119fW9mZnNldEF0KHQpe2xldCBuPXRoaXMuZ2V0TGluZU9mZnNldHMoKTtpZih0LmxpbmU+PW4ubGVuZ3RoKXJldHVybiB0aGlzLl9jb250ZW50Lmxlbmd0aDtpZih0LmxpbmU8MClyZXR1cm4gMDtsZXQgcj1uW3QubGluZV0saT10LmxpbmUrMTxuLmxlbmd0aD9uW3QubGluZSsxXTp0aGlzLl9jb250ZW50Lmxlbmd0aDtyZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4ocit0LmNoYXJhY3RlcixpKSxyKX1nZXQgbGluZUNvdW50KCl7cmV0dXJuIHRoaXMuZ2V0TGluZU9mZnNldHMoKS5sZW5ndGh9c3RhdGljIGlzSW5jcmVtZW50YWwodCl7bGV0IG49dDtyZXR1cm4gbiE9bnVsbCYmdHlwZW9mIG4udGV4dD09InN0cmluZyImJm4ucmFuZ2UhPT12b2lkIDAmJihuLnJhbmdlTGVuZ3RoPT09dm9pZCAwfHx0eXBlb2Ygbi5yYW5nZUxlbmd0aD09Im51bWJlciIpfXN0YXRpYyBpc0Z1bGwodCl7bGV0IG49dDtyZXR1cm4gbiE9bnVsbCYmdHlwZW9mIG4udGV4dD09InN0cmluZyImJm4ucmFuZ2U9PT12b2lkIDAmJm4ucmFuZ2VMZW5ndGg9PT12b2lkIDB9fSxrZTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpLHMsYSxsKXtyZXR1cm4gbmV3IGhvKGkscyxhLGwpfWUuY3JlYXRlPXQ7ZnVuY3Rpb24gbihpLHMsYSl7aWYoaSBpbnN0YW5jZW9mIGhvKXJldHVybiBpLnVwZGF0ZShzLGEpLGk7dGhyb3cgbmV3IEVycm9yKCJUZXh0RG9jdW1lbnQudXBkYXRlOiBkb2N1bWVudCBtdXN0IGJlIGNyZWF0ZWQgYnkgVGV4dERvY3VtZW50LmNyZWF0ZSIpfWUudXBkYXRlPW47ZnVuY3Rpb24gcihpLHMpe2xldCBhPWkuZ2V0VGV4dCgpLGw9JHIocy5tYXAoTGMpLChoLGMpPT57bGV0IGQ9aC5yYW5nZS5zdGFydC5saW5lLWMucmFuZ2Uuc3RhcnQubGluZTtyZXR1cm4gZD09PTA/aC5yYW5nZS5zdGFydC5jaGFyYWN0ZXItYy5yYW5nZS5zdGFydC5jaGFyYWN0ZXI6ZH0pLG89MDtjb25zdCB1PVtdO2Zvcihjb25zdCBoIG9mIGwpe2xldCBjPWkub2Zmc2V0QXQoaC5yYW5nZS5zdGFydCk7aWYoYzxvKXRocm93IG5ldyBFcnJvcigiT3ZlcmxhcHBpbmcgZWRpdCIpO2M+byYmdS5wdXNoKGEuc3Vic3RyaW5nKG8sYykpLGgubmV3VGV4dC5sZW5ndGgmJnUucHVzaChoLm5ld1RleHQpLG89aS5vZmZzZXRBdChoLnJhbmdlLmVuZCl9cmV0dXJuIHUucHVzaChhLnN1YnN0cihvKSksdS5qb2luKCIiKX1lLmFwcGx5RWRpdHM9cn0pKGtlfHwoa2U9e30pKTtmdW5jdGlvbiAkcihlLHQpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IG49ZS5sZW5ndGgvMnwwLHI9ZS5zbGljZSgwLG4pLGk9ZS5zbGljZShuKTskcihyLHQpLCRyKGksdCk7bGV0IHM9MCxhPTAsbD0wO2Zvcig7czxyLmxlbmd0aCYmYTxpLmxlbmd0aDspdChyW3NdLGlbYV0pPD0wP2VbbCsrXT1yW3MrK106ZVtsKytdPWlbYSsrXTtmb3IoO3M8ci5sZW5ndGg7KWVbbCsrXT1yW3MrK107Zm9yKDthPGkubGVuZ3RoOyllW2wrK109aVthKytdO3JldHVybiBlfWZ1bmN0aW9uIG1vKGUsdCxuPTApe2NvbnN0IHI9dD9bbl06W107Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2xldCBzPWUuY2hhckNvZGVBdChpKTsocz09PTEzfHxzPT09MTApJiYocz09PTEzJiZpKzE8ZS5sZW5ndGgmJmUuY2hhckNvZGVBdChpKzEpPT09MTAmJmkrKyxyLnB1c2gobitpKzEpKX1yZXR1cm4gcn1mdW5jdGlvbiBnbyhlKXtjb25zdCB0PWUuc3RhcnQsbj1lLmVuZDtyZXR1cm4gdC5saW5lPm4ubGluZXx8dC5saW5lPT09bi5saW5lJiZ0LmNoYXJhY3Rlcj5uLmNoYXJhY3Rlcj97c3RhcnQ6bixlbmQ6dH06ZX1mdW5jdGlvbiBMYyhlKXtjb25zdCB0PWdvKGUucmFuZ2UpO3JldHVybiB0IT09ZS5yYW5nZT97bmV3VGV4dDplLm5ld1RleHQscmFuZ2U6dH06ZX12YXIgSDsoZnVuY3Rpb24oZSl7ZVtlLlVuZGVmaW5lZD0wXT0iVW5kZWZpbmVkIixlW2UuRW51bVZhbHVlTWlzbWF0Y2g9MV09IkVudW1WYWx1ZU1pc21hdGNoIixlW2UuRGVwcmVjYXRlZD0yXT0iRGVwcmVjYXRlZCIsZVtlLlVuZXhwZWN0ZWRFbmRPZkNvbW1lbnQ9MjU3XT0iVW5leHBlY3RlZEVuZE9mQ29tbWVudCIsZVtlLlVuZXhwZWN0ZWRFbmRPZlN0cmluZz0yNThdPSJVbmV4cGVjdGVkRW5kT2ZTdHJpbmciLGVbZS5VbmV4cGVjdGVkRW5kT2ZOdW1iZXI9MjU5XT0iVW5leHBlY3RlZEVuZE9mTnVtYmVyIixlW2UuSW52YWxpZFVuaWNvZGU9MjYwXT0iSW52YWxpZFVuaWNvZGUiLGVbZS5JbnZhbGlkRXNjYXBlQ2hhcmFjdGVyPTI2MV09IkludmFsaWRFc2NhcGVDaGFyYWN0ZXIiLGVbZS5JbnZhbGlkQ2hhcmFjdGVyPTI2Ml09IkludmFsaWRDaGFyYWN0ZXIiLGVbZS5Qcm9wZXJ0eUV4cGVjdGVkPTUxM109IlByb3BlcnR5RXhwZWN0ZWQiLGVbZS5Db21tYUV4cGVjdGVkPTUxNF09IkNvbW1hRXhwZWN0ZWQiLGVbZS5Db2xvbkV4cGVjdGVkPTUxNV09IkNvbG9uRXhwZWN0ZWQiLGVbZS5WYWx1ZUV4cGVjdGVkPTUxNl09IlZhbHVlRXhwZWN0ZWQiLGVbZS5Db21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZD01MTddPSJDb21tYU9yQ2xvc2VCYWNrZXRFeHBlY3RlZCIsZVtlLkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQ9NTE4XT0iQ29tbWFPckNsb3NlQnJhY2VFeHBlY3RlZCIsZVtlLlRyYWlsaW5nQ29tbWE9NTE5XT0iVHJhaWxpbmdDb21tYSIsZVtlLkR1cGxpY2F0ZUtleT01MjBdPSJEdXBsaWNhdGVLZXkiLGVbZS5Db21tZW50Tm90UGVybWl0dGVkPTUyMV09IkNvbW1lbnROb3RQZXJtaXR0ZWQiLGVbZS5Qcm9wZXJ0eUtleXNNdXN0QmVEb3VibGVxdW90ZWQ9NTI4XT0iUHJvcGVydHlLZXlzTXVzdEJlRG91YmxlcXVvdGVkIixlW2UuU2NoZW1hUmVzb2x2ZUVycm9yPTc2OF09IlNjaGVtYVJlc29sdmVFcnJvciIsZVtlLlNjaGVtYVVuc3VwcG9ydGVkRmVhdHVyZT03NjldPSJTY2hlbWFVbnN1cHBvcnRlZEZlYXR1cmUifSkoSHx8KEg9e30pKTt2YXIgRWU7KGZ1bmN0aW9uKGUpe2VbZS52Mz0zXT0idjMiLGVbZS52ND00XT0idjQiLGVbZS52Nj02XT0idjYiLGVbZS52Nz03XT0idjciLGVbZS52MjAxOV8wOT0xOV09InYyMDE5XzA5IixlW2UudjIwMjBfMTI9MjBdPSJ2MjAyMF8xMiJ9KShFZXx8KEVlPXt9KSk7dmFyIGpyOyhmdW5jdGlvbihlKXtlLkxBVEVTVD17dGV4dERvY3VtZW50Ontjb21wbGV0aW9uOntjb21wbGV0aW9uSXRlbTp7ZG9jdW1lbnRhdGlvbkZvcm1hdDpbaXQuTWFya2Rvd24saXQuUGxhaW5UZXh0XSxjb21taXRDaGFyYWN0ZXJzU3VwcG9ydDohMCxsYWJlbERldGFpbHNTdXBwb3J0OiEwfX19fX0pKGpyfHwoanI9e30pKTtmdW5jdGlvbiBFKC4uLmUpe2NvbnN0IHQ9ZVswXTtsZXQgbixyLGk7aWYodHlwZW9mIHQ9PSJzdHJpbmciKW49dCxyPXQsZS5zcGxpY2UoMCwxKSxpPSFlfHx0eXBlb2YgZVswXSE9Im9iamVjdCI/ZTplWzBdO2Vsc2UgaWYodCBpbnN0YW5jZW9mIEFycmF5KXtjb25zdCBzPWUuc2xpY2UoMSk7aWYodC5sZW5ndGghPT1zLmxlbmd0aCsxKXRocm93IG5ldyBFcnJvcigiZXhwZWN0ZWQgYSBzdHJpbmcgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIGwxMG4udCIpO2xldCBhPXRbMF07Zm9yKGxldCBsPTE7bDx0Lmxlbmd0aDtsKyspYSs9YHske2wtMX19YCt0W2xdO3JldHVybiBFKGEsLi4ucyl9ZWxzZSByPXQubWVzc2FnZSxuPXIsdC5jb21tZW50JiZ0LmNvbW1lbnQubGVuZ3RoPjAmJihuKz1gLyR7QXJyYXkuaXNBcnJheSh0LmNvbW1lbnQpP3QuY29tbWVudC5qb2luKCIiKTp0LmNvbW1lbnR9YCksaT10LmFyZ3M/P3t9O3JldHVybiBTYyhyLGkpfXZhciBOYz0veyhbXn1dKyl9L2c7ZnVuY3Rpb24gU2MoZSx0KXtyZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoPT09MD9lOmUucmVwbGFjZShOYywobixyKT0+dFtyXT8/bil9dmFyIEFjPXsiY29sb3ItaGV4Ijp7ZXJyb3JNZXNzYWdlOkUoIkludmFsaWQgY29sb3IgZm9ybWF0LiBVc2UgI1JHQiwgI1JHQkEsICNSUkdHQkIgb3IgI1JSR0dCQkFBLiIpLHBhdHRlcm46L14jKFswLTlBLUZhLWZdezMsNH18KFswLTlBLUZhLWZdezJ9KXszLDR9KSQvfSwiZGF0ZS10aW1lIjp7ZXJyb3JNZXNzYWdlOkUoIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUtdGltZS4iKSxwYXR0ZXJuOi9eKFxkezR9KS0oMFsxLTldfDFbMC0yXSktKDBbMS05XXxbMTJdWzAtOV18M1swMV0pVChbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZGF0ZTp7ZXJyb3JNZXNzYWdlOkUoIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IGRhdGUuIikscGF0dGVybjovXihcZHs0fSktKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18WzEyXVswLTldfDNbMDFdKSQvaX0sdGltZTp7ZXJyb3JNZXNzYWdlOkUoIlN0cmluZyBpcyBub3QgYSBSRkMzMzM5IHRpbWUuIikscGF0dGVybjovXihbMDFdWzAtOV18MlswLTNdKTooWzAtNV1bMC05XSk6KFswLTVdWzAtOV18NjApKFwuWzAtOV0rKT8oWnwoXCt8LSkoWzAxXVswLTldfDJbMC0zXSk6KFswLTVdWzAtOV0pKSQvaX0sZW1haWw6e2Vycm9yTWVzc2FnZTpFKCJTdHJpbmcgaXMgbm90IGFuIGUtbWFpbCBhZGRyZXNzLiIpLHBhdHRlcm46L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVowLTktXStcLikrW2EtekEtWl17Mix9KSkkL30saG9zdG5hbWU6e2Vycm9yTWVzc2FnZTpFKCJTdHJpbmcgaXMgbm90IGEgaG9zdG5hbWUuIikscGF0dGVybjovXig/PS57MSwyNTN9XC4/JClbYS16MC05XSg/OlthLXowLTktXXswLDYxfVthLXowLTldKT8oPzpcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXC4/JC9pfSxpcHY0OntlcnJvck1lc3NhZ2U6RSgiU3RyaW5nIGlzIG5vdCBhbiBJUHY0IGFkZHJlc3MuIikscGF0dGVybjovXig/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpXC4pezN9KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkkL30saXB2Njp7ZXJyb3JNZXNzYWdlOkUoIlN0cmluZyBpcyBub3QgYW4gSVB2NiBhZGRyZXNzLiIpLHBhdHRlcm46L14oKChbMC05YS1mXXsxLDR9Oil7N30oWzAtOWEtZl17MSw0fXw6KSl8KChbMC05YS1mXXsxLDR9Oil7Nn0oOlswLTlhLWZdezEsNH18KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs1fSgoKDpbMC05YS1mXXsxLDR9KXsxLDJ9KXw6KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pfDopKXwoKFswLTlhLWZdezEsNH06KXs0fSgoKDpbMC05YS1mXXsxLDR9KXsxLDN9KXwoKDpbMC05YS1mXXsxLDR9KT86KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05YS1mXXsxLDR9Oil7M30oKCg6WzAtOWEtZl17MSw0fSl7MSw0fSl8KCg6WzAtOWEtZl17MSw0fSl7MCwyfTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlhLWZdezEsNH06KXsyfSgoKDpbMC05YS1mXXsxLDR9KXsxLDV9KXwoKDpbMC05YS1mXXsxLDR9KXswLDN9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOWEtZl17MSw0fTopezF9KCgoOlswLTlhLWZdezEsNH0pezEsNn0pfCgoOlswLTlhLWZdezEsNH0pezAsNH06KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KDooKCg6WzAtOWEtZl17MSw0fSl7MSw3fSl8KCg6WzAtOWEtZl17MSw0fSl7MCw1fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKSkkL2l9fSxzdD1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbj0wKXt0aGlzLm9mZnNldD10LHRoaXMubGVuZ3RoPW4sdGhpcy5wYXJlbnQ9ZX1nZXQgY2hpbGRyZW4oKXtyZXR1cm5bXX10b1N0cmluZygpe3JldHVybiJ0eXBlOiAiK3RoaXMudHlwZSsiICgiK3RoaXMub2Zmc2V0KyIvIit0aGlzLmxlbmd0aCsiKSIrKHRoaXMucGFyZW50PyIgcGFyZW50OiB7Iit0aGlzLnBhcmVudC50b1N0cmluZygpKyJ9IjoiIil9fSxrYz1jbGFzcyBleHRlbmRzIHN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLnR5cGU9Im51bGwiLHRoaXMudmFsdWU9bnVsbH19LHBvPWNsYXNzIGV4dGVuZHMgc3R7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsbiksdGhpcy50eXBlPSJib29sZWFuIix0aGlzLnZhbHVlPXR9fSxFYz1jbGFzcyBleHRlbmRzIHN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLnR5cGU9ImFycmF5Iix0aGlzLml0ZW1zPVtdfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLml0ZW1zfX0sUmM9Y2xhc3MgZXh0ZW5kcyBzdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy50eXBlPSJudW1iZXIiLHRoaXMuaXNJbnRlZ2VyPSEwLHRoaXMudmFsdWU9TnVtYmVyLk5hTn19LEhyPWNsYXNzIGV4dGVuZHMgc3R7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCxuKSx0aGlzLnR5cGU9InN0cmluZyIsdGhpcy52YWx1ZT0iIn19LE1jPWNsYXNzIGV4dGVuZHMgc3R7Y29uc3RydWN0b3IoZSx0LG4pe3N1cGVyKGUsdCksdGhpcy50eXBlPSJwcm9wZXJ0eSIsdGhpcy5jb2xvbk9mZnNldD0tMSx0aGlzLmtleU5vZGU9bn1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy52YWx1ZU5vZGU/W3RoaXMua2V5Tm9kZSx0aGlzLnZhbHVlTm9kZV06W3RoaXMua2V5Tm9kZV19fSxDYz1jbGFzcyBleHRlbmRzIHN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLnR5cGU9Im9iamVjdCIsdGhpcy5wcm9wZXJ0aWVzPVtdfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLnByb3BlcnRpZXN9fTtmdW5jdGlvbiB4ZShlKXtyZXR1cm4gVGUoZSk/ZT97fTp7bm90Ont9fTplfXZhciBibzsoZnVuY3Rpb24oZSl7ZVtlLktleT0wXT0iS2V5IixlW2UuRW51bT0xXT0iRW51bSJ9KShib3x8KGJvPXt9KSk7dmFyIFRjPXsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wMy9zY2hlbWEjIjpFZS52MywiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIjpFZS52NCwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNi9zY2hlbWEjIjpFZS52NiwiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIjpFZS52NywiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAxOS0wOS9zY2hlbWEiOkVlLnYyMDE5XzA5LCJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI6RWUudjIwMjBfMTJ9LHZvPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc2NoZW1hRHJhZnQ9ZX19LFBjPWNsYXNzIElve2NvbnN0cnVjdG9yKHQ9LTEsbil7dGhpcy5mb2N1c09mZnNldD10LHRoaXMuZXhjbHVkZT1uLHRoaXMuc2NoZW1hcz1bXX1hZGQodCl7dGhpcy5zY2hlbWFzLnB1c2godCl9bWVyZ2UodCl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5zY2hlbWFzLHQuc2NoZW1hcyl9aW5jbHVkZSh0KXtyZXR1cm4odGhpcy5mb2N1c09mZnNldD09PS0xfHx4byh0LHRoaXMuZm9jdXNPZmZzZXQpKSYmdCE9PXRoaXMuZXhjbHVkZX1uZXdTdWIoKXtyZXR1cm4gbmV3IElvKC0xLHRoaXMuZXhjbHVkZSl9fSxRdD1jbGFzc3tjb25zdHJ1Y3Rvcigpe31nZXQgc2NoZW1hcygpe3JldHVybltdfWFkZChlKXt9bWVyZ2UoZSl7fWluY2x1ZGUoZSl7cmV0dXJuITB9bmV3U3ViKCl7cmV0dXJuIHRoaXN9fTtRdC5pbnN0YW5jZT1uZXcgUXQ7dmFyIHVlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5wcm9ibGVtcz1bXSx0aGlzLnByb3BlcnRpZXNNYXRjaGVzPTAsdGhpcy5wcm9jZXNzZWRQcm9wZXJ0aWVzPW5ldyBTZXQsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzPTAsdGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzPTAsdGhpcy5lbnVtVmFsdWVNYXRjaD0hMSx0aGlzLmVudW1WYWx1ZXM9dm9pZCAwfWhhc1Byb2JsZW1zKCl7cmV0dXJuISF0aGlzLnByb2JsZW1zLmxlbmd0aH1tZXJnZShlKXt0aGlzLnByb2JsZW1zPXRoaXMucHJvYmxlbXMuY29uY2F0KGUucHJvYmxlbXMpLHRoaXMucHJvcGVydGllc01hdGNoZXMrPWUucHJvcGVydGllc01hdGNoZXMsdGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsdGhpcy5tZXJnZVByb2Nlc3NlZFByb3BlcnRpZXMoZSl9bWVyZ2VFbnVtVmFsdWVzKGUpe2lmKCF0aGlzLmVudW1WYWx1ZU1hdGNoJiYhZS5lbnVtVmFsdWVNYXRjaCYmdGhpcy5lbnVtVmFsdWVzJiZlLmVudW1WYWx1ZXMpe3RoaXMuZW51bVZhbHVlcz10aGlzLmVudW1WYWx1ZXMuY29uY2F0KGUuZW51bVZhbHVlcyk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5wcm9ibGVtcyl0LmNvZGU9PT1ILkVudW1WYWx1ZU1pc21hdGNoJiYodC5tZXNzYWdlPUUoIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0aGlzLmVudW1WYWx1ZXMubWFwKG49PkpTT04uc3RyaW5naWZ5KG4pKS5qb2luKCIsICIpKSl9fW1lcmdlUHJvcGVydHlNYXRjaChlKXt0aGlzLnByb2JsZW1zPXRoaXMucHJvYmxlbXMuY29uY2F0KGUucHJvYmxlbXMpLHRoaXMucHJvcGVydGllc01hdGNoZXMrKywoZS5lbnVtVmFsdWVNYXRjaHx8IWUuaGFzUHJvYmxlbXMoKSYmZS5wcm9wZXJ0aWVzTWF0Y2hlcykmJnRoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrLGUuZW51bVZhbHVlTWF0Y2gmJmUuZW51bVZhbHVlcyYmZS5lbnVtVmFsdWVzLmxlbmd0aD09PTEmJnRoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcysrfW1lcmdlUHJvY2Vzc2VkUHJvcGVydGllcyhlKXtlLnByb2Nlc3NlZFByb3BlcnRpZXMuZm9yRWFjaCh0PT50aGlzLnByb2Nlc3NlZFByb3BlcnRpZXMuYWRkKHQpKX1jb21wYXJlKGUpe2NvbnN0IHQ9dGhpcy5oYXNQcm9ibGVtcygpO3JldHVybiB0IT09ZS5oYXNQcm9ibGVtcygpP3Q/LTE6MTp0aGlzLmVudW1WYWx1ZU1hdGNoIT09ZS5lbnVtVmFsdWVNYXRjaD9lLmVudW1WYWx1ZU1hdGNoPy0xOjE6dGhpcy5wcmltYXJ5VmFsdWVNYXRjaGVzIT09ZS5wcmltYXJ5VmFsdWVNYXRjaGVzP3RoaXMucHJpbWFyeVZhbHVlTWF0Y2hlcy1lLnByaW1hcnlWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzIT09ZS5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzP3RoaXMucHJvcGVydGllc1ZhbHVlTWF0Y2hlcy1lLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXM6dGhpcy5wcm9wZXJ0aWVzTWF0Y2hlcy1lLnByb3BlcnRpZXNNYXRjaGVzfX07ZnVuY3Rpb24gSWMoZSx0PVtdKXtyZXR1cm4gbmV3IHlvKGUsdCxbXSl9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIHhjKGUpfWZ1bmN0aW9uIFdyKGUpe3JldHVybiB2YyhlKX1mdW5jdGlvbiB4byhlLHQsbj0hMSl7cmV0dXJuIHQ+PWUub2Zmc2V0JiZ0PGUub2Zmc2V0K2UubGVuZ3RofHxuJiZ0PT09ZS5vZmZzZXQrZS5sZW5ndGh9dmFyIHlvPWNsYXNze2NvbnN0cnVjdG9yKGUsdD1bXSxuPVtdKXt0aGlzLnJvb3Q9ZSx0aGlzLnN5bnRheEVycm9ycz10LHRoaXMuY29tbWVudHM9bn1nZXROb2RlRnJvbU9mZnNldChlLHQ9ITEpe2lmKHRoaXMucm9vdClyZXR1cm4gYmModGhpcy5yb290LGUsdCl9dmlzaXQoZSl7aWYodGhpcy5yb290KXtjb25zdCB0PW49PntsZXQgcj1lKG4pO2NvbnN0IGk9bi5jaGlsZHJlbjtpZihBcnJheS5pc0FycmF5KGkpKWZvcihsZXQgcz0wO3M8aS5sZW5ndGgmJnI7cysrKXI9dChpW3NdKTtyZXR1cm4gcn07dCh0aGlzLnJvb3QpfX12YWxpZGF0ZShlLHQsbj1iZS5XYXJuaW5nLHIpe2lmKHRoaXMucm9vdCYmdCl7Y29uc3QgaT1uZXcgdWU7cmV0dXJuIG9lKHRoaXMucm9vdCx0LGksUXQuaW5zdGFuY2UsbmV3IHZvKHI/P3dvKHQpKSksaS5wcm9ibGVtcy5tYXAocz0+e2NvbnN0IGE9VS5jcmVhdGUoZS5wb3NpdGlvbkF0KHMubG9jYXRpb24ub2Zmc2V0KSxlLnBvc2l0aW9uQXQocy5sb2NhdGlvbi5vZmZzZXQrcy5sb2NhdGlvbi5sZW5ndGgpKTtyZXR1cm4gJGUuY3JlYXRlKGEscy5tZXNzYWdlLHMuc2V2ZXJpdHk/P24scy5jb2RlKX0pfX1nZXRNYXRjaGluZ1NjaGVtYXMoZSx0PS0xLG4pe2lmKHRoaXMucm9vdCYmZSl7Y29uc3Qgcj1uZXcgUGModCxuKSxpPXdvKGUpLHM9bmV3IHZvKGkpO3JldHVybiBvZSh0aGlzLnJvb3QsZSxuZXcgdWUscixzKSxyLnNjaGVtYXN9cmV0dXJuW119fTtmdW5jdGlvbiB3byhlLHQ9RWUudjIwMjBfMTIpe2xldCBuPWUuJHNjaGVtYTtyZXR1cm4gbj9UY1tuXT8/dDp0fWZ1bmN0aW9uIG9lKGUsdCxuLHIsaSl7aWYoIWV8fCFyLmluY2x1ZGUoZSkpcmV0dXJuO2lmKGUudHlwZT09PSJwcm9wZXJ0eSIpcmV0dXJuIG9lKGUudmFsdWVOb2RlLHQsbixyLGkpO2NvbnN0IHM9ZTtzd2l0Y2goYSgpLHMudHlwZSl7Y2FzZSJvYmplY3QiOmgocyk7YnJlYWs7Y2FzZSJhcnJheSI6dShzKTticmVhaztjYXNlInN0cmluZyI6byhzKTticmVhaztjYXNlIm51bWJlciI6bChzKTticmVha31yLmFkZCh7bm9kZTpzLHNjaGVtYTp0fSk7ZnVuY3Rpb24gYSgpe2Z1bmN0aW9uIGMoTil7cmV0dXJuIHMudHlwZT09PU58fE49PT0iaW50ZWdlciImJnMudHlwZT09PSJudW1iZXIiJiZzLmlzSW50ZWdlcn1pZihBcnJheS5pc0FycmF5KHQudHlwZSk/dC50eXBlLnNvbWUoYyl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpzLm9mZnNldCxsZW5ndGg6cy5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIkluY29ycmVjdCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgezB9LiIsdC50eXBlLmpvaW4oIiwgIikpfSk6dC50eXBlJiYoYyh0LnR5cGUpfHxuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6cy5vZmZzZXQsbGVuZ3RoOnMubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCdJbmNvcnJlY3QgdHlwZS4gRXhwZWN0ZWQgInswfSIuJyx0LnR5cGUpfSkpLEFycmF5LmlzQXJyYXkodC5hbGxPZikpZm9yKGNvbnN0IE4gb2YgdC5hbGxPZil7Y29uc3QgeD1uZXcgdWUseT1yLm5ld1N1YigpO29lKHMseGUoTikseCx5LGkpLG4ubWVyZ2UoeCksci5tZXJnZSh5KX1jb25zdCBkPXhlKHQubm90KTtpZihkKXtjb25zdCBOPW5ldyB1ZSx4PXIubmV3U3ViKCk7b2UocyxkLE4seCxpKSxOLmhhc1Byb2JsZW1zKCl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpzLm9mZnNldCxsZW5ndGg6cy5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIk1hdGNoZXMgYSBzY2hlbWEgdGhhdCBpcyBub3QgYWxsb3dlZC4iKX0pO2Zvcihjb25zdCB5IG9mIHguc2NoZW1hcyl5LmludmVydGVkPSF5LmludmVydGVkLHIuYWRkKHkpfWNvbnN0IG09KE4seCk9Pntjb25zdCB5PVtdO2xldCBiO2Zvcihjb25zdCBMIG9mIE4pe2NvbnN0IEE9eGUoTCksUj1uZXcgdWUsST1yLm5ld1N1YigpO2lmKG9lKHMsQSxSLEksaSksUi5oYXNQcm9ibGVtcygpfHx5LnB1c2goQSksIWIpYj17c2NoZW1hOkEsdmFsaWRhdGlvblJlc3VsdDpSLG1hdGNoaW5nU2NoZW1hczpJfTtlbHNlIGlmKCF4JiYhUi5oYXNQcm9ibGVtcygpJiYhYi52YWxpZGF0aW9uUmVzdWx0Lmhhc1Byb2JsZW1zKCkpYi5tYXRjaGluZ1NjaGVtYXMubWVyZ2UoSSksYi52YWxpZGF0aW9uUmVzdWx0LnByb3BlcnRpZXNNYXRjaGVzKz1SLnByb3BlcnRpZXNNYXRjaGVzLGIudmFsaWRhdGlvblJlc3VsdC5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKz1SLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMsYi52YWxpZGF0aW9uUmVzdWx0Lm1lcmdlUHJvY2Vzc2VkUHJvcGVydGllcyhSKTtlbHNle2NvbnN0IEQ9Ui5jb21wYXJlKGIudmFsaWRhdGlvblJlc3VsdCk7RD4wP2I9e3NjaGVtYTpBLHZhbGlkYXRpb25SZXN1bHQ6UixtYXRjaGluZ1NjaGVtYXM6SX06RD09PTAmJihiLm1hdGNoaW5nU2NoZW1hcy5tZXJnZShJKSxiLnZhbGlkYXRpb25SZXN1bHQubWVyZ2VFbnVtVmFsdWVzKFIpKX19cmV0dXJuIHkubGVuZ3RoPjEmJngmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpzLm9mZnNldCxsZW5ndGg6MX0sbWVzc2FnZTpFKCJNYXRjaGVzIG11bHRpcGxlIHNjaGVtYXMgd2hlbiBvbmx5IG9uZSBtdXN0IHZhbGlkYXRlLiIpfSksYiYmKG4ubWVyZ2UoYi52YWxpZGF0aW9uUmVzdWx0KSxyLm1lcmdlKGIubWF0Y2hpbmdTY2hlbWFzKSkseS5sZW5ndGh9O0FycmF5LmlzQXJyYXkodC5hbnlPZikmJm0odC5hbnlPZiwhMSksQXJyYXkuaXNBcnJheSh0Lm9uZU9mKSYmbSh0Lm9uZU9mLCEwKTtjb25zdCBnPU49Pntjb25zdCB4PW5ldyB1ZSx5PXIubmV3U3ViKCk7b2Uocyx4ZShOKSx4LHksaSksbi5tZXJnZSh4KSxyLm1lcmdlKHkpfSxwPShOLHgseSk9Pntjb25zdCBiPXhlKE4pLEw9bmV3IHVlLEE9ci5uZXdTdWIoKTtvZShzLGIsTCxBLGkpLHIubWVyZ2UoQSksbi5tZXJnZVByb2Nlc3NlZFByb3BlcnRpZXMoTCksTC5oYXNQcm9ibGVtcygpP3kmJmcoeSk6eCYmZyh4KX0sdj14ZSh0LmlmKTtpZih2JiZwKHYseGUodC50aGVuKSx4ZSh0LmVsc2UpKSxBcnJheS5pc0FycmF5KHQuZW51bSkpe2NvbnN0IE49YXQocyk7bGV0IHg9ITE7Zm9yKGNvbnN0IHkgb2YgdC5lbnVtKWlmKFN0KE4seSkpe3g9ITA7YnJlYWt9bi5lbnVtVmFsdWVzPXQuZW51bSxuLmVudW1WYWx1ZU1hdGNoPXgseHx8bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnMub2Zmc2V0LGxlbmd0aDpzLmxlbmd0aH0sY29kZTpILkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIlZhbHVlIGlzIG5vdCBhY2NlcHRlZC4gVmFsaWQgdmFsdWVzOiB7MH0uIix0LmVudW0ubWFwKHk9PkpTT04uc3RyaW5naWZ5KHkpKS5qb2luKCIsICIpKX0pfWlmKEFlKHQuY29uc3QpKXtjb25zdCBOPWF0KHMpO1N0KE4sdC5jb25zdCk/bi5lbnVtVmFsdWVNYXRjaD0hMDoobi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OnMub2Zmc2V0LGxlbmd0aDpzLmxlbmd0aH0sY29kZTpILkVudW1WYWx1ZU1pc21hdGNoLG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIlZhbHVlIG11c3QgYmUgezB9LiIsSlNPTi5zdHJpbmdpZnkodC5jb25zdCkpfSksbi5lbnVtVmFsdWVNYXRjaD0hMSksbi5lbnVtVmFsdWVzPVt0LmNvbnN0XX1sZXQgXz10LmRlcHJlY2F0aW9uTWVzc2FnZTtpZihffHx0LmRlcHJlY2F0ZWQpe189X3x8RSgiVmFsdWUgaXMgZGVwcmVjYXRlZCIpO2xldCBOPXMucGFyZW50Py50eXBlPT09InByb3BlcnR5Ij9zLnBhcmVudDpzO24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpOLm9mZnNldCxsZW5ndGg6Ti5sZW5ndGh9LHNldmVyaXR5OmJlLldhcm5pbmcsbWVzc2FnZTpfLGNvZGU6SC5EZXByZWNhdGVkfSl9fWZ1bmN0aW9uIGwoYyl7Y29uc3QgZD1jLnZhbHVlO2Z1bmN0aW9uIG0oeSl7Y29uc3QgYj0vXigtP1xkKykoPzpcLihcZCspKT8oPzplKFstK11cZCspKT8kLy5leGVjKHkudG9TdHJpbmcoKSk7cmV0dXJuIGImJnt2YWx1ZTpOdW1iZXIoYlsxXSsoYlsyXXx8IiIpKSxtdWx0aXBsaWVyOihiWzJdPy5sZW5ndGh8fDApLShwYXJzZUludChiWzNdKXx8MCl9fWlmKGxlKHQubXVsdGlwbGVPZikpe2xldCB5PS0xO2lmKE51bWJlci5pc0ludGVnZXIodC5tdWx0aXBsZU9mKSl5PWQldC5tdWx0aXBsZU9mO2Vsc2V7bGV0IGI9bSh0Lm11bHRpcGxlT2YpLEw9bShkKTtpZihiJiZMKXtjb25zdCBBPTEwKipNYXRoLmFicyhMLm11bHRpcGxpZXItYi5tdWx0aXBsaWVyKTtMLm11bHRpcGxpZXI8Yi5tdWx0aXBsaWVyP0wudmFsdWUqPUE6Yi52YWx1ZSo9QSx5PUwudmFsdWUlYi52YWx1ZX19eSE9PTAmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiVmFsdWUgaXMgbm90IGRpdmlzaWJsZSBieSB7MH0uIix0Lm11bHRpcGxlT2YpfSl9ZnVuY3Rpb24gZyh5LGIpe2lmKGxlKGIpKXJldHVybiBiO2lmKFRlKGIpJiZiKXJldHVybiB5fWZ1bmN0aW9uIHAoeSxiKXtpZighVGUoYil8fCFiKXJldHVybiB5fWNvbnN0IHY9Zyh0Lm1pbmltdW0sdC5leGNsdXNpdmVNaW5pbXVtKTtsZSh2KSYmZDw9diYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJWYWx1ZSBpcyBiZWxvdyB0aGUgZXhjbHVzaXZlIG1pbmltdW0gb2YgezB9LiIsdil9KTtjb25zdCBfPWcodC5tYXhpbXVtLHQuZXhjbHVzaXZlTWF4aW11bSk7bGUoXykmJmQ+PV8mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiVmFsdWUgaXMgYWJvdmUgdGhlIGV4Y2x1c2l2ZSBtYXhpbXVtIG9mIHswfS4iLF8pfSk7Y29uc3QgTj1wKHQubWluaW11bSx0LmV4Y2x1c2l2ZU1pbmltdW0pO2xlKE4pJiZkPE4mJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiVmFsdWUgaXMgYmVsb3cgdGhlIG1pbmltdW0gb2YgezB9LiIsTil9KTtjb25zdCB4PXAodC5tYXhpbXVtLHQuZXhjbHVzaXZlTWF4aW11bSk7bGUoeCkmJmQ+eCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJWYWx1ZSBpcyBhYm92ZSB0aGUgbWF4aW11bSBvZiB7MH0uIix4KX0pfWZ1bmN0aW9uIG8oYyl7aWYobGUodC5taW5MZW5ndGgpJiZiYShjLnZhbHVlKTx0Lm1pbkxlbmd0aCYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJTdHJpbmcgaXMgc2hvcnRlciB0aGFuIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiB7MH0uIix0Lm1pbkxlbmd0aCl9KSxsZSh0Lm1heExlbmd0aCkmJmJhKGMudmFsdWUpPnQubWF4TGVuZ3RoJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIlN0cmluZyBpcyBsb25nZXIgdGhhbiB0aGUgbWF4aW11bSBsZW5ndGggb2YgezB9LiIsdC5tYXhMZW5ndGgpfSkscGEodC5wYXR0ZXJuKSYmKExuKHQucGF0dGVybik/LnRlc3QoYy52YWx1ZSl8fG4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6dC5wYXR0ZXJuRXJyb3JNZXNzYWdlfHx0LmVycm9yTWVzc2FnZXx8RSgnU3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuIG9mICJ7MH0iLicsdC5wYXR0ZXJuKX0pKSx0LmZvcm1hdClzd2l0Y2godC5mb3JtYXQpe2Nhc2UidXJpIjpjYXNlInVyaS1yZWZlcmVuY2UiOntsZXQgbTtpZighYy52YWx1ZSltPUUoIlVSSSBleHBlY3RlZC4iKTtlbHNle2NvbnN0IGc9L14oKFteOi8/I10rPyk6KT8oXC9cLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpPy8uZXhlYyhjLnZhbHVlKTtnPyFnWzJdJiZ0LmZvcm1hdD09PSJ1cmkiJiYobT1FKCJVUkkgd2l0aCBhIHNjaGVtZSBpcyBleHBlY3RlZC4iKSk6bT1FKCJVUkkgaXMgZXhwZWN0ZWQuIil9bSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxFKCJTdHJpbmcgaXMgbm90IGEgVVJJOiB7MH0iLG0pfSl9YnJlYWs7Y2FzZSJjb2xvci1oZXgiOmNhc2UiZGF0ZS10aW1lIjpjYXNlImRhdGUiOmNhc2UidGltZSI6Y2FzZSJlbWFpbCI6Y2FzZSJob3N0bmFtZSI6Y2FzZSJpcHY0IjpjYXNlImlwdjYiOmNvbnN0IGQ9QWNbdC5mb3JtYXRdOyghYy52YWx1ZXx8IWQucGF0dGVybi5leGVjKGMudmFsdWUpKSYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTp0LnBhdHRlcm5FcnJvck1lc3NhZ2V8fHQuZXJyb3JNZXNzYWdlfHxkLmVycm9yTWVzc2FnZX0pfX1mdW5jdGlvbiB1KGMpe2xldCBkLG07aS5zY2hlbWFEcmFmdD49RWUudjIwMjBfMTI/KGQ9dC5wcmVmaXhJdGVtcyxtPUFycmF5LmlzQXJyYXkodC5pdGVtcyk/dm9pZCAwOnQuaXRlbXMpOihkPUFycmF5LmlzQXJyYXkodC5pdGVtcyk/dC5pdGVtczp2b2lkIDAsbT1BcnJheS5pc0FycmF5KHQuaXRlbXMpP3QuYWRkaXRpb25hbEl0ZW1zOnQuaXRlbXMpO2xldCBnPTA7aWYoZCE9PXZvaWQgMCl7Y29uc3QgXz1NYXRoLm1pbihkLmxlbmd0aCxjLml0ZW1zLmxlbmd0aCk7Zm9yKDtnPF87ZysrKXtjb25zdCBOPWRbZ10seD14ZShOKSx5PW5ldyB1ZSxiPWMuaXRlbXNbZ107YiYmKG9lKGIseCx5LHIsaSksbi5tZXJnZVByb3BlcnR5TWF0Y2goeSkpLG4ucHJvY2Vzc2VkUHJvcGVydGllcy5hZGQoU3RyaW5nKGcpKX19aWYobSE9PXZvaWQgMCYmZzxjLml0ZW1zLmxlbmd0aClpZih0eXBlb2YgbT09ImJvb2xlYW4iKWZvcihtPT09ITEmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiQXJyYXkgaGFzIHRvbyBtYW55IGl0ZW1zIGFjY29yZGluZyB0byBzY2hlbWEuIEV4cGVjdGVkIHswfSBvciBmZXdlci4iLGcpfSk7ZzxjLml0ZW1zLmxlbmd0aDtnKyspbi5wcm9jZXNzZWRQcm9wZXJ0aWVzLmFkZChTdHJpbmcoZykpLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2UgZm9yKDtnPGMuaXRlbXMubGVuZ3RoO2crKyl7Y29uc3QgXz1uZXcgdWU7b2UoYy5pdGVtc1tnXSxtLF8scixpKSxuLm1lcmdlUHJvcGVydHlNYXRjaChfKSxuLnByb2Nlc3NlZFByb3BlcnRpZXMuYWRkKFN0cmluZyhnKSl9Y29uc3QgcD14ZSh0LmNvbnRhaW5zKTtpZihwKXtsZXQgXz0wO2ZvcihsZXQgTj0wO048Yy5pdGVtcy5sZW5ndGg7TisrKXtjb25zdCB4PWMuaXRlbXNbTl0seT1uZXcgdWU7b2UoeCxwLHksUXQuaW5zdGFuY2UsaSkseS5oYXNQcm9ibGVtcygpfHwoXysrLGkuc2NoZW1hRHJhZnQ+PUVlLnYyMDIwXzEyJiZuLnByb2Nlc3NlZFByb3BlcnRpZXMuYWRkKFN0cmluZyhOKSkpfV89PT0wJiYhbGUodC5taW5Db250YWlucykmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIkFycmF5IGRvZXMgbm90IGNvbnRhaW4gcmVxdWlyZWQgaXRlbS4iKX0pLGxlKHQubWluQ29udGFpbnMpJiZfPHQubWluQ29udGFpbnMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIkFycmF5IGhhcyB0b28gZmV3IGl0ZW1zIHRoYXQgbWF0Y2ggdGhlIGNvbnRhaW5zIGNvbnRyYWludC4gRXhwZWN0ZWQgezB9IG9yIG1vcmUuIix0Lm1pbkNvbnRhaW5zKX0pLGxlKHQubWF4Q29udGFpbnMpJiZfPnQubWF4Q29udGFpbnMmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6dC5lcnJvck1lc3NhZ2V8fEUoIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcyB0aGF0IG1hdGNoIHRoZSBjb250YWlucyBjb250cmFpbnQuIEV4cGVjdGVkIHswfSBvciBsZXNzLiIsdC5tYXhDb250YWlucyl9KX1jb25zdCB2PXQudW5ldmFsdWF0ZWRJdGVtcztpZih2IT09dm9pZCAwKWZvcihsZXQgXz0wO188Yy5pdGVtcy5sZW5ndGg7XysrKXtpZighbi5wcm9jZXNzZWRQcm9wZXJ0aWVzLmhhcyhTdHJpbmcoXykpKWlmKHY9PT0hMSluLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIkl0ZW0gZG9lcyBub3QgbWF0Y2ggYW55IHZhbGlkYXRpb24gcnVsZSBmcm9tIHRoZSBhcnJheS4iKX0pO2Vsc2V7Y29uc3QgTj1uZXcgdWU7b2UoYy5pdGVtc1tfXSx0LnVuZXZhbHVhdGVkSXRlbXMsTixyLGkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKE4pfW4ucHJvY2Vzc2VkUHJvcGVydGllcy5hZGQoU3RyaW5nKF8pKSxuLnByb3BlcnRpZXNWYWx1ZU1hdGNoZXMrK31pZihsZSh0Lm1pbkl0ZW1zKSYmYy5pdGVtcy5sZW5ndGg8dC5taW5JdGVtcyYmbi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjp7b2Zmc2V0OmMub2Zmc2V0LGxlbmd0aDpjLmxlbmd0aH0sbWVzc2FnZTpFKCJBcnJheSBoYXMgdG9vIGZldyBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIG1vcmUuIix0Lm1pbkl0ZW1zKX0pLGxlKHQubWF4SXRlbXMpJiZjLml0ZW1zLmxlbmd0aD50Lm1heEl0ZW1zJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIkFycmF5IGhhcyB0b28gbWFueSBpdGVtcy4gRXhwZWN0ZWQgezB9IG9yIGZld2VyLiIsdC5tYXhJdGVtcyl9KSx0LnVuaXF1ZUl0ZW1zPT09ITApe2xldCBfPWZ1bmN0aW9uKCl7Zm9yKGxldCB4PTA7eDxOLmxlbmd0aC0xO3grKyl7Y29uc3QgeT1OW3hdO2ZvcihsZXQgYj14KzE7YjxOLmxlbmd0aDtiKyspaWYoU3QoeSxOW2JdKSlyZXR1cm4hMH1yZXR1cm4hMX07Y29uc3QgTj1hdChjKTtfKCkmJm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiQXJyYXkgaGFzIGR1cGxpY2F0ZSBpdGVtcy4iKX0pfX1mdW5jdGlvbiBoKGMpe2NvbnN0IGQ9T2JqZWN0LmNyZWF0ZShudWxsKSxtPW5ldyBTZXQ7Zm9yKGNvbnN0IHggb2YgYy5wcm9wZXJ0aWVzKXtjb25zdCB5PXgua2V5Tm9kZS52YWx1ZTtkW3ldPXgudmFsdWVOb2RlLG0uYWRkKHkpfWlmKEFycmF5LmlzQXJyYXkodC5yZXF1aXJlZCkpe2Zvcihjb25zdCB4IG9mIHQucmVxdWlyZWQpaWYoIWRbeF0pe2NvbnN0IHk9Yy5wYXJlbnQmJmMucGFyZW50LnR5cGU9PT0icHJvcGVydHkiJiZjLnBhcmVudC5rZXlOb2RlLGI9eT97b2Zmc2V0Onkub2Zmc2V0LGxlbmd0aDp5Lmxlbmd0aH06e29mZnNldDpjLm9mZnNldCxsZW5ndGg6MX07bi5wcm9ibGVtcy5wdXNoKHtsb2NhdGlvbjpiLG1lc3NhZ2U6RSgnTWlzc2luZyBwcm9wZXJ0eSAiezB9Ii4nLHgpfSl9fWNvbnN0IGc9eD0+e20uZGVsZXRlKHgpLG4ucHJvY2Vzc2VkUHJvcGVydGllcy5hZGQoeCl9O2lmKHQucHJvcGVydGllcylmb3IoY29uc3QgeCBvZiBPYmplY3Qua2V5cyh0LnByb3BlcnRpZXMpKXtnKHgpO2NvbnN0IHk9dC5wcm9wZXJ0aWVzW3hdLGI9ZFt4XTtpZihiKWlmKFRlKHkpKWlmKHkpbi5wcm9wZXJ0aWVzTWF0Y2hlcysrLG4ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrO2Vsc2V7Y29uc3QgTD1iLnBhcmVudDtuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6TC5rZXlOb2RlLm9mZnNldCxsZW5ndGg6TC5rZXlOb2RlLmxlbmd0aH0sbWVzc2FnZTp0LmVycm9yTWVzc2FnZXx8RSgiUHJvcGVydHkgezB9IGlzIG5vdCBhbGxvd2VkLiIseCl9KX1lbHNle2NvbnN0IEw9bmV3IHVlO29lKGIseSxMLHIsaSksbi5tZXJnZVByb3BlcnR5TWF0Y2goTCl9fWlmKHQucGF0dGVyblByb3BlcnRpZXMpZm9yKGNvbnN0IHggb2YgT2JqZWN0LmtleXModC5wYXR0ZXJuUHJvcGVydGllcykpe2NvbnN0IHk9TG4oeCk7aWYoeSl7Y29uc3QgYj1bXTtmb3IoY29uc3QgTCBvZiBtKWlmKHkudGVzdChMKSl7Yi5wdXNoKEwpO2NvbnN0IEE9ZFtMXTtpZihBKXtjb25zdCBSPXQucGF0dGVyblByb3BlcnRpZXNbeF07aWYoVGUoUikpaWYoUiluLnByb3BlcnRpZXNNYXRjaGVzKyssbi5wcm9wZXJ0aWVzVmFsdWVNYXRjaGVzKys7ZWxzZXtjb25zdCBJPUEucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpJLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpJLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIixMKX0pfWVsc2V7Y29uc3QgST1uZXcgdWU7b2UoQSxSLEkscixpKSxuLm1lcmdlUHJvcGVydHlNYXRjaChJKX19fWIuZm9yRWFjaChnKX19Y29uc3QgcD10LmFkZGl0aW9uYWxQcm9wZXJ0aWVzO2lmKHAhPT12b2lkIDApZm9yKGNvbnN0IHggb2YgbSl7Zyh4KTtjb25zdCB5PWRbeF07aWYoeSl7aWYocD09PSExKXtjb25zdCBiPXkucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpiLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpiLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIix4KX0pfWVsc2UgaWYocCE9PSEwKXtjb25zdCBiPW5ldyB1ZTtvZSh5LHAsYixyLGkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKGIpfX19Y29uc3Qgdj10LnVuZXZhbHVhdGVkUHJvcGVydGllcztpZih2IT09dm9pZCAwKXtjb25zdCB4PVtdO2Zvcihjb25zdCB5IG9mIG0paWYoIW4ucHJvY2Vzc2VkUHJvcGVydGllcy5oYXMoeSkpe3gucHVzaCh5KTtjb25zdCBiPWRbeV07aWYoYil7aWYodj09PSExKXtjb25zdCBMPWIucGFyZW50O24ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpMLmtleU5vZGUub2Zmc2V0LGxlbmd0aDpMLmtleU5vZGUubGVuZ3RofSxtZXNzYWdlOnQuZXJyb3JNZXNzYWdlfHxFKCJQcm9wZXJ0eSB7MH0gaXMgbm90IGFsbG93ZWQuIix5KX0pfWVsc2UgaWYodiE9PSEwKXtjb25zdCBMPW5ldyB1ZTtvZShiLHYsTCxyLGkpLG4ubWVyZ2VQcm9wZXJ0eU1hdGNoKEwpfX19eC5mb3JFYWNoKGcpfWlmKGxlKHQubWF4UHJvcGVydGllcykmJmMucHJvcGVydGllcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIk9iamVjdCBoYXMgbW9yZSBwcm9wZXJ0aWVzIHRoYW4gbGltaXQgb2YgezB9LiIsdC5tYXhQcm9wZXJ0aWVzKX0pLGxlKHQubWluUHJvcGVydGllcykmJmMucHJvcGVydGllcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZuLnByb2JsZW1zLnB1c2goe2xvY2F0aW9uOntvZmZzZXQ6Yy5vZmZzZXQsbGVuZ3RoOmMubGVuZ3RofSxtZXNzYWdlOkUoIk9iamVjdCBoYXMgZmV3ZXIgcHJvcGVydGllcyB0aGFuIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgezB9Iix0Lm1pblByb3BlcnRpZXMpfSksdC5kZXBlbmRlbnRSZXF1aXJlZClmb3IoY29uc3QgeCBpbiB0LmRlcGVuZGVudFJlcXVpcmVkKXtjb25zdCB5PWRbeF0sYj10LmRlcGVuZGVudFJlcXVpcmVkW3hdO3kmJkFycmF5LmlzQXJyYXkoYikmJk4oeCxiKX1pZih0LmRlcGVuZGVudFNjaGVtYXMpZm9yKGNvbnN0IHggaW4gdC5kZXBlbmRlbnRTY2hlbWFzKXtjb25zdCB5PWRbeF0sYj10LmRlcGVuZGVudFNjaGVtYXNbeF07eSYmUWUoYikmJk4oeCxiKX1pZih0LmRlcGVuZGVuY2llcylmb3IoY29uc3QgeCBpbiB0LmRlcGVuZGVuY2llcylkW3hdJiZOKHgsdC5kZXBlbmRlbmNpZXNbeF0pO2NvbnN0IF89eGUodC5wcm9wZXJ0eU5hbWVzKTtpZihfKWZvcihjb25zdCB4IG9mIGMucHJvcGVydGllcyl7Y29uc3QgeT14LmtleU5vZGU7eSYmb2UoeSxfLG4sUXQuaW5zdGFuY2UsaSl9ZnVuY3Rpb24gTih4LHkpe2lmKEFycmF5LmlzQXJyYXkoeSkpZm9yKGNvbnN0IGIgb2YgeSlkW2JdP24ucHJvcGVydGllc1ZhbHVlTWF0Y2hlcysrOm4ucHJvYmxlbXMucHVzaCh7bG9jYXRpb246e29mZnNldDpjLm9mZnNldCxsZW5ndGg6Yy5sZW5ndGh9LG1lc3NhZ2U6RSgiT2JqZWN0IGlzIG1pc3NpbmcgcHJvcGVydHkgezB9IHJlcXVpcmVkIGJ5IHByb3BlcnR5IHsxfS4iLGIseCl9KTtlbHNle2NvbnN0IGI9eGUoeSk7aWYoYil7Y29uc3QgTD1uZXcgdWU7b2UoYyxiLEwscixpKSxuLm1lcmdlUHJvcGVydHlNYXRjaChMKX19fX19ZnVuY3Rpb24gRmMoZSx0KXtjb25zdCBuPVtdO2xldCByPS0xO2NvbnN0IGk9ZS5nZXRUZXh0KCkscz1ydChpLCExKSxhPXQmJnQuY29sbGVjdENvbW1lbnRzP1tdOnZvaWQgMDtmdW5jdGlvbiBsKCl7Zm9yKDs7KXtjb25zdCBMPXMuc2NhbigpO3N3aXRjaChoKCksTCl7Y2FzZSAxMjpjYXNlIDEzOkFycmF5LmlzQXJyYXkoYSkmJmEucHVzaChVLmNyZWF0ZShlLnBvc2l0aW9uQXQocy5nZXRUb2tlbk9mZnNldCgpKSxlLnBvc2l0aW9uQXQocy5nZXRUb2tlbk9mZnNldCgpK3MuZ2V0VG9rZW5MZW5ndGgoKSkpKTticmVhaztjYXNlIDE1OmNhc2UgMTQ6YnJlYWs7ZGVmYXVsdDpyZXR1cm4gTH19fWZ1bmN0aW9uIG8oTCxBLFIsSSxEPWJlLkVycm9yKXtpZihuLmxlbmd0aD09PTB8fFIhPT1yKXtjb25zdCBNPVUuY3JlYXRlKGUucG9zaXRpb25BdChSKSxlLnBvc2l0aW9uQXQoSSkpO24ucHVzaCgkZS5jcmVhdGUoTSxMLEQsQSxlLmxhbmd1YWdlSWQpKSxyPVJ9fWZ1bmN0aW9uIHUoTCxBLFI9dm9pZCAwLEk9W10sRD1bXSl7bGV0IE09cy5nZXRUb2tlbk9mZnNldCgpLHc9cy5nZXRUb2tlbk9mZnNldCgpK3MuZ2V0VG9rZW5MZW5ndGgoKTtpZihNPT09dyYmTT4wKXtmb3IoTS0tO00+MCYmL1xzLy50ZXN0KGkuY2hhckF0KE0pKTspTS0tO3c9TSsxfWlmKG8oTCxBLE0sdyksUiYmYyhSLCExKSxJLmxlbmd0aCtELmxlbmd0aD4wKXtsZXQgUz1zLmdldFRva2VuKCk7Zm9yKDtTIT09MTc7KXtpZihJLmluZGV4T2YoUykhPT0tMSl7bCgpO2JyZWFrfWVsc2UgaWYoRC5pbmRleE9mKFMpIT09LTEpYnJlYWs7Uz1sKCl9fXJldHVybiBSfWZ1bmN0aW9uIGgoKXtzd2l0Y2gocy5nZXRUb2tlbkVycm9yKCkpe2Nhc2UgNDpyZXR1cm4gdShFKCJJbnZhbGlkIHVuaWNvZGUgc2VxdWVuY2UgaW4gc3RyaW5nLiIpLEguSW52YWxpZFVuaWNvZGUpLCEwO2Nhc2UgNTpyZXR1cm4gdShFKCJJbnZhbGlkIGVzY2FwZSBjaGFyYWN0ZXIgaW4gc3RyaW5nLiIpLEguSW52YWxpZEVzY2FwZUNoYXJhY3RlciksITA7Y2FzZSAzOnJldHVybiB1KEUoIlVuZXhwZWN0ZWQgZW5kIG9mIG51bWJlci4iKSxILlVuZXhwZWN0ZWRFbmRPZk51bWJlciksITA7Y2FzZSAxOnJldHVybiB1KEUoIlVuZXhwZWN0ZWQgZW5kIG9mIGNvbW1lbnQuIiksSC5VbmV4cGVjdGVkRW5kT2ZDb21tZW50KSwhMDtjYXNlIDI6cmV0dXJuIHUoRSgiVW5leHBlY3RlZCBlbmQgb2Ygc3RyaW5nLiIpLEguVW5leHBlY3RlZEVuZE9mU3RyaW5nKSwhMDtjYXNlIDY6cmV0dXJuIHUoRSgiSW52YWxpZCBjaGFyYWN0ZXJzIGluIHN0cmluZy4gQ29udHJvbCBjaGFyYWN0ZXJzIG11c3QgYmUgZXNjYXBlZC4iKSxILkludmFsaWRDaGFyYWN0ZXIpLCEwfXJldHVybiExfWZ1bmN0aW9uIGMoTCxBKXtyZXR1cm4gTC5sZW5ndGg9cy5nZXRUb2tlbk9mZnNldCgpK3MuZ2V0VG9rZW5MZW5ndGgoKS1MLm9mZnNldCxBJiZsKCksTH1mdW5jdGlvbiBkKEwpe2lmKHMuZ2V0VG9rZW4oKSE9PTMpcmV0dXJuO2NvbnN0IEE9bmV3IEVjKEwscy5nZXRUb2tlbk9mZnNldCgpKTtsKCk7bGV0IFI9ITE7Zm9yKDtzLmdldFRva2VuKCkhPT00JiZzLmdldFRva2VuKCkhPT0xNzspe2lmKHMuZ2V0VG9rZW4oKT09PTUpe1J8fHUoRSgiVmFsdWUgZXhwZWN0ZWQiKSxILlZhbHVlRXhwZWN0ZWQpO2NvbnN0IEQ9cy5nZXRUb2tlbk9mZnNldCgpO2lmKGwoKSxzLmdldFRva2VuKCk9PT00KXtSJiZvKEUoIlRyYWlsaW5nIGNvbW1hIiksSC5UcmFpbGluZ0NvbW1hLEQsRCsxKTtjb250aW51ZX19ZWxzZSBSJiZ1KEUoIkV4cGVjdGVkIGNvbW1hIiksSC5Db21tYUV4cGVjdGVkKTtjb25zdCBJPXgoQSk7ST9BLml0ZW1zLnB1c2goSSk6dShFKCJWYWx1ZSBleHBlY3RlZCIpLEguVmFsdWVFeHBlY3RlZCx2b2lkIDAsW10sWzQsNV0pLFI9ITB9cmV0dXJuIHMuZ2V0VG9rZW4oKSE9PTQ/dShFKCJFeHBlY3RlZCBjb21tYSBvciBjbG9zaW5nIGJyYWNrZXQiKSxILkNvbW1hT3JDbG9zZUJhY2tldEV4cGVjdGVkLEEpOmMoQSwhMCl9Y29uc3QgbT1uZXcgSHIodm9pZCAwLDAsMCk7ZnVuY3Rpb24gZyhMLEEpe2NvbnN0IFI9bmV3IE1jKEwscy5nZXRUb2tlbk9mZnNldCgpLG0pO2xldCBJPXYoUik7aWYoIUkpaWYocy5nZXRUb2tlbigpPT09MTYpe3UoRSgiUHJvcGVydHkga2V5cyBtdXN0IGJlIGRvdWJsZXF1b3RlZCIpLEguUHJvcGVydHlLZXlzTXVzdEJlRG91YmxlcXVvdGVkKTtjb25zdCBNPW5ldyBIcihSLHMuZ2V0VG9rZW5PZmZzZXQoKSxzLmdldFRva2VuTGVuZ3RoKCkpO00udmFsdWU9cy5nZXRUb2tlblZhbHVlKCksST1NLGwoKX1lbHNlIHJldHVybjtpZihSLmtleU5vZGU9SSxJLnZhbHVlIT09Ii8vIil7Y29uc3QgTT1BW0kudmFsdWVdO00/KG8oRSgiRHVwbGljYXRlIG9iamVjdCBrZXkiKSxILkR1cGxpY2F0ZUtleSxSLmtleU5vZGUub2Zmc2V0LFIua2V5Tm9kZS5vZmZzZXQrUi5rZXlOb2RlLmxlbmd0aCxiZS5XYXJuaW5nKSxRZShNKSYmbyhFKCJEdXBsaWNhdGUgb2JqZWN0IGtleSIpLEguRHVwbGljYXRlS2V5LE0ua2V5Tm9kZS5vZmZzZXQsTS5rZXlOb2RlLm9mZnNldCtNLmtleU5vZGUubGVuZ3RoLGJlLldhcm5pbmcpLEFbSS52YWx1ZV09ITApOkFbSS52YWx1ZV09Un1pZihzLmdldFRva2VuKCk9PT02KVIuY29sb25PZmZzZXQ9cy5nZXRUb2tlbk9mZnNldCgpLGwoKTtlbHNlIGlmKHUoRSgiQ29sb24gZXhwZWN0ZWQiKSxILkNvbG9uRXhwZWN0ZWQpLHMuZ2V0VG9rZW4oKT09PTEwJiZlLnBvc2l0aW9uQXQoSS5vZmZzZXQrSS5sZW5ndGgpLmxpbmU8ZS5wb3NpdGlvbkF0KHMuZ2V0VG9rZW5PZmZzZXQoKSkubGluZSlyZXR1cm4gUi5sZW5ndGg9SS5sZW5ndGgsUjtjb25zdCBEPXgoUik7cmV0dXJuIEQ/KFIudmFsdWVOb2RlPUQsUi5sZW5ndGg9RC5vZmZzZXQrRC5sZW5ndGgtUi5vZmZzZXQsUik6dShFKCJWYWx1ZSBleHBlY3RlZCIpLEguVmFsdWVFeHBlY3RlZCxSLFtdLFsyLDVdKX1mdW5jdGlvbiBwKEwpe2lmKHMuZ2V0VG9rZW4oKSE9PTEpcmV0dXJuO2NvbnN0IEE9bmV3IENjKEwscy5nZXRUb2tlbk9mZnNldCgpKSxSPU9iamVjdC5jcmVhdGUobnVsbCk7bCgpO2xldCBJPSExO2Zvcig7cy5nZXRUb2tlbigpIT09MiYmcy5nZXRUb2tlbigpIT09MTc7KXtpZihzLmdldFRva2VuKCk9PT01KXtJfHx1KEUoIlByb3BlcnR5IGV4cGVjdGVkIiksSC5Qcm9wZXJ0eUV4cGVjdGVkKTtjb25zdCBNPXMuZ2V0VG9rZW5PZmZzZXQoKTtpZihsKCkscy5nZXRUb2tlbigpPT09Mil7SSYmbyhFKCJUcmFpbGluZyBjb21tYSIpLEguVHJhaWxpbmdDb21tYSxNLE0rMSk7Y29udGludWV9fWVsc2UgSSYmdShFKCJFeHBlY3RlZCBjb21tYSIpLEguQ29tbWFFeHBlY3RlZCk7Y29uc3QgRD1nKEEsUik7RD9BLnByb3BlcnRpZXMucHVzaChEKTp1KEUoIlByb3BlcnR5IGV4cGVjdGVkIiksSC5Qcm9wZXJ0eUV4cGVjdGVkLHZvaWQgMCxbXSxbMiw1XSksST0hMH1yZXR1cm4gcy5nZXRUb2tlbigpIT09Mj91KEUoIkV4cGVjdGVkIGNvbW1hIG9yIGNsb3NpbmcgYnJhY2UiKSxILkNvbW1hT3JDbG9zZUJyYWNlRXhwZWN0ZWQsQSk6YyhBLCEwKX1mdW5jdGlvbiB2KEwpe2lmKHMuZ2V0VG9rZW4oKSE9PTEwKXJldHVybjtjb25zdCBBPW5ldyBIcihMLHMuZ2V0VG9rZW5PZmZzZXQoKSk7cmV0dXJuIEEudmFsdWU9cy5nZXRUb2tlblZhbHVlKCksYyhBLCEwKX1mdW5jdGlvbiBfKEwpe2lmKHMuZ2V0VG9rZW4oKSE9PTExKXJldHVybjtjb25zdCBBPW5ldyBSYyhMLHMuZ2V0VG9rZW5PZmZzZXQoKSk7aWYocy5nZXRUb2tlbkVycm9yKCk9PT0wKXtjb25zdCBSPXMuZ2V0VG9rZW5WYWx1ZSgpO3RyeXtjb25zdCBJPUpTT04ucGFyc2UoUik7aWYoIWxlKEkpKXJldHVybiB1KEUoIkludmFsaWQgbnVtYmVyIGZvcm1hdC4iKSxILlVuZGVmaW5lZCxBKTtBLnZhbHVlPUl9Y2F0Y2h7cmV0dXJuIHUoRSgiSW52YWxpZCBudW1iZXIgZm9ybWF0LiIpLEguVW5kZWZpbmVkLEEpfUEuaXNJbnRlZ2VyPVIuaW5kZXhPZigiLiIpPT09LTF9cmV0dXJuIGMoQSwhMCl9ZnVuY3Rpb24gTihMKXtzd2l0Y2gocy5nZXRUb2tlbigpKXtjYXNlIDc6cmV0dXJuIGMobmV3IGtjKEwscy5nZXRUb2tlbk9mZnNldCgpKSwhMCk7Y2FzZSA4OnJldHVybiBjKG5ldyBwbyhMLCEwLHMuZ2V0VG9rZW5PZmZzZXQoKSksITApO2Nhc2UgOTpyZXR1cm4gYyhuZXcgcG8oTCwhMSxzLmdldFRva2VuT2Zmc2V0KCkpLCEwKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24geChMKXtyZXR1cm4gZChMKXx8cChMKXx8dihMKXx8XyhMKXx8TihMKX1sZXQgeTtyZXR1cm4gbCgpIT09MTcmJih5PXgoeSkseT9zLmdldFRva2VuKCkhPT0xNyYmdShFKCJFbmQgb2YgZmlsZSBleHBlY3RlZC4iKSxILlVuZGVmaW5lZCk6dShFKCJFeHBlY3RlZCBhIEpTT04gb2JqZWN0LCBhcnJheSBvciBsaXRlcmFsLiIpLEguVW5kZWZpbmVkKSksbmV3IHlvKHksbixhKX1mdW5jdGlvbiB6cihlLHQsbil7aWYoZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0Iil7Y29uc3Qgcj10KyIJIjtpZihBcnJheS5pc0FycmF5KGUpKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIltdIjtsZXQgaT1gWwpgO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWkrPXIrenIoZVtzXSxyLG4pLHM8ZS5sZW5ndGgtMSYmKGkrPSIsIiksaSs9YApgO3JldHVybiBpKz10KyJdIixpfWVsc2V7Y29uc3QgaT1PYmplY3Qua2V5cyhlKTtpZihpLmxlbmd0aD09PTApcmV0dXJuInt9IjtsZXQgcz1gewpgO2ZvcihsZXQgYT0wO2E8aS5sZW5ndGg7YSsrKXtjb25zdCBsPWlbYV07cys9citKU09OLnN0cmluZ2lmeShsKSsiOiAiK3pyKGVbbF0scixuKSxhPGkubGVuZ3RoLTEmJihzKz0iLCIpLHMrPWAKYH1yZXR1cm4gcys9dCsifSIsc319cmV0dXJuIG4oZSl9dmFyIFZjPWNsYXNze2NvbnN0cnVjdG9yKGUsdD1bXSxuPVByb21pc2Uscj17fSl7dGhpcy5zY2hlbWFTZXJ2aWNlPWUsdGhpcy5jb250cmlidXRpb25zPXQsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bix0aGlzLmNsaWVudENhcGFiaWxpdGllcz1yfWRvUmVzb2x2ZShlKXtmb3IobGV0IHQ9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCBuPXRoaXMuY29udHJpYnV0aW9uc1t0XS5yZXNvbHZlQ29tcGxldGlvbjtpZihuKXtjb25zdCByPW4oZSk7aWYocilyZXR1cm4gcn19cmV0dXJuIHRoaXMucHJvbWlzZUNvbnN0cnVjdG9yLnJlc29sdmUoZSl9ZG9Db21wbGV0ZShlLHQsbil7Y29uc3Qgcj17aXRlbXM6W10saXNJbmNvbXBsZXRlOiExfSxpPWUuZ2V0VGV4dCgpLHM9ZS5vZmZzZXRBdCh0KTtsZXQgYT1uLmdldE5vZGVGcm9tT2Zmc2V0KHMsITApO2lmKHRoaXMuaXNJbkNvbW1lbnQoZSxhP2Eub2Zmc2V0OjAscykpcmV0dXJuIFByb21pc2UucmVzb2x2ZShyKTtpZihhJiZzPT09YS5vZmZzZXQrYS5sZW5ndGgmJnM+MCl7Y29uc3QgYz1pW3MtMV07KGEudHlwZT09PSJvYmplY3QiJiZjPT09In0ifHxhLnR5cGU9PT0iYXJyYXkiJiZjPT09Il0iKSYmKGE9YS5wYXJlbnQpfWNvbnN0IGw9dGhpcy5nZXRDdXJyZW50V29yZChlLHMpO2xldCBvO2lmKGEmJihhLnR5cGU9PT0ic3RyaW5nInx8YS50eXBlPT09Im51bWJlciJ8fGEudHlwZT09PSJib29sZWFuInx8YS50eXBlPT09Im51bGwiKSlvPVUuY3JlYXRlKGUucG9zaXRpb25BdChhLm9mZnNldCksZS5wb3NpdGlvbkF0KGEub2Zmc2V0K2EubGVuZ3RoKSk7ZWxzZXtsZXQgYz1zLWwubGVuZ3RoO2M+MCYmaVtjLTFdPT09JyInJiZjLS0sbz1VLmNyZWF0ZShlLnBvc2l0aW9uQXQoYyksdCl9Y29uc3QgdT1uZXcgTWFwLGg9e2FkZDpjPT57bGV0IGQ9Yy5sYWJlbDtjb25zdCBtPXUuZ2V0KGQpO2lmKG0pbS5kb2N1bWVudGF0aW9ufHwobS5kb2N1bWVudGF0aW9uPWMuZG9jdW1lbnRhdGlvbiksbS5kZXRhaWx8fChtLmRldGFpbD1jLmRldGFpbCksbS5sYWJlbERldGFpbHN8fChtLmxhYmVsRGV0YWlscz1jLmxhYmVsRGV0YWlscyk7ZWxzZXtpZihkPWQucmVwbGFjZSgvW1xuXS9nLCLihrUiKSxkLmxlbmd0aD42MCl7Y29uc3QgZz1kLnN1YnN0cigwLDU3KS50cmltKCkrIi4uLiI7dS5oYXMoZyl8fChkPWcpfWMudGV4dEVkaXQ9UGUucmVwbGFjZShvLGMuaW5zZXJ0VGV4dCksYy5sYWJlbD1kLHUuc2V0KGQsYyksci5pdGVtcy5wdXNoKGMpfX0sc2V0QXNJbmNvbXBsZXRlOigpPT57ci5pc0luY29tcGxldGU9ITB9LGVycm9yOmM9Pntjb25zb2xlLmVycm9yKGMpfSxnZXROdW1iZXJPZlByb3Bvc2FsczooKT0+ci5pdGVtcy5sZW5ndGh9O3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksbikudGhlbihjPT57Y29uc3QgZD1bXTtsZXQgbT0hMCxnPSIiLHA7aWYoYSYmYS50eXBlPT09InN0cmluZyIpe2NvbnN0IF89YS5wYXJlbnQ7XyYmXy50eXBlPT09InByb3BlcnR5IiYmXy5rZXlOb2RlPT09YSYmKG09IV8udmFsdWVOb2RlLHA9XyxnPWkuc3Vic3RyKGEub2Zmc2V0KzEsYS5sZW5ndGgtMiksXyYmKGE9Xy5wYXJlbnQpKX1pZihhJiZhLnR5cGU9PT0ib2JqZWN0Iil7aWYoYS5vZmZzZXQ9PT1zKXJldHVybiByO2EucHJvcGVydGllcy5mb3JFYWNoKHk9PnsoIXB8fHAhPT15KSYmdS5zZXQoeS5rZXlOb2RlLnZhbHVlLEJyLmNyZWF0ZSgiX18iKSl9KTtsZXQgTj0iIjttJiYoTj10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSxlLm9mZnNldEF0KG8uZW5kKSkpLGM/dGhpcy5nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKGMsbixhLG0sTixoKTp0aGlzLmdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zKG4sYSxnLGgpO2NvbnN0IHg9V3IoYSk7dGhpcy5jb250cmlidXRpb25zLmZvckVhY2goeT0+e2NvbnN0IGI9eS5jb2xsZWN0UHJvcGVydHlDb21wbGV0aW9ucyhlLnVyaSx4LGwsbSxOPT09IiIsaCk7YiYmZC5wdXNoKGIpfSksIWMmJmwubGVuZ3RoPjAmJmkuY2hhckF0KHMtbC5sZW5ndGgtMSkhPT0nIicmJihoLmFkZCh7a2luZDp2ZS5Qcm9wZXJ0eSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUobCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShsLHZvaWQgMCwhMSxOKSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLGguc2V0QXNJbmNvbXBsZXRlKCkpfWNvbnN0IHY9e307cmV0dXJuIGM/dGhpcy5nZXRWYWx1ZUNvbXBsZXRpb25zKGMsbixhLHMsZSxoLHYpOnRoaXMuZ2V0U2NoZW1hTGVzc1ZhbHVlQ29tcGxldGlvbnMobixhLHMsZSxoKSx0aGlzLmNvbnRyaWJ1dGlvbnMubGVuZ3RoPjAmJnRoaXMuZ2V0Q29udHJpYnV0ZWRWYWx1ZUNvbXBsZXRpb25zKG4sYSxzLGUsaCxkKSx0aGlzLnByb21pc2VDb25zdHJ1Y3Rvci5hbGwoZCkudGhlbigoKT0+e2lmKGguZ2V0TnVtYmVyT2ZQcm9wb3NhbHMoKT09PTApe2xldCBfPXM7YSYmKGEudHlwZT09PSJzdHJpbmcifHxhLnR5cGU9PT0ibnVtYmVyInx8YS50eXBlPT09ImJvb2xlYW4ifHxhLnR5cGU9PT0ibnVsbCIpJiYoXz1hLm9mZnNldCthLmxlbmd0aCk7Y29uc3QgTj10aGlzLmV2YWx1YXRlU2VwYXJhdG9yQWZ0ZXIoZSxfKTt0aGlzLmFkZEZpbGxlclZhbHVlQ29tcGxldGlvbnModixOLGgpfXJldHVybiByfSl9KX1nZXRQcm9wZXJ0eUNvbXBsZXRpb25zKGUsdCxuLHIsaSxzKXt0LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCkuZm9yRWFjaChsPT57aWYobC5ub2RlPT09biYmIWwuaW52ZXJ0ZWQpe2NvbnN0IG89bC5zY2hlbWEucHJvcGVydGllcztvJiZPYmplY3Qua2V5cyhvKS5mb3JFYWNoKGg9Pntjb25zdCBjPW9baF07aWYodHlwZW9mIGM9PSJvYmplY3QiJiYhYy5kZXByZWNhdGlvbk1lc3NhZ2UmJiFjLmRvTm90U3VnZ2VzdCl7Y29uc3QgZD17a2luZDp2ZS5Qcm9wZXJ0eSxsYWJlbDpoLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoaCxjLHIsaSksaW5zZXJ0VGV4dEZvcm1hdDpyZS5TbmlwcGV0LGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoaCksZG9jdW1lbnRhdGlvbjp0aGlzLmZyb21NYXJrdXAoYy5tYXJrZG93bkRlc2NyaXB0aW9uKXx8Yy5kZXNjcmlwdGlvbnx8IiJ9O2Muc3VnZ2VzdFNvcnRUZXh0IT09dm9pZCAwJiYoZC5zb3J0VGV4dD1jLnN1Z2dlc3RTb3J0VGV4dCksZC5pbnNlcnRUZXh0JiZHdChkLmluc2VydFRleHQsYCQxJHtpfWApJiYoZC5jb21tYW5kPXt0aXRsZToiU3VnZ2VzdCIsY29tbWFuZDoiZWRpdG9yLmFjdGlvbi50cmlnZ2VyU3VnZ2VzdCJ9KSxzLmFkZChkKX19KTtjb25zdCB1PWwuc2NoZW1hLnByb3BlcnR5TmFtZXM7aWYodHlwZW9mIHU9PSJvYmplY3QiJiYhdS5kZXByZWNhdGlvbk1lc3NhZ2UmJiF1LmRvTm90U3VnZ2VzdCl7Y29uc3QgaD0oYyxkPXZvaWQgMCk9Pntjb25zdCBtPXtraW5kOnZlLlByb3BlcnR5LGxhYmVsOmMsaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JQcm9wZXJ0eShjLHZvaWQgMCxyLGkpLGluc2VydFRleHRGb3JtYXQ6cmUuU25pcHBldCxmaWx0ZXJUZXh0OnRoaXMuZ2V0RmlsdGVyVGV4dEZvclZhbHVlKGMpLGRvY3VtZW50YXRpb246ZHx8dGhpcy5mcm9tTWFya3VwKHUubWFya2Rvd25EZXNjcmlwdGlvbil8fHUuZGVzY3JpcHRpb258fCIifTt1LnN1Z2dlc3RTb3J0VGV4dCE9PXZvaWQgMCYmKG0uc29ydFRleHQ9dS5zdWdnZXN0U29ydFRleHQpLG0uaW5zZXJ0VGV4dCYmR3QobS5pbnNlcnRUZXh0LGAkMSR7aX1gKSYmKG0uY29tbWFuZD17dGl0bGU6IlN1Z2dlc3QiLGNvbW1hbmQ6ImVkaXRvci5hY3Rpb24udHJpZ2dlclN1Z2dlc3QifSkscy5hZGQobSl9O2lmKHUuZW51bSlmb3IobGV0IGM9MDtjPHUuZW51bS5sZW5ndGg7YysrKXtsZXQgZDt1Lm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmYzx1Lm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGg/ZD10aGlzLmZyb21NYXJrdXAodS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbY10pOnUuZW51bURlc2NyaXB0aW9ucyYmYzx1LmVudW1EZXNjcmlwdGlvbnMubGVuZ3RoJiYoZD11LmVudW1EZXNjcmlwdGlvbnNbY10pLGgodS5lbnVtW2NdLGQpfXUuY29uc3QmJmgodS5jb25zdCl9fX0pfWdldFNjaGVtYUxlc3NQcm9wZXJ0eUNvbXBsZXRpb25zKGUsdCxuLHIpe2NvbnN0IGk9cz0+e3MucHJvcGVydGllcy5mb3JFYWNoKGE9Pntjb25zdCBsPWEua2V5Tm9kZS52YWx1ZTtyLmFkZCh7a2luZDp2ZS5Qcm9wZXJ0eSxsYWJlbDpsLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUobCwiIiksaW5zZXJ0VGV4dEZvcm1hdDpyZS5TbmlwcGV0LGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUobCksZG9jdW1lbnRhdGlvbjoiIn0pfSl9O2lmKHQucGFyZW50KWlmKHQucGFyZW50LnR5cGU9PT0icHJvcGVydHkiKXtjb25zdCBzPXQucGFyZW50LmtleU5vZGUudmFsdWU7ZS52aXNpdChhPT4oYS50eXBlPT09InByb3BlcnR5IiYmYSE9PXQucGFyZW50JiZhLmtleU5vZGUudmFsdWU9PT1zJiZhLnZhbHVlTm9kZSYmYS52YWx1ZU5vZGUudHlwZT09PSJvYmplY3QiJiZpKGEudmFsdWVOb2RlKSwhMCkpfWVsc2UgdC5wYXJlbnQudHlwZT09PSJhcnJheSImJnQucGFyZW50Lml0ZW1zLmZvckVhY2gocz0+e3MudHlwZT09PSJvYmplY3QiJiZzIT09dCYmaShzKX0pO2Vsc2UgdC50eXBlPT09Im9iamVjdCImJnIuYWRkKHtraW5kOnZlLlByb3BlcnR5LGxhYmVsOiIkc2NoZW1hIixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclByb3BlcnR5KCIkc2NoZW1hIix2b2lkIDAsITAsIiIpLGluc2VydFRleHRGb3JtYXQ6cmUuU25pcHBldCxkb2N1bWVudGF0aW9uOiIiLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoIiRzY2hlbWEiKX0pfWdldFNjaGVtYUxlc3NWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIsaSl7bGV0IHM9bjtpZih0JiYodC50eXBlPT09InN0cmluZyJ8fHQudHlwZT09PSJudW1iZXIifHx0LnR5cGU9PT0iYm9vbGVhbiJ8fHQudHlwZT09PSJudWxsIikmJihzPXQub2Zmc2V0K3QubGVuZ3RoLHQ9dC5wYXJlbnQpLCF0KXtpLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJvYmplY3QiKSxsYWJlbDoiRW1wdHkgb2JqZWN0IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKHt9LCIiKSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLGkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImFycmF5IiksbGFiZWw6IkVtcHR5IGFycmF5IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLCIiKSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pO3JldHVybn1jb25zdCBhPXRoaXMuZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihyLHMpLGw9bz0+e28ucGFyZW50JiYheG8oby5wYXJlbnQsbiwhMCkmJmkuYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoby50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZShvLHIpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yTWF0Y2hpbmdOb2RlKG8scixhKSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pLG8udHlwZT09PSJib29sZWFuIiYmdGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCFvLnZhbHVlLGEsaSl9O2lmKHQudHlwZT09PSJwcm9wZXJ0eSImJm4+KHQuY29sb25PZmZzZXR8fDApKXtjb25zdCBvPXQudmFsdWVOb2RlO2lmKG8mJihuPm8ub2Zmc2V0K28ubGVuZ3RofHxvLnR5cGU9PT0ib2JqZWN0Inx8by50eXBlPT09ImFycmF5IikpcmV0dXJuO2NvbnN0IHU9dC5rZXlOb2RlLnZhbHVlO2UudmlzaXQoaD0+KGgudHlwZT09PSJwcm9wZXJ0eSImJmgua2V5Tm9kZS52YWx1ZT09PXUmJmgudmFsdWVOb2RlJiZsKGgudmFsdWVOb2RlKSwhMCkpLHU9PT0iJHNjaGVtYSImJnQucGFyZW50JiYhdC5wYXJlbnQucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGEsaSl9aWYodC50eXBlPT09ImFycmF5IilpZih0LnBhcmVudCYmdC5wYXJlbnQudHlwZT09PSJwcm9wZXJ0eSIpe2NvbnN0IG89dC5wYXJlbnQua2V5Tm9kZS52YWx1ZTtlLnZpc2l0KHU9Pih1LnR5cGU9PT0icHJvcGVydHkiJiZ1LmtleU5vZGUudmFsdWU9PT1vJiZ1LnZhbHVlTm9kZSYmdS52YWx1ZU5vZGUudHlwZT09PSJhcnJheSImJnUudmFsdWVOb2RlLml0ZW1zLmZvckVhY2gobCksITApKX1lbHNlIHQuaXRlbXMuZm9yRWFjaChsKX1nZXRWYWx1ZUNvbXBsZXRpb25zKGUsdCxuLHIsaSxzLGEpe2xldCBsPXIsbyx1O2lmKG4mJihuLnR5cGU9PT0ic3RyaW5nInx8bi50eXBlPT09Im51bWJlciJ8fG4udHlwZT09PSJib29sZWFuInx8bi50eXBlPT09Im51bGwiKSYmKGw9bi5vZmZzZXQrbi5sZW5ndGgsdT1uLG49bi5wYXJlbnQpLCFuKXt0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZS5zY2hlbWEsIiIscyxhKTtyZXR1cm59aWYobi50eXBlPT09InByb3BlcnR5IiYmcj4obi5jb2xvbk9mZnNldHx8MCkpe2NvbnN0IGg9bi52YWx1ZU5vZGU7aWYoaCYmcj5oLm9mZnNldCtoLmxlbmd0aClyZXR1cm47bz1uLmtleU5vZGUudmFsdWUsbj1uLnBhcmVudH1pZihuJiYobyE9PXZvaWQgMHx8bi50eXBlPT09ImFycmF5Iikpe2NvbnN0IGg9dGhpcy5ldmFsdWF0ZVNlcGFyYXRvckFmdGVyKGksbCksYz10LmdldE1hdGNoaW5nU2NoZW1hcyhlLnNjaGVtYSxuLm9mZnNldCx1KTtmb3IoY29uc3QgZCBvZiBjKWlmKGQubm9kZT09PW4mJiFkLmludmVydGVkJiZkLnNjaGVtYSl7aWYobi50eXBlPT09ImFycmF5IiYmZC5zY2hlbWEuaXRlbXMpe2xldCBtPXM7aWYoZC5zY2hlbWEudW5pcXVlSXRlbXMpe2NvbnN0IGc9bmV3IFNldDtuLmNoaWxkcmVuLmZvckVhY2gocD0+e3AudHlwZSE9PSJhcnJheSImJnAudHlwZSE9PSJvYmplY3QiJiZnLmFkZCh0aGlzLmdldExhYmVsRm9yVmFsdWUoYXQocCkpKX0pLG09ey4uLnMsYWRkKHApe2cuaGFzKHAubGFiZWwpfHxzLmFkZChwKX19fWlmKEFycmF5LmlzQXJyYXkoZC5zY2hlbWEuaXRlbXMpKXtjb25zdCBnPXRoaXMuZmluZEl0ZW1BdE9mZnNldChuLGkscik7ZzxkLnNjaGVtYS5pdGVtcy5sZW5ndGgmJnRoaXMuYWRkU2NoZW1hVmFsdWVDb21wbGV0aW9ucyhkLnNjaGVtYS5pdGVtc1tnXSxoLG0sYSl9ZWxzZSB0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZC5zY2hlbWEuaXRlbXMsaCxtLGEpfWlmKG8hPT12b2lkIDApe2xldCBtPSExO2lmKGQuc2NoZW1hLnByb3BlcnRpZXMpe2NvbnN0IGc9ZC5zY2hlbWEucHJvcGVydGllc1tvXTtnJiYobT0hMCx0aGlzLmFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZyxoLHMsYSkpfWlmKGQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzJiYhbSl7Zm9yKGNvbnN0IGcgb2YgT2JqZWN0LmtleXMoZC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXMpKWlmKExuKGcpPy50ZXN0KG8pKXttPSEwO2NvbnN0IHY9ZC5zY2hlbWEucGF0dGVyblByb3BlcnRpZXNbZ107dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKHYsaCxzLGEpfX1pZihkLnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyYmIW0pe2NvbnN0IGc9ZC5zY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXM7dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGcsaCxzLGEpfX19bz09PSIkc2NoZW1hIiYmIW4ucGFyZW50JiZ0aGlzLmFkZERvbGxhclNjaGVtYUNvbXBsZXRpb25zKGgscyksYS5ib29sZWFuJiYodGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCEwLGgscyksdGhpcy5hZGRCb29sZWFuVmFsdWVDb21wbGV0aW9uKCExLGgscykpLGEubnVsbCYmdGhpcy5hZGROdWxsVmFsdWVDb21wbGV0aW9uKGgscyl9fWdldENvbnRyaWJ1dGVkVmFsdWVDb21wbGV0aW9ucyhlLHQsbixyLGkscyl7aWYoIXQpdGhpcy5jb250cmlidXRpb25zLmZvckVhY2goYT0+e2NvbnN0IGw9YS5jb2xsZWN0RGVmYXVsdENvbXBsZXRpb25zKHIudXJpLGkpO2wmJnMucHVzaChsKX0pO2Vsc2UgaWYoKHQudHlwZT09PSJzdHJpbmcifHx0LnR5cGU9PT0ibnVtYmVyInx8dC50eXBlPT09ImJvb2xlYW4ifHx0LnR5cGU9PT0ibnVsbCIpJiYodD10LnBhcmVudCksdCYmdC50eXBlPT09InByb3BlcnR5IiYmbj4odC5jb2xvbk9mZnNldHx8MCkpe2NvbnN0IGE9dC5rZXlOb2RlLnZhbHVlLGw9dC52YWx1ZU5vZGU7aWYoKCFsfHxuPD1sLm9mZnNldCtsLmxlbmd0aCkmJnQucGFyZW50KXtjb25zdCBvPVdyKHQucGFyZW50KTt0aGlzLmNvbnRyaWJ1dGlvbnMuZm9yRWFjaCh1PT57Y29uc3QgaD11LmNvbGxlY3RWYWx1ZUNvbXBsZXRpb25zKHIudXJpLG8sYSxpKTtoJiZzLnB1c2goaCl9KX19fWFkZFNjaGVtYVZhbHVlQ29tcGxldGlvbnMoZSx0LG4scil7dHlwZW9mIGU9PSJvYmplY3QiJiYodGhpcy5hZGRFbnVtVmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5hZGREZWZhdWx0VmFsdWVDb21wbGV0aW9ucyhlLHQsbiksdGhpcy5jb2xsZWN0VHlwZXMoZSxyKSxBcnJheS5pc0FycmF5KGUuYWxsT2YpJiZlLmFsbE9mLmZvckVhY2goaT0+dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGksdCxuLHIpKSxBcnJheS5pc0FycmF5KGUuYW55T2YpJiZlLmFueU9mLmZvckVhY2goaT0+dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGksdCxuLHIpKSxBcnJheS5pc0FycmF5KGUub25lT2YpJiZlLm9uZU9mLmZvckVhY2goaT0+dGhpcy5hZGRTY2hlbWFWYWx1ZUNvbXBsZXRpb25zKGksdCxuLHIpKSl9YWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZSx0LG4scj0wKXtsZXQgaT0hMTtpZihBZShlLmRlZmF1bHQpKXtsZXQgcz1lLnR5cGUsYT1lLmRlZmF1bHQ7Zm9yKGxldCBvPXI7bz4wO28tLSlhPVthXSxzPSJhcnJheSI7Y29uc3QgbD17a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKHMpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShhKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGEsdCksaW5zZXJ0VGV4dEZvcm1hdDpyZS5TbmlwcGV0fTt0aGlzLmRvZXNTdXBwb3J0c0xhYmVsRGV0YWlscygpP2wubGFiZWxEZXRhaWxzPXtkZXNjcmlwdGlvbjpFKCJEZWZhdWx0IHZhbHVlIil9OmwuZGV0YWlsPUUoIkRlZmF1bHQgdmFsdWUiKSxuLmFkZChsKSxpPSEwfUFycmF5LmlzQXJyYXkoZS5leGFtcGxlcykmJmUuZXhhbXBsZXMuZm9yRWFjaChzPT57bGV0IGE9ZS50eXBlLGw9cztmb3IobGV0IG89cjtvPjA7by0tKWw9W2xdLGE9ImFycmF5IjtuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGEpLGxhYmVsOnRoaXMuZ2V0TGFiZWxGb3JWYWx1ZShsKSxpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKGwsdCksaW5zZXJ0VGV4dEZvcm1hdDpyZS5TbmlwcGV0fSksaT0hMH0pLEFycmF5LmlzQXJyYXkoZS5kZWZhdWx0U25pcHBldHMpJiZlLmRlZmF1bHRTbmlwcGV0cy5mb3JFYWNoKHM9PntsZXQgYT1lLnR5cGUsbD1zLmJvZHksbz1zLmxhYmVsLHUsaDtpZihBZShsKSl7ZS50eXBlO2ZvcihsZXQgYz1yO2M+MDtjLS0pbD1bbF07dT10aGlzLmdldEluc2VydFRleHRGb3JTbmlwcGV0VmFsdWUobCx0KSxoPXRoaXMuZ2V0RmlsdGVyVGV4dEZvclNuaXBwZXRWYWx1ZShsKSxvPW98fHRoaXMuZ2V0TGFiZWxGb3JTbmlwcGV0VmFsdWUobCl9ZWxzZSBpZih0eXBlb2Ygcy5ib2R5VGV4dD09InN0cmluZyIpe2xldCBjPSIiLGQ9IiIsbT0iIjtmb3IobGV0IGc9cjtnPjA7Zy0tKWM9YyttK2BbCmAsZD1kK2AKYCttKyJdIixtKz0iCSIsYT0iYXJyYXkiO3U9YyttK3MuYm9keVRleHQuc3BsaXQoYApgKS5qb2luKGAKYCttKStkK3Qsbz1vfHx1LGg9dS5yZXBsYWNlKC9bXG5dL2csIiIpfWVsc2UgcmV0dXJuO24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoYSksbGFiZWw6byxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChzLm1hcmtkb3duRGVzY3JpcHRpb24pfHxzLmRlc2NyaXB0aW9uLGluc2VydFRleHQ6dSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZmlsdGVyVGV4dDpofSksaT0hMH0pLCFpJiZ0eXBlb2YgZS5pdGVtcz09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUuaXRlbXMpJiZyPDUmJnRoaXMuYWRkRGVmYXVsdFZhbHVlQ29tcGxldGlvbnMoZS5pdGVtcyx0LG4scisxKX1hZGRFbnVtVmFsdWVDb21wbGV0aW9ucyhlLHQsbil7aWYoQWUoZS5jb25zdCkmJm4uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoZS50eXBlKSxsYWJlbDp0aGlzLmdldExhYmVsRm9yVmFsdWUoZS5jb25zdCksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLmNvbnN0LHQpLGluc2VydFRleHRGb3JtYXQ6cmUuU25pcHBldCxkb2N1bWVudGF0aW9uOnRoaXMuZnJvbU1hcmt1cChlLm1hcmtkb3duRGVzY3JpcHRpb24pfHxlLmRlc2NyaXB0aW9ufSksQXJyYXkuaXNBcnJheShlLmVudW0pKWZvcihsZXQgcj0wLGk9ZS5lbnVtLmxlbmd0aDtyPGk7cisrKXtjb25zdCBzPWUuZW51bVtyXTtsZXQgYT10aGlzLmZyb21NYXJrdXAoZS5tYXJrZG93bkRlc2NyaXB0aW9uKXx8ZS5kZXNjcmlwdGlvbjtlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucyYmcjxlLm1hcmtkb3duRW51bURlc2NyaXB0aW9ucy5sZW5ndGgmJnRoaXMuZG9lc1N1cHBvcnRNYXJrZG93bigpP2E9dGhpcy5mcm9tTWFya3VwKGUubWFya2Rvd25FbnVtRGVzY3JpcHRpb25zW3JdKTplLmVudW1EZXNjcmlwdGlvbnMmJnI8ZS5lbnVtRGVzY3JpcHRpb25zLmxlbmd0aCYmKGE9ZS5lbnVtRGVzY3JpcHRpb25zW3JdKSxuLmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKGUudHlwZSksbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKHMpLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUocyx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjphfSl9fWNvbGxlY3RUeXBlcyhlLHQpe2lmKEFycmF5LmlzQXJyYXkoZS5lbnVtKXx8QWUoZS5jb25zdCkpcmV0dXJuO2NvbnN0IG49ZS50eXBlO0FycmF5LmlzQXJyYXkobik/bi5mb3JFYWNoKHI9PnRbcl09ITApOm4mJih0W25dPSEwKX1hZGRGaWxsZXJWYWx1ZUNvbXBsZXRpb25zKGUsdCxuKXtlLm9iamVjdCYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgib2JqZWN0IiksbGFiZWw6Int9IixpbnNlcnRUZXh0OnRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh7fSx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZGV0YWlsOkUoIk5ldyBvYmplY3QiKSxkb2N1bWVudGF0aW9uOiIifSksZS5hcnJheSYmbi5hZGQoe2tpbmQ6dGhpcy5nZXRTdWdnZXN0aW9uS2luZCgiYXJyYXkiKSxsYWJlbDoiW10iLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKFtdLHQpLGluc2VydFRleHRGb3JtYXQ6cmUuU25pcHBldCxkZXRhaWw6RSgiTmV3IGFycmF5IiksZG9jdW1lbnRhdGlvbjoiIn0pfWFkZEJvb2xlYW5WYWx1ZUNvbXBsZXRpb24oZSx0LG4pe24uYWRkKHtraW5kOnRoaXMuZ2V0U3VnZ2VzdGlvbktpbmQoImJvb2xlYW4iKSxsYWJlbDplPyJ0cnVlIjoiZmFsc2UiLGluc2VydFRleHQ6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KSxpbnNlcnRUZXh0Rm9ybWF0OnJlLlNuaXBwZXQsZG9jdW1lbnRhdGlvbjoiIn0pfWFkZE51bGxWYWx1ZUNvbXBsZXRpb24oZSx0KXt0LmFkZCh7a2luZDp0aGlzLmdldFN1Z2dlc3Rpb25LaW5kKCJudWxsIiksbGFiZWw6Im51bGwiLGluc2VydFRleHQ6Im51bGwiK2UsaW5zZXJ0VGV4dEZvcm1hdDpyZS5TbmlwcGV0LGRvY3VtZW50YXRpb246IiJ9KX1hZGREb2xsYXJTY2hlbWFDb21wbGV0aW9ucyhlLHQpe3RoaXMuc2NoZW1hU2VydmljZS5nZXRSZWdpc3RlcmVkU2NoZW1hSWRzKHI9PnI9PT0iaHR0cCJ8fHI9PT0iaHR0cHMiKS5mb3JFYWNoKHI9PntyLnN0YXJ0c1dpdGgoImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtIikmJihyPXIrIiMiKSx0LmFkZCh7a2luZDp2ZS5Nb2R1bGUsbGFiZWw6dGhpcy5nZXRMYWJlbEZvclZhbHVlKHIpLGZpbHRlclRleHQ6dGhpcy5nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUociksaW5zZXJ0VGV4dDp0aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShyLGUpLGluc2VydFRleHRGb3JtYXQ6cmUuU25pcHBldCxkb2N1bWVudGF0aW9uOiIifSl9KX1nZXRMYWJlbEZvclZhbHVlKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX1nZXRWYWx1ZUZyb21MYWJlbChlKXtyZXR1cm4gSlNPTi5wYXJzZShlKX1nZXRGaWx0ZXJUZXh0Rm9yVmFsdWUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpfWdldEZpbHRlclRleHRGb3JTbmlwcGV0VmFsdWUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9Z2V0TGFiZWxGb3JTbmlwcGV0VmFsdWUoZSl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpLnJlcGxhY2UoL1wkXHtcZCs6KFtefV0rKVx9fFwkXGQrL2csIiQxIil9Z2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxcJFx9XS9nLCJcXCQmIil9Z2V0SW5zZXJ0VGV4dEZvclZhbHVlKGUsdCl7Y29uc3Qgbj1KU09OLnN0cmluZ2lmeShlLG51bGwsIgkiKTtyZXR1cm4gbj09PSJ7fSI/InskMX0iK3Q6bj09PSJbXSI/IlskMV0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KG4rdCl9Z2V0SW5zZXJ0VGV4dEZvclNuaXBwZXRWYWx1ZShlLHQpe3JldHVybiB6cihlLCIiLHI9PnR5cGVvZiByPT0ic3RyaW5nIiYmclswXT09PSJeIj9yLnN1YnN0cigxKTpKU09OLnN0cmluZ2lmeShyKSkrdH1nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKGUsdCl7c3dpdGNoKHR5cGVvZiBlKXtjYXNlIm9iamVjdCI6cmV0dXJuIGU9PT1udWxsPyIkezE6bnVsbH0iK3Q6dGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KTtjYXNlInN0cmluZyI6bGV0IG49SlNPTi5zdHJpbmdpZnkoZSk7cmV0dXJuIG49bi5zdWJzdHIoMSxuLmxlbmd0aC0yKSxuPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvclBsYWluVGV4dChuKSwnIiR7MTonK24rJ30iJyt0O2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnJldHVybiIkezE6IitKU09OLnN0cmluZ2lmeShlKSsifSIrdH1yZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoZSx0KX1nZXRTdWdnZXN0aW9uS2luZChlKXtpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PWU7ZT10Lmxlbmd0aD4wP3RbMF06dm9pZCAwfWlmKCFlKXJldHVybiB2ZS5WYWx1ZTtzd2l0Y2goZSl7Y2FzZSJzdHJpbmciOnJldHVybiB2ZS5WYWx1ZTtjYXNlIm9iamVjdCI6cmV0dXJuIHZlLk1vZHVsZTtjYXNlInByb3BlcnR5IjpyZXR1cm4gdmUuUHJvcGVydHk7ZGVmYXVsdDpyZXR1cm4gdmUuVmFsdWV9fWdldExhYmVsVGV4dEZvck1hdGNoaW5nTm9kZShlLHQpe3N3aXRjaChlLnR5cGUpe2Nhc2UiYXJyYXkiOnJldHVybiJbXSI7Y2FzZSJvYmplY3QiOnJldHVybiJ7fSI7ZGVmYXVsdDpyZXR1cm4gdC5nZXRUZXh0KCkuc3Vic3RyKGUub2Zmc2V0LGUubGVuZ3RoKX19Z2V0SW5zZXJ0VGV4dEZvck1hdGNoaW5nTm9kZShlLHQsbil7c3dpdGNoKGUudHlwZSl7Y2FzZSJhcnJheSI6cmV0dXJuIHRoaXMuZ2V0SW5zZXJ0VGV4dEZvclZhbHVlKFtdLG4pO2Nhc2Uib2JqZWN0IjpyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yVmFsdWUoe30sbik7ZGVmYXVsdDpjb25zdCByPXQuZ2V0VGV4dCgpLnN1YnN0cihlLm9mZnNldCxlLmxlbmd0aCkrbjtyZXR1cm4gdGhpcy5nZXRJbnNlcnRUZXh0Rm9yUGxhaW5UZXh0KHIpfX1nZXRJbnNlcnRUZXh0Rm9yUHJvcGVydHkoZSx0LG4scil7Y29uc3QgaT10aGlzLmdldEluc2VydFRleHRGb3JWYWx1ZShlLCIiKTtpZighbilyZXR1cm4gaTtjb25zdCBzPWkrIjogIjtsZXQgYSxsPTA7aWYodCl7aWYoQXJyYXkuaXNBcnJheSh0LmRlZmF1bHRTbmlwcGV0cykpe2lmKHQuZGVmYXVsdFNuaXBwZXRzLmxlbmd0aD09PTEpe2NvbnN0IG89dC5kZWZhdWx0U25pcHBldHNbMF0uYm9keTtBZShvKSYmKGE9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yU25pcHBldFZhbHVlKG8sIiIpKX1sKz10LmRlZmF1bHRTbmlwcGV0cy5sZW5ndGh9aWYodC5lbnVtJiYoIWEmJnQuZW51bS5sZW5ndGg9PT0xJiYoYT10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5lbnVtWzBdLCIiKSksbCs9dC5lbnVtLmxlbmd0aCksQWUodC5jb25zdCkmJihhfHwoYT10aGlzLmdldEluc2VydFRleHRGb3JHdWVzc2VkVmFsdWUodC5jb25zdCwiIikpLGwrKyksQWUodC5kZWZhdWx0KSYmKGF8fChhPXRoaXMuZ2V0SW5zZXJ0VGV4dEZvckd1ZXNzZWRWYWx1ZSh0LmRlZmF1bHQsIiIpKSxsKyspLEFycmF5LmlzQXJyYXkodC5leGFtcGxlcykmJnQuZXhhbXBsZXMubGVuZ3RoJiYoYXx8KGE9dGhpcy5nZXRJbnNlcnRUZXh0Rm9yR3Vlc3NlZFZhbHVlKHQuZXhhbXBsZXNbMF0sIiIpKSxsKz10LmV4YW1wbGVzLmxlbmd0aCksbD09PTApe2xldCBvPUFycmF5LmlzQXJyYXkodC50eXBlKT90LnR5cGVbMF06dC50eXBlO3N3aXRjaChvfHwodC5wcm9wZXJ0aWVzP289Im9iamVjdCI6dC5pdGVtcyYmKG89ImFycmF5IikpLG8pe2Nhc2UiYm9vbGVhbiI6YT0iJDEiO2JyZWFrO2Nhc2Uic3RyaW5nIjphPSciJDEiJzticmVhaztjYXNlIm9iamVjdCI6YT0ieyQxfSI7YnJlYWs7Y2FzZSJhcnJheSI6YT0iWyQxXSI7YnJlYWs7Y2FzZSJudW1iZXIiOmNhc2UiaW50ZWdlciI6YT0iJHsxOjB9IjticmVhaztjYXNlIm51bGwiOmE9IiR7MTpudWxsfSI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gaX19fXJldHVybighYXx8bD4xKSYmKGE9IiQxIikscythK3J9Z2V0Q3VycmVudFdvcmQoZSx0KXtsZXQgbj10LTE7Y29uc3Qgcj1lLmdldFRleHQoKTtmb3IoO24+PTAmJmAgCQpcclx2Ijp7WyxdfWAuaW5kZXhPZihyLmNoYXJBdChuKSk9PT0tMTspbi0tO3JldHVybiByLnN1YnN0cmluZyhuKzEsdCl9ZXZhbHVhdGVTZXBhcmF0b3JBZnRlcihlLHQpe2NvbnN0IG49cnQoZS5nZXRUZXh0KCksITApO3N3aXRjaChuLnNldFBvc2l0aW9uKHQpLG4uc2NhbigpKXtjYXNlIDU6Y2FzZSAyOmNhc2UgNDpjYXNlIDE3OnJldHVybiIiO2RlZmF1bHQ6cmV0dXJuIiwifX1maW5kSXRlbUF0T2Zmc2V0KGUsdCxuKXtjb25zdCByPXJ0KHQuZ2V0VGV4dCgpLCEwKSxpPWUuaXRlbXM7Zm9yKGxldCBzPWkubGVuZ3RoLTE7cz49MDtzLS0pe2NvbnN0IGE9aVtzXTtpZihuPmEub2Zmc2V0K2EubGVuZ3RoKXJldHVybiByLnNldFBvc2l0aW9uKGEub2Zmc2V0K2EubGVuZ3RoKSxyLnNjYW4oKT09PTUmJm4+PXIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk/cysxOnM7aWYobj49YS5vZmZzZXQpcmV0dXJuIHN9cmV0dXJuIDB9aXNJbkNvbW1lbnQoZSx0LG4pe2NvbnN0IHI9cnQoZS5nZXRUZXh0KCksITEpO3Iuc2V0UG9zaXRpb24odCk7bGV0IGk9ci5zY2FuKCk7Zm9yKDtpIT09MTcmJnIuZ2V0VG9rZW5PZmZzZXQoKStyLmdldFRva2VuTGVuZ3RoKCk8bjspaT1yLnNjYW4oKTtyZXR1cm4oaT09PTEyfHxpPT09MTMpJiZyLmdldFRva2VuT2Zmc2V0KCk8PW59ZnJvbU1hcmt1cChlKXtpZihlJiZ0aGlzLmRvZXNTdXBwb3J0TWFya2Rvd24oKSlyZXR1cm57a2luZDppdC5NYXJrZG93bix2YWx1ZTplfX1kb2VzU3VwcG9ydE1hcmtkb3duKCl7aWYoIUFlKHRoaXMuc3VwcG9ydHNNYXJrZG93bikpe2NvbnN0IGU9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50Py5jb21wbGV0aW9uPy5jb21wbGV0aW9uSXRlbT8uZG9jdW1lbnRhdGlvbkZvcm1hdDt0aGlzLnN1cHBvcnRzTWFya2Rvd249QXJyYXkuaXNBcnJheShlKSYmZS5pbmRleE9mKGl0Lk1hcmtkb3duKSE9PS0xfXJldHVybiB0aGlzLnN1cHBvcnRzTWFya2Rvd259ZG9lc1N1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycygpe3JldHVybiBBZSh0aGlzLnN1cHBvcnRzQ29tbWl0Q2hhcmFjdGVycyl8fCh0aGlzLmxhYmVsRGV0YWlsc1N1cHBvcnQ9dGhpcy5jbGllbnRDYXBhYmlsaXRpZXMudGV4dERvY3VtZW50Py5jb21wbGV0aW9uPy5jb21wbGV0aW9uSXRlbT8uY29tbWl0Q2hhcmFjdGVyc1N1cHBvcnQpLHRoaXMuc3VwcG9ydHNDb21taXRDaGFyYWN0ZXJzfWRvZXNTdXBwb3J0c0xhYmVsRGV0YWlscygpe3JldHVybiBBZSh0aGlzLmxhYmVsRGV0YWlsc1N1cHBvcnQpfHwodGhpcy5sYWJlbERldGFpbHNTdXBwb3J0PXRoaXMuY2xpZW50Q2FwYWJpbGl0aWVzLnRleHREb2N1bWVudD8uY29tcGxldGlvbj8uY29tcGxldGlvbkl0ZW0/LmxhYmVsRGV0YWlsc1N1cHBvcnQpLHRoaXMubGFiZWxEZXRhaWxzU3VwcG9ydH19LERjPWNsYXNze2NvbnN0cnVjdG9yKGUsdD1bXSxuKXt0aGlzLnNjaGVtYVNlcnZpY2U9ZSx0aGlzLmNvbnRyaWJ1dGlvbnM9dCx0aGlzLnByb21pc2U9bnx8UHJvbWlzZX1kb0hvdmVyKGUsdCxuKXtjb25zdCByPWUub2Zmc2V0QXQodCk7bGV0IGk9bi5nZXROb2RlRnJvbU9mZnNldChyKTtpZighaXx8KGkudHlwZT09PSJvYmplY3QifHxpLnR5cGU9PT0iYXJyYXkiKSYmcj5pLm9mZnNldCsxJiZyPGkub2Zmc2V0K2kubGVuZ3RoLTEpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpO2NvbnN0IHM9aTtpZihpLnR5cGU9PT0ic3RyaW5nIil7Y29uc3QgdT1pLnBhcmVudDtpZih1JiZ1LnR5cGU9PT0icHJvcGVydHkiJiZ1LmtleU5vZGU9PT1pJiYoaT11LnZhbHVlTm9kZSwhaSkpcmV0dXJuIHRoaXMucHJvbWlzZS5yZXNvbHZlKG51bGwpfWNvbnN0IGE9VS5jcmVhdGUoZS5wb3NpdGlvbkF0KHMub2Zmc2V0KSxlLnBvc2l0aW9uQXQocy5vZmZzZXQrcy5sZW5ndGgpKSxsPXU9Pih7Y29udGVudHM6dSxyYW5nZTphfSksbz1XcihpKTtmb3IobGV0IHU9dGhpcy5jb250cmlidXRpb25zLmxlbmd0aC0xO3U+PTA7dS0tKXtjb25zdCBjPXRoaXMuY29udHJpYnV0aW9uc1t1XS5nZXRJbmZvQ29udHJpYnV0aW9uKGUudXJpLG8pO2lmKGMpcmV0dXJuIGMudGhlbihkPT5sKGQpKX1yZXR1cm4gdGhpcy5zY2hlbWFTZXJ2aWNlLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLG4pLnRoZW4odT0+e2lmKHUmJmkpe2NvbnN0IGg9bi5nZXRNYXRjaGluZ1NjaGVtYXModS5zY2hlbWEsaS5vZmZzZXQpO2xldCBjLGQsbSxnO2guZXZlcnkodj0+e2lmKHYubm9kZT09PWkmJiF2LmludmVydGVkJiZ2LnNjaGVtYSYmKGM9Y3x8di5zY2hlbWEudGl0bGUsZD1kfHx2LnNjaGVtYS5tYXJrZG93bkRlc2NyaXB0aW9ufHxHcih2LnNjaGVtYS5kZXNjcmlwdGlvbiksdi5zY2hlbWEuZW51bSkpe2NvbnN0IF89di5zY2hlbWEuZW51bS5pbmRleE9mKGF0KGkpKTt2LnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnM/bT12LnNjaGVtYS5tYXJrZG93bkVudW1EZXNjcmlwdGlvbnNbX106di5zY2hlbWEuZW51bURlc2NyaXB0aW9ucyYmKG09R3Iodi5zY2hlbWEuZW51bURlc2NyaXB0aW9uc1tfXSkpLG0mJihnPXYuc2NoZW1hLmVudW1bX10sdHlwZW9mIGchPSJzdHJpbmciJiYoZz1KU09OLnN0cmluZ2lmeShnKSkpfXJldHVybiEwfSk7bGV0IHA9IiI7cmV0dXJuIGMmJihwPUdyKGMpKSxkJiYocC5sZW5ndGg+MCYmKHArPWAKCmApLHArPWQpLG0mJihwLmxlbmd0aD4wJiYocCs9YAoKYCkscCs9YFxgJHtPYyhnKX1cYDogJHttfWApLGwoW3BdKX1yZXR1cm4gbnVsbH0pfX07ZnVuY3Rpb24gR3IoZSl7aWYoZSlyZXR1cm4gZS5yZXBsYWNlKC8oW15cblxyXSkoXHI/XG4pKFteXG5ccl0pL2dtLGAkMQoKJDNgKS5yZXBsYWNlKC9bXFxgKl97fVtcXSgpIytcLS4hXS9nLCJcXCQmIil9ZnVuY3Rpb24gT2MoZSl7cmV0dXJuIGUuaW5kZXhPZigiYCIpIT09LTE/ImBgICIrZSsiIGBgIjplfXZhciBCYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuanNvblNjaGVtYVNlcnZpY2U9ZSx0aGlzLnByb21pc2U9dCx0aGlzLnZhbGlkYXRpb25FbmFibGVkPSEwfWNvbmZpZ3VyZShlKXtlJiYodGhpcy52YWxpZGF0aW9uRW5hYmxlZD1lLnZhbGlkYXRlIT09ITEsdGhpcy5jb21tZW50U2V2ZXJpdHk9ZS5hbGxvd0NvbW1lbnRzP3ZvaWQgMDpiZS5FcnJvcil9ZG9WYWxpZGF0aW9uKGUsdCxuLHIpe2lmKCF0aGlzLnZhbGlkYXRpb25FbmFibGVkKXJldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShbXSk7Y29uc3QgaT1bXSxzPXt9LGE9bz0+e2NvbnN0IHU9by5yYW5nZS5zdGFydC5saW5lKyIgIitvLnJhbmdlLnN0YXJ0LmNoYXJhY3RlcisiICIrby5tZXNzYWdlO3NbdV18fChzW3VdPSEwLGkucHVzaChvKSl9LGw9bz0+e2xldCB1PW4/LnRyYWlsaW5nQ29tbWFzP0VuKG4udHJhaWxpbmdDb21tYXMpOmJlLkVycm9yLGg9bj8uY29tbWVudHM/RW4obi5jb21tZW50cyk6dGhpcy5jb21tZW50U2V2ZXJpdHksYz1uPy5zY2hlbWFWYWxpZGF0aW9uP0VuKG4uc2NoZW1hVmFsaWRhdGlvbik6YmUuV2FybmluZyxkPW4/LnNjaGVtYVJlcXVlc3Q/RW4obi5zY2hlbWFSZXF1ZXN0KTpiZS5XYXJuaW5nO2lmKG8pe2NvbnN0IG09KGcscCk9PntpZih0LnJvb3QmJmQpe2NvbnN0IHY9dC5yb290LF89di50eXBlPT09Im9iamVjdCI/di5wcm9wZXJ0aWVzWzBdOnZvaWQgMDtpZihfJiZfLmtleU5vZGUudmFsdWU9PT0iJHNjaGVtYSIpe2NvbnN0IE49Xy52YWx1ZU5vZGV8fF8seD1VLmNyZWF0ZShlLnBvc2l0aW9uQXQoTi5vZmZzZXQpLGUucG9zaXRpb25BdChOLm9mZnNldCtOLmxlbmd0aCkpO2EoJGUuY3JlYXRlKHgsZyxkLHApKX1lbHNle2NvbnN0IE49VS5jcmVhdGUoZS5wb3NpdGlvbkF0KHYub2Zmc2V0KSxlLnBvc2l0aW9uQXQodi5vZmZzZXQrMSkpO2EoJGUuY3JlYXRlKE4sZyxkLHApKX19fTtpZihvLmVycm9ycy5sZW5ndGgpbShvLmVycm9yc1swXSxILlNjaGVtYVJlc29sdmVFcnJvcik7ZWxzZSBpZihjKXtmb3IoY29uc3QgcCBvZiBvLndhcm5pbmdzKW0ocCxILlNjaGVtYVVuc3VwcG9ydGVkRmVhdHVyZSk7Y29uc3QgZz10LnZhbGlkYXRlKGUsby5zY2hlbWEsYyxuPy5zY2hlbWFEcmFmdCk7ZyYmZy5mb3JFYWNoKGEpfV9vKG8uc2NoZW1hKSYmKGg9dm9pZCAwKSxMbyhvLnNjaGVtYSkmJih1PXZvaWQgMCl9Zm9yKGNvbnN0IG0gb2YgdC5zeW50YXhFcnJvcnMpe2lmKG0uY29kZT09PUguVHJhaWxpbmdDb21tYSl7aWYodHlwZW9mIHUhPSJudW1iZXIiKWNvbnRpbnVlO20uc2V2ZXJpdHk9dX1hKG0pfWlmKHR5cGVvZiBoPT0ibnVtYmVyIil7Y29uc3QgbT1FKCJDb21tZW50cyBhcmUgbm90IHBlcm1pdHRlZCBpbiBKU09OLiIpO3QuY29tbWVudHMuZm9yRWFjaChnPT57YSgkZS5jcmVhdGUoZyxtLGgsSC5Db21tZW50Tm90UGVybWl0dGVkKSl9KX1yZXR1cm4gaX07aWYocil7Y29uc3Qgbz1yLmlkfHwic2NoZW1hc2VydmljZTovL3VudGl0bGVkLyIrVWMrKztyZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5yZWdpc3RlckV4dGVybmFsU2NoZW1hKHt1cmk6byxzY2hlbWE6cn0pLmdldFJlc29sdmVkU2NoZW1hKCkudGhlbihoPT5sKGgpKX1yZXR1cm4gdGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFGb3JSZXNvdXJjZShlLnVyaSx0KS50aGVuKG89PmwobykpfWdldExhbmd1YWdlU3RhdHVzKGUsdCl7cmV0dXJue3NjaGVtYXM6dGhpcy5qc29uU2NoZW1hU2VydmljZS5nZXRTY2hlbWFVUklzRm9yUmVzb3VyY2UoZS51cmksdCl9fX0sVWM9MDtmdW5jdGlvbiBfbyhlKXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKFRlKGUuYWxsb3dDb21tZW50cykpcmV0dXJuIGUuYWxsb3dDb21tZW50cztpZihlLmFsbE9mKWZvcihjb25zdCB0IG9mIGUuYWxsT2Ype2NvbnN0IG49X28odCk7aWYoVGUobikpcmV0dXJuIG59fX1mdW5jdGlvbiBMbyhlKXtpZihlJiZ0eXBlb2YgZT09Im9iamVjdCIpe2lmKFRlKGUuYWxsb3dUcmFpbGluZ0NvbW1hcykpcmV0dXJuIGUuYWxsb3dUcmFpbGluZ0NvbW1hcztjb25zdCB0PWU7aWYoVGUodC5hbGxvd3NUcmFpbGluZ0NvbW1hcykpcmV0dXJuIHQuYWxsb3dzVHJhaWxpbmdDb21tYXM7aWYoZS5hbGxPZilmb3IoY29uc3QgbiBvZiBlLmFsbE9mKXtjb25zdCByPUxvKG4pO2lmKFRlKHIpKXJldHVybiByfX19ZnVuY3Rpb24gRW4oZSl7c3dpdGNoKGUpe2Nhc2UiZXJyb3IiOnJldHVybiBiZS5FcnJvcjtjYXNlIndhcm5pbmciOnJldHVybiBiZS5XYXJuaW5nO2Nhc2UiaWdub3JlIjpyZXR1cm59fXZhciBObz00OCxxYz01NywkYz02NSxSbj05NyxqYz0xMDI7ZnVuY3Rpb24gdGUoZSl7cmV0dXJuIGU8Tm8/MDplPD1xYz9lLU5vOihlPFJuJiYoZSs9Um4tJGMpLGU+PVJuJiZlPD1qYz9lLVJuKzEwOjApfWZ1bmN0aW9uIEhjKGUpe2lmKGVbMF09PT0iIyIpc3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6cmV0dXJue3JlZDp0ZShlLmNoYXJDb2RlQXQoMSkpKjE3LzI1NSxncmVlbjp0ZShlLmNoYXJDb2RlQXQoMikpKjE3LzI1NSxibHVlOnRlKGUuY2hhckNvZGVBdCgzKSkqMTcvMjU1LGFscGhhOjF9O2Nhc2UgNTpyZXR1cm57cmVkOnRlKGUuY2hhckNvZGVBdCgxKSkqMTcvMjU1LGdyZWVuOnRlKGUuY2hhckNvZGVBdCgyKSkqMTcvMjU1LGJsdWU6dGUoZS5jaGFyQ29kZUF0KDMpKSoxNy8yNTUsYWxwaGE6dGUoZS5jaGFyQ29kZUF0KDQpKSoxNy8yNTV9O2Nhc2UgNzpyZXR1cm57cmVkOih0ZShlLmNoYXJDb2RlQXQoMSkpKjE2K3RlKGUuY2hhckNvZGVBdCgyKSkpLzI1NSxncmVlbjoodGUoZS5jaGFyQ29kZUF0KDMpKSoxNit0ZShlLmNoYXJDb2RlQXQoNCkpKS8yNTUsYmx1ZToodGUoZS5jaGFyQ29kZUF0KDUpKSoxNit0ZShlLmNoYXJDb2RlQXQoNikpKS8yNTUsYWxwaGE6MX07Y2FzZSA5OnJldHVybntyZWQ6KHRlKGUuY2hhckNvZGVBdCgxKSkqMTYrdGUoZS5jaGFyQ29kZUF0KDIpKSkvMjU1LGdyZWVuOih0ZShlLmNoYXJDb2RlQXQoMykpKjE2K3RlKGUuY2hhckNvZGVBdCg0KSkpLzI1NSxibHVlOih0ZShlLmNoYXJDb2RlQXQoNSkpKjE2K3RlKGUuY2hhckNvZGVBdCg2KSkpLzI1NSxhbHBoYToodGUoZS5jaGFyQ29kZUF0KDcpKSoxNit0ZShlLmNoYXJDb2RlQXQoOCkpKS8yNTV9fX12YXIgV2M9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5zY2hlbWFTZXJ2aWNlPWV9ZmluZERvY3VtZW50U3ltYm9scyhlLHQsbj17cmVzdWx0TGltaXQ6TnVtYmVyLk1BWF9WQUxVRX0pe2NvbnN0IHI9dC5yb290O2lmKCFyKXJldHVybltdO2xldCBpPW4ucmVzdWx0TGltaXR8fE51bWJlci5NQVhfVkFMVUU7Y29uc3Qgcz1lLnVyaTtpZigocz09PSJ2c2NvZGU6Ly9kZWZhdWx0c2V0dGluZ3Mva2V5YmluZGluZ3MuanNvbiJ8fEd0KHMudG9Mb3dlckNhc2UoKSwiL3VzZXIva2V5YmluZGluZ3MuanNvbiIpKSYmci50eXBlPT09ImFycmF5Iil7Y29uc3QgYz1bXTtmb3IoY29uc3QgZCBvZiByLml0ZW1zKWlmKGQudHlwZT09PSJvYmplY3QiKXtmb3IoY29uc3QgbSBvZiBkLnByb3BlcnRpZXMpaWYobS5rZXlOb2RlLnZhbHVlPT09ImtleSImJm0udmFsdWVOb2RlKXtjb25zdCBnPUF0LmNyZWF0ZShlLnVyaSxaZShlLGQpKTtpZihjLnB1c2goe25hbWU6U28obS52YWx1ZU5vZGUpLGtpbmQ6SWUuRnVuY3Rpb24sbG9jYXRpb246Z30pLGktLSxpPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQocyksY319cmV0dXJuIGN9Y29uc3QgYT1be25vZGU6cixjb250YWluZXJOYW1lOiIifV07bGV0IGw9MCxvPSExO2NvbnN0IHU9W10saD0oYyxkKT0+e2MudHlwZT09PSJhcnJheSI/Yy5pdGVtcy5mb3JFYWNoKG09PnttJiZhLnB1c2goe25vZGU6bSxjb250YWluZXJOYW1lOmR9KX0pOmMudHlwZT09PSJvYmplY3QiJiZjLnByb3BlcnRpZXMuZm9yRWFjaChtPT57Y29uc3QgZz1tLnZhbHVlTm9kZTtpZihnKWlmKGk+MCl7aS0tO2NvbnN0IHA9QXQuY3JlYXRlKGUudXJpLFplKGUsbSkpLHY9ZD9kKyIuIittLmtleU5vZGUudmFsdWU6bS5rZXlOb2RlLnZhbHVlO3UucHVzaCh7bmFtZTp0aGlzLmdldEtleUxhYmVsKG0pLGtpbmQ6dGhpcy5nZXRTeW1ib2xLaW5kKGcudHlwZSksbG9jYXRpb246cCxjb250YWluZXJOYW1lOmR9KSxhLnB1c2goe25vZGU6Zyxjb250YWluZXJOYW1lOnZ9KX1lbHNlIG89ITB9KX07Zm9yKDtsPGEubGVuZ3RoOyl7Y29uc3QgYz1hW2wrK107aChjLm5vZGUsYy5jb250YWluZXJOYW1lKX1yZXR1cm4gbyYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHMpLHV9ZmluZERvY3VtZW50U3ltYm9sczIoZSx0LG49e3Jlc3VsdExpbWl0Ok51bWJlci5NQVhfVkFMVUV9KXtjb25zdCByPXQucm9vdDtpZighcilyZXR1cm5bXTtsZXQgaT1uLnJlc3VsdExpbWl0fHxOdW1iZXIuTUFYX1ZBTFVFO2NvbnN0IHM9ZS51cmk7aWYoKHM9PT0idnNjb2RlOi8vZGVmYXVsdHNldHRpbmdzL2tleWJpbmRpbmdzLmpzb24ifHxHdChzLnRvTG93ZXJDYXNlKCksIi91c2VyL2tleWJpbmRpbmdzLmpzb24iKSkmJnIudHlwZT09PSJhcnJheSIpe2NvbnN0IGM9W107Zm9yKGNvbnN0IGQgb2Ygci5pdGVtcylpZihkLnR5cGU9PT0ib2JqZWN0Iil7Zm9yKGNvbnN0IG0gb2YgZC5wcm9wZXJ0aWVzKWlmKG0ua2V5Tm9kZS52YWx1ZT09PSJrZXkiJiZtLnZhbHVlTm9kZSl7Y29uc3QgZz1aZShlLGQpLHA9WmUoZSxtLmtleU5vZGUpO2lmKGMucHVzaCh7bmFtZTpTbyhtLnZhbHVlTm9kZSksa2luZDpJZS5GdW5jdGlvbixyYW5nZTpnLHNlbGVjdGlvblJhbmdlOnB9KSxpLS0saTw9MClyZXR1cm4gbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHMpLGN9fXJldHVybiBjfWNvbnN0IGE9W10sbD1be25vZGU6cixyZXN1bHQ6YX1dO2xldCBvPTAsdT0hMTtjb25zdCBoPShjLGQpPT57Yy50eXBlPT09ImFycmF5Ij9jLml0ZW1zLmZvckVhY2goKG0sZyk9PntpZihtKWlmKGk+MCl7aS0tO2NvbnN0IHA9WmUoZSxtKSx2PXAsTj17bmFtZTpTdHJpbmcoZyksa2luZDp0aGlzLmdldFN5bWJvbEtpbmQobS50eXBlKSxyYW5nZTpwLHNlbGVjdGlvblJhbmdlOnYsY2hpbGRyZW46W119O2QucHVzaChOKSxsLnB1c2goe3Jlc3VsdDpOLmNoaWxkcmVuLG5vZGU6bX0pfWVsc2UgdT0hMH0pOmMudHlwZT09PSJvYmplY3QiJiZjLnByb3BlcnRpZXMuZm9yRWFjaChtPT57Y29uc3QgZz1tLnZhbHVlTm9kZTtpZihnKWlmKGk+MCl7aS0tO2NvbnN0IHA9WmUoZSxtKSx2PVplKGUsbS5rZXlOb2RlKSxfPVtdLE49e25hbWU6dGhpcy5nZXRLZXlMYWJlbChtKSxraW5kOnRoaXMuZ2V0U3ltYm9sS2luZChnLnR5cGUpLHJhbmdlOnAsc2VsZWN0aW9uUmFuZ2U6dixjaGlsZHJlbjpfLGRldGFpbDp0aGlzLmdldERldGFpbChnKX07ZC5wdXNoKE4pLGwucHVzaCh7cmVzdWx0Ol8sbm9kZTpnfSl9ZWxzZSB1PSEwfSl9O2Zvcig7bzxsLmxlbmd0aDspe2NvbnN0IGM9bFtvKytdO2goYy5ub2RlLGMucmVzdWx0KX1yZXR1cm4gdSYmbiYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQmJm4ub25SZXN1bHRMaW1pdEV4Y2VlZGVkKHMpLGF9Z2V0U3ltYm9sS2luZChlKXtzd2l0Y2goZSl7Y2FzZSJvYmplY3QiOnJldHVybiBJZS5Nb2R1bGU7Y2FzZSJzdHJpbmciOnJldHVybiBJZS5TdHJpbmc7Y2FzZSJudW1iZXIiOnJldHVybiBJZS5OdW1iZXI7Y2FzZSJhcnJheSI6cmV0dXJuIEllLkFycmF5O2Nhc2UiYm9vbGVhbiI6cmV0dXJuIEllLkJvb2xlYW47ZGVmYXVsdDpyZXR1cm4gSWUuVmFyaWFibGV9fWdldEtleUxhYmVsKGUpe2xldCB0PWUua2V5Tm9kZS52YWx1ZTtyZXR1cm4gdCYmKHQ9dC5yZXBsYWNlKC9bXG5dL2csIuKGtSIpKSx0JiZ0LnRyaW0oKT90OmAiJHt0fSJgfWdldERldGFpbChlKXtpZihlKXtpZihlLnR5cGU9PT0iYm9vbGVhbiJ8fGUudHlwZT09PSJudW1iZXIifHxlLnR5cGU9PT0ibnVsbCJ8fGUudHlwZT09PSJzdHJpbmciKXJldHVybiBTdHJpbmcoZS52YWx1ZSk7aWYoZS50eXBlPT09ImFycmF5IilyZXR1cm4gZS5jaGlsZHJlbi5sZW5ndGg/dm9pZCAwOiJbXSI7aWYoZS50eXBlPT09Im9iamVjdCIpcmV0dXJuIGUuY2hpbGRyZW4ubGVuZ3RoP3ZvaWQgMDoie30ifX1maW5kRG9jdW1lbnRDb2xvcnMoZSx0LG4pe3JldHVybiB0aGlzLnNjaGVtYVNlcnZpY2UuZ2V0U2NoZW1hRm9yUmVzb3VyY2UoZS51cmksdCkudGhlbihyPT57Y29uc3QgaT1bXTtpZihyKXtsZXQgcz1uJiZ0eXBlb2Ygbi5yZXN1bHRMaW1pdD09Im51bWJlciI/bi5yZXN1bHRMaW1pdDpOdW1iZXIuTUFYX1ZBTFVFO2NvbnN0IGE9dC5nZXRNYXRjaGluZ1NjaGVtYXMoci5zY2hlbWEpLGw9e307Zm9yKGNvbnN0IG8gb2YgYSlpZighby5pbnZlcnRlZCYmby5zY2hlbWEmJihvLnNjaGVtYS5mb3JtYXQ9PT0iY29sb3IifHxvLnNjaGVtYS5mb3JtYXQ9PT0iY29sb3ItaGV4IikmJm8ubm9kZSYmby5ub2RlLnR5cGU9PT0ic3RyaW5nIil7Y29uc3QgdT1TdHJpbmcoby5ub2RlLm9mZnNldCk7aWYoIWxbdV0pe2NvbnN0IGg9SGMoYXQoby5ub2RlKSk7aWYoaCl7Y29uc3QgYz1aZShlLG8ubm9kZSk7aS5wdXNoKHtjb2xvcjpoLHJhbmdlOmN9KX1pZihsW3VdPSEwLHMtLSxzPD0wKXJldHVybiBuJiZuLm9uUmVzdWx0TGltaXRFeGNlZWRlZCYmbi5vblJlc3VsdExpbWl0RXhjZWVkZWQoZS51cmkpLGl9fX1yZXR1cm4gaX0pfWdldENvbG9yUHJlc2VudGF0aW9ucyhlLHQsbixyKXtjb25zdCBpPVtdLHM9TWF0aC5yb3VuZChuLnJlZCoyNTUpLGE9TWF0aC5yb3VuZChuLmdyZWVuKjI1NSksbD1NYXRoLnJvdW5kKG4uYmx1ZSoyNTUpO2Z1bmN0aW9uIG8oaCl7Y29uc3QgYz1oLnRvU3RyaW5nKDE2KTtyZXR1cm4gYy5sZW5ndGghPT0yPyIwIitjOmN9bGV0IHU7cmV0dXJuIG4uYWxwaGE9PT0xP3U9YCMke28ocyl9JHtvKGEpfSR7byhsKX1gOnU9YCMke28ocyl9JHtvKGEpfSR7byhsKX0ke28oTWF0aC5yb3VuZChuLmFscGhhKjI1NSkpfWAsaS5wdXNoKHtsYWJlbDp1LHRleHRFZGl0OlBlLnJlcGxhY2UocixKU09OLnN0cmluZ2lmeSh1KSl9KSxpfX07ZnVuY3Rpb24gWmUoZSx0KXtyZXR1cm4gVS5jcmVhdGUoZS5wb3NpdGlvbkF0KHQub2Zmc2V0KSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgpKX1mdW5jdGlvbiBTbyhlKXtyZXR1cm4gYXQoZSl8fEUoIjxlbXB0eT4iKX12YXIgSnI9e3NjaGVtYUFzc29jaWF0aW9uczpbXSxzY2hlbWFzOnsiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIjp7JHNjaGVtYToiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNC9zY2hlbWEjIixkZWZpbml0aW9uczp7c2NoZW1hQXJyYXk6e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLGl0ZW1zOnskcmVmOiIjIn19LHBvc2l0aXZlSW50ZWdlcjp7dHlwZToiaW50ZWdlciIsbWluaW11bTowfSxwb3NpdGl2ZUludGVnZXJEZWZhdWx0MDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9LHtkZWZhdWx0OjB9XX0sc2ltcGxlVHlwZXM6e3R5cGU6InN0cmluZyIsZW51bTpbImFycmF5IiwiYm9vbGVhbiIsImludGVnZXIiLCJudWxsIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIl19LHN0cmluZ0FycmF5Ont0eXBlOiJhcnJheSIsaXRlbXM6e3R5cGU6InN0cmluZyJ9LG1pbkl0ZW1zOjEsdW5pcXVlSXRlbXM6ITB9fSx0eXBlOiJvYmplY3QiLHByb3BlcnRpZXM6e2lkOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sJHNjaGVtYTp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaSJ9LHRpdGxlOnt0eXBlOiJzdHJpbmcifSxkZXNjcmlwdGlvbjp7dHlwZToic3RyaW5nIn0sZGVmYXVsdDp7fSxtdWx0aXBsZU9mOnt0eXBlOiJudW1iZXIiLG1pbmltdW06MCxleGNsdXNpdmVNaW5pbXVtOiEwfSxtYXhpbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNYXhpbXVtOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtaW5pbXVtOnt0eXBlOiJudW1iZXIifSxleGNsdXNpdmVNaW5pbXVtOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxtYXhMZW5ndGg6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pbkxlbmd0aDp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlckRlZmF1bHQwIn1dfSxwYXR0ZXJuOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoicmVnZXgifSxhZGRpdGlvbmFsSXRlbXM6e2FueU9mOlt7dHlwZToiYm9vbGVhbiJ9LHskcmVmOiIjIn1dLGRlZmF1bHQ6e319LGl0ZW1zOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XSxkZWZhdWx0Ont9fSxtYXhJdGVtczp7YWxsT2Y6W3skcmVmOiIjL2RlZmluaXRpb25zL3Bvc2l0aXZlSW50ZWdlciJ9XX0sbWluSXRlbXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0sdW5pcXVlSXRlbXM6e3R5cGU6ImJvb2xlYW4iLGRlZmF1bHQ6ITF9LG1heFByb3BlcnRpZXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXIifV19LG1pblByb3BlcnRpZXM6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9wb3NpdGl2ZUludGVnZXJEZWZhdWx0MCJ9XX0scmVxdWlyZWQ6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX0sYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7dHlwZToiYm9vbGVhbiJ9LHskcmVmOiIjIn1dLGRlZmF1bHQ6e319LGRlZmluaXRpb25zOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0scHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHBhdHRlcm5Qcm9wZXJ0aWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnskcmVmOiIjIn0sZGVmYXVsdDp7fX0sZGVwZW5kZW5jaWVzOnt0eXBlOiJvYmplY3QiLGFkZGl0aW9uYWxQcm9wZXJ0aWVzOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheSJ9XX19LGVudW06e3R5cGU6ImFycmF5IixtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfSx0eXBlOnthbnlPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSx7dHlwZToiYXJyYXkiLGl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH1dfSxmb3JtYXQ6e2FueU9mOlt7dHlwZToic3RyaW5nIixlbnVtOlsiZGF0ZS10aW1lIiwidXJpIiwiZW1haWwiLCJob3N0bmFtZSIsImlwdjQiLCJpcHY2IiwicmVnZXgiXX0se3R5cGU6InN0cmluZyJ9XX0sYWxsT2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sYW55T2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sb25lT2Y6e2FsbE9mOlt7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XX0sbm90OnthbGxPZjpbeyRyZWY6IiMifV19fSxkZXBlbmRlbmNpZXM6e2V4Y2x1c2l2ZU1heGltdW06WyJtYXhpbXVtIl0sZXhjbHVzaXZlTWluaW11bTpbIm1pbmltdW0iXX0sZGVmYXVsdDp7fX0sImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hIyI6e2RlZmluaXRpb25zOntzY2hlbWFBcnJheTp7dHlwZToiYXJyYXkiLG1pbkl0ZW1zOjEsaXRlbXM6eyRyZWY6IiMifX0sbm9uTmVnYXRpdmVJbnRlZ2VyOnt0eXBlOiJpbnRlZ2VyIixtaW5pbXVtOjB9LG5vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwOnthbGxPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0se2RlZmF1bHQ6MH1dfSxzaW1wbGVUeXBlczp7ZW51bTpbImFycmF5IiwiYm9vbGVhbiIsImludGVnZXIiLCJudWxsIiwibnVtYmVyIiwib2JqZWN0Iiwic3RyaW5nIl19LHN0cmluZ0FycmF5Ont0eXBlOiJhcnJheSIsaXRlbXM6e3R5cGU6InN0cmluZyJ9LHVuaXF1ZUl0ZW1zOiEwLGRlZmF1bHQ6W119fSx0eXBlOlsib2JqZWN0IiwiYm9vbGVhbiJdLHByb3BlcnRpZXM6eyRpZDp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaS1yZWZlcmVuY2UifSwkc2NoZW1hOnt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXJpIn0sJHJlZjp7dHlwZToic3RyaW5nIixmb3JtYXQ6InVyaS1yZWZlcmVuY2UifSwkY29tbWVudDp7dHlwZToic3RyaW5nIn0sdGl0bGU6e3R5cGU6InN0cmluZyJ9LGRlc2NyaXB0aW9uOnt0eXBlOiJzdHJpbmcifSxkZWZhdWx0OiEwLHJlYWRPbmx5Ont0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxleGFtcGxlczp7dHlwZToiYXJyYXkiLGl0ZW1zOiEwfSxtdWx0aXBsZU9mOnt0eXBlOiJudW1iZXIiLGV4Y2x1c2l2ZU1pbmltdW06MH0sbWF4aW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWF4aW11bTp7dHlwZToibnVtYmVyIn0sbWluaW11bTp7dHlwZToibnVtYmVyIn0sZXhjbHVzaXZlTWluaW11bTp7dHlwZToibnVtYmVyIn0sbWF4TGVuZ3RoOnskcmVmOiIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlciJ9LG1pbkxlbmd0aDp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHBhdHRlcm46e3R5cGU6InN0cmluZyIsZm9ybWF0OiJyZWdleCJ9LGFkZGl0aW9uYWxJdGVtczp7JHJlZjoiIyJ9LGl0ZW1zOnthbnlPZjpbeyRyZWY6IiMifSx7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9XSxkZWZhdWx0OiEwfSxtYXhJdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXIifSxtaW5JdGVtczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHVuaXF1ZUl0ZW1zOnt0eXBlOiJib29sZWFuIixkZWZhdWx0OiExfSxjb250YWluczp7JHJlZjoiIyJ9LG1heFByb3BlcnRpZXM6eyRyZWY6IiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyIn0sbWluUHJvcGVydGllczp7JHJlZjoiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MCJ9LHJlcXVpcmVkOnskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In0sYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZpbml0aW9uczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LGRlZmF1bHQ6e319LHByb3BlcnRpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6eyRyZWY6IiMifSxkZWZhdWx0Ont9fSxwYXR0ZXJuUHJvcGVydGllczp7dHlwZToib2JqZWN0IixhZGRpdGlvbmFsUHJvcGVydGllczp7JHJlZjoiIyJ9LHByb3BlcnR5TmFtZXM6e2Zvcm1hdDoicmVnZXgifSxkZWZhdWx0Ont9fSxkZXBlbmRlbmNpZXM6e3R5cGU6Im9iamVjdCIsYWRkaXRpb25hbFByb3BlcnRpZXM6e2FueU9mOlt7JHJlZjoiIyJ9LHskcmVmOiIjL2RlZmluaXRpb25zL3N0cmluZ0FycmF5In1dfX0scHJvcGVydHlOYW1lczp7JHJlZjoiIyJ9LGNvbnN0OiEwLGVudW06e3R5cGU6ImFycmF5IixpdGVtczohMCxtaW5JdGVtczoxLHVuaXF1ZUl0ZW1zOiEwfSx0eXBlOnthbnlPZjpbeyRyZWY6IiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXMifSx7dHlwZToiYXJyYXkiLGl0ZW1zOnskcmVmOiIjL2RlZmluaXRpb25zL3NpbXBsZVR5cGVzIn0sbWluSXRlbXM6MSx1bmlxdWVJdGVtczohMH1dfSxmb3JtYXQ6e3R5cGU6InN0cmluZyJ9LGNvbnRlbnRNZWRpYVR5cGU6e3R5cGU6InN0cmluZyJ9LGNvbnRlbnRFbmNvZGluZzp7dHlwZToic3RyaW5nIn0saWY6eyRyZWY6IiMifSx0aGVuOnskcmVmOiIjIn0sZWxzZTp7JHJlZjoiIyJ9LGFsbE9mOnskcmVmOiIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5In0sYW55T2Y6eyRyZWY6IiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXkifSxvbmVPZjp7JHJlZjoiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheSJ9LG5vdDp7JHJlZjoiIyJ9fSxkZWZhdWx0OiEwfX19LHpjPXtpZDpFKCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRzY2hlbWE6RSgiVGhlIHNjaGVtYSB0byB2ZXJpZnkgdGhpcyBkb2N1bWVudCBhZ2FpbnN0LiIpLHRpdGxlOkUoIkEgZGVzY3JpcHRpdmUgdGl0bGUgb2YgdGhlIGVsZW1lbnQuIiksZGVzY3JpcHRpb246RSgiQSBsb25nIGRlc2NyaXB0aW9uIG9mIHRoZSBlbGVtZW50LiBVc2VkIGluIGhvdmVyIG1lbnVzIGFuZCBzdWdnZXN0aW9ucy4iKSxkZWZhdWx0OkUoIkEgZGVmYXVsdCB2YWx1ZS4gVXNlZCBieSBzdWdnZXN0aW9ucy4iKSxtdWx0aXBsZU9mOkUoIkEgbnVtYmVyIHRoYXQgc2hvdWxkIGNsZWFubHkgZGl2aWRlIHRoZSBjdXJyZW50IHZhbHVlIChpLmUuIGhhdmUgbm8gcmVtYWluZGVyKS4iKSxtYXhpbXVtOkUoIlRoZSBtYXhpbXVtIG51bWVyaWNhbCB2YWx1ZSwgaW5jbHVzaXZlIGJ5IGRlZmF1bHQuIiksZXhjbHVzaXZlTWF4aW11bTpFKCJNYWtlcyB0aGUgbWF4aW11bSBwcm9wZXJ0eSBleGNsdXNpdmUuIiksbWluaW11bTpFKCJUaGUgbWluaW11bSBudW1lcmljYWwgdmFsdWUsIGluY2x1c2l2ZSBieSBkZWZhdWx0LiIpLGV4Y2x1c2l2ZU1pbmltdW06RSgiTWFrZXMgdGhlIG1pbmltdW0gcHJvcGVydHkgZXhjbHVzaXZlLiIpLG1heExlbmd0aDpFKCJUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzdHJpbmcuIiksbWluTGVuZ3RoOkUoIlRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIHN0cmluZy4iKSxwYXR0ZXJuOkUoIkEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIHRoZSBzdHJpbmcgYWdhaW5zdC4gSXQgaXMgbm90IGltcGxpY2l0bHkgYW5jaG9yZWQuIiksYWRkaXRpb25hbEl0ZW1zOkUoIkZvciBhcnJheXMsIG9ubHkgd2hlbiBpdGVtcyBpcyBzZXQgYXMgYW4gYXJyYXkuIElmIGl0IGlzIGEgc2NoZW1hLCB0aGVuIHRoaXMgc2NoZW1hIHZhbGlkYXRlcyBpdGVtcyBhZnRlciB0aGUgb25lcyBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1zIGFycmF5LiBJZiBpdCBpcyBmYWxzZSwgdGhlbiBhZGRpdGlvbmFsIGl0ZW1zIHdpbGwgY2F1c2UgdmFsaWRhdGlvbiB0byBmYWlsLiIpLGl0ZW1zOkUoIkZvciBhcnJheXMuIENhbiBlaXRoZXIgYmUgYSBzY2hlbWEgdG8gdmFsaWRhdGUgZXZlcnkgZWxlbWVudCBhZ2FpbnN0IG9yIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gdmFsaWRhdGUgZWFjaCBpdGVtIGFnYWluc3QgaW4gb3JkZXIgKHRoZSBmaXJzdCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgZmlyc3QgZWxlbWVudCwgdGhlIHNlY29uZCBzY2hlbWEgd2lsbCB2YWxpZGF0ZSB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi4iKSxtYXhJdGVtczpFKCJUaGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gYmUgaW5zaWRlIGFuIGFycmF5LiBJbmNsdXNpdmUuIiksbWluSXRlbXM6RSgiVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIGluc2lkZSBhbiBhcnJheS4gSW5jbHVzaXZlLiIpLHVuaXF1ZUl0ZW1zOkUoIklmIGFsbCBvZiB0aGUgaXRlbXMgaW4gdGhlIGFycmF5IG11c3QgYmUgdW5pcXVlLiBEZWZhdWx0cyB0byBmYWxzZS4iKSxtYXhQcm9wZXJ0aWVzOkUoIlRoZSBtYXhpbXVtIG51bWJlciBvZiBwcm9wZXJ0aWVzIGFuIG9iamVjdCBjYW4gaGF2ZS4gSW5jbHVzaXZlLiIpLG1pblByb3BlcnRpZXM6RSgiVGhlIG1pbmltdW0gbnVtYmVyIG9mIHByb3BlcnRpZXMgYW4gb2JqZWN0IGNhbiBoYXZlLiBJbmNsdXNpdmUuIikscmVxdWlyZWQ6RSgiQW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgcHJvcGVydGllcyByZXF1aXJlZCBvbiB0aGlzIG9iamVjdC4iKSxhZGRpdGlvbmFsUHJvcGVydGllczpFKCJFaXRoZXIgYSBzY2hlbWEgb3IgYSBib29sZWFuLiBJZiBhIHNjaGVtYSwgdGhlbiB1c2VkIHRvIHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzIG5vdCBtYXRjaGVkIGJ5ICdwcm9wZXJ0aWVzJyBvciAncGF0dGVyblByb3BlcnRpZXMnLiBJZiBmYWxzZSwgdGhlbiBhbnkgcHJvcGVydGllcyBub3QgbWF0Y2hlZCBieSBlaXRoZXIgd2lsbCBjYXVzZSB0aGlzIHNjaGVtYSB0byBmYWlsLiIpLGRlZmluaXRpb25zOkUoIk5vdCB1c2VkIGZvciB2YWxpZGF0aW9uLiBQbGFjZSBzdWJzY2hlbWFzIGhlcmUgdGhhdCB5b3Ugd2lzaCB0byByZWZlcmVuY2UgaW5saW5lIHdpdGggJHJlZi4iKSxwcm9wZXJ0aWVzOkUoIkEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIHRvIHNjaGVtYXMgZm9yIGVhY2ggcHJvcGVydHkuIikscGF0dGVyblByb3BlcnRpZXM6RSgiQSBtYXAgb2YgcmVndWxhciBleHByZXNzaW9ucyBvbiBwcm9wZXJ0eSBuYW1lcyB0byBzY2hlbWFzIGZvciBtYXRjaGluZyBwcm9wZXJ0aWVzLiIpLGRlcGVuZGVuY2llczpFKCJBIG1hcCBvZiBwcm9wZXJ0eSBuYW1lcyB0byBlaXRoZXIgYW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgb3IgYSBzY2hlbWEuIEFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIG1lYW5zIHRoZSBwcm9wZXJ0eSBuYW1lZCBpbiB0aGUga2V5IGRlcGVuZHMgb24gdGhlIHByb3BlcnRpZXMgaW4gdGhlIGFycmF5IGJlaW5nIHByZXNlbnQgaW4gdGhlIG9iamVjdCBpbiBvcmRlciB0byBiZSB2YWxpZC4gSWYgdGhlIHZhbHVlIGlzIGEgc2NoZW1hLCB0aGVuIHRoZSBzY2hlbWEgaXMgb25seSBhcHBsaWVkIHRvIHRoZSBvYmplY3QgaWYgdGhlIHByb3BlcnR5IGluIHRoZSBrZXkgZXhpc3RzIG9uIHRoZSBvYmplY3QuIiksZW51bTpFKCJUaGUgc2V0IG9mIGxpdGVyYWwgdmFsdWVzIHRoYXQgYXJlIHZhbGlkLiIpLHR5cGU6RSgiRWl0aGVyIGEgc3RyaW5nIG9mIG9uZSBvZiB0aGUgYmFzaWMgc2NoZW1hIHR5cGVzIChudW1iZXIsIGludGVnZXIsIG51bGwsIGFycmF5LCBvYmplY3QsIGJvb2xlYW4sIHN0cmluZykgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIGEgc3Vic2V0IG9mIHRob3NlIHR5cGVzLiIpLGZvcm1hdDpFKCJEZXNjcmliZXMgdGhlIGZvcm1hdCBleHBlY3RlZCBmb3IgdGhlIHZhbHVlLiIpLGFsbE9mOkUoIkFuIGFycmF5IG9mIHNjaGVtYXMsIGFsbCBvZiB3aGljaCBtdXN0IG1hdGNoLiIpLGFueU9mOkUoIkFuIGFycmF5IG9mIHNjaGVtYXMsIHdoZXJlIGF0IGxlYXN0IG9uZSBtdXN0IG1hdGNoLiIpLG9uZU9mOkUoIkFuIGFycmF5IG9mIHNjaGVtYXMsIGV4YWN0bHkgb25lIG9mIHdoaWNoIG11c3QgbWF0Y2guIiksbm90OkUoIkEgc2NoZW1hIHdoaWNoIG11c3Qgbm90IG1hdGNoLiIpLCRpZDpFKCJBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgc2NoZW1hLiIpLCRyZWY6RSgiUmVmZXJlbmNlIGEgZGVmaW5pdGlvbiBob3N0ZWQgb24gYW55IGxvY2F0aW9uLiIpLCRjb21tZW50OkUoIkNvbW1lbnRzIGZyb20gc2NoZW1hIGF1dGhvcnMgdG8gcmVhZGVycyBvciBtYWludGFpbmVycyBvZiB0aGUgc2NoZW1hLiIpLHJlYWRPbmx5OkUoIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgaW5zdGFuY2UgaXMgbWFuYWdlZCBleGNsdXNpdmVseSBieSB0aGUgb3duaW5nIGF1dGhvcml0eS4iKSxleGFtcGxlczpFKCJTYW1wbGUgSlNPTiB2YWx1ZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBzY2hlbWEsIGZvciB0aGUgcHVycG9zZSBvZiBpbGx1c3RyYXRpbmcgdXNhZ2UuIiksY29udGFpbnM6RSgnQW4gYXJyYXkgaW5zdGFuY2UgaXMgdmFsaWQgYWdhaW5zdCAiY29udGFpbnMiIGlmIGF0IGxlYXN0IG9uZSBvZiBpdHMgZWxlbWVudHMgaXMgdmFsaWQgYWdhaW5zdCB0aGUgZ2l2ZW4gc2NoZW1hLicpLHByb3BlcnR5TmFtZXM6RSgiSWYgdGhlIGluc3RhbmNlIGlzIGFuIG9iamVjdCwgdGhpcyBrZXl3b3JkIHZhbGlkYXRlcyBpZiBldmVyeSBwcm9wZXJ0eSBuYW1lIGluIHRoZSBpbnN0YW5jZSB2YWxpZGF0ZXMgYWdhaW5zdCB0aGUgcHJvdmlkZWQgc2NoZW1hLiIpLGNvbnN0OkUoIkFuIGluc3RhbmNlIHZhbGlkYXRlcyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGlzIGtleXdvcmQgaWYgaXRzIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiB0aGUga2V5d29yZC4iKSxjb250ZW50TWVkaWFUeXBlOkUoIkRlc2NyaWJlcyB0aGUgbWVkaWEgdHlwZSBvZiBhIHN0cmluZyBwcm9wZXJ0eS4iKSxjb250ZW50RW5jb2Rpbmc6RSgiRGVzY3JpYmVzIHRoZSBjb250ZW50IGVuY29kaW5nIG9mIGEgc3RyaW5nIHByb3BlcnR5LiIpLGlmOkUoJ1RoZSB2YWxpZGF0aW9uIG91dGNvbWUgb2YgdGhlICJpZiIgc3Vic2NoZW1hIGNvbnRyb2xzIHdoaWNoIG9mIHRoZSAidGhlbiIgb3IgImVsc2UiIGtleXdvcmRzIGFyZSBldmFsdWF0ZWQuJyksdGhlbjpFKCdUaGUgImlmIiBzdWJzY2hlbWEgaXMgdXNlZCBmb3IgdmFsaWRhdGlvbiB3aGVuIHRoZSAiaWYiIHN1YnNjaGVtYSBzdWNjZWVkcy4nKSxlbHNlOkUoJ1RoZSAiZWxzZSIgc3Vic2NoZW1hIGlzIHVzZWQgZm9yIHZhbGlkYXRpb24gd2hlbiB0aGUgImlmIiBzdWJzY2hlbWEgZmFpbHMuJyl9O2Zvcihjb25zdCBlIGluIEpyLnNjaGVtYXMpe2NvbnN0IHQ9SnIuc2NoZW1hc1tlXTtmb3IoY29uc3QgbiBpbiB0LnByb3BlcnRpZXMpe2xldCByPXQucHJvcGVydGllc1tuXTt0eXBlb2Ygcj09ImJvb2xlYW4iJiYocj10LnByb3BlcnRpZXNbbl09e30pO2NvbnN0IGk9emNbbl07aSYmKHIuZGVzY3JpcHRpb249aSl9fXZhciBBbzsoKCk9Pnt2YXIgZT17NDcwOmk9PntmdW5jdGlvbiBzKG8pe2lmKHR5cGVvZiBvIT0ic3RyaW5nIil0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkobykpfWZ1bmN0aW9uIGEobyx1KXtmb3IodmFyIGgsYz0iIixkPTAsbT0tMSxnPTAscD0wO3A8PW8ubGVuZ3RoOysrcCl7aWYocDxvLmxlbmd0aCloPW8uY2hhckNvZGVBdChwKTtlbHNle2lmKGg9PT00NylicmVhaztoPTQ3fWlmKGg9PT00Nyl7aWYoIShtPT09cC0xfHxnPT09MSkpaWYobSE9PXAtMSYmZz09PTIpe2lmKGMubGVuZ3RoPDJ8fGQhPT0yfHxjLmNoYXJDb2RlQXQoYy5sZW5ndGgtMSkhPT00Nnx8Yy5jaGFyQ29kZUF0KGMubGVuZ3RoLTIpIT09NDYpe2lmKGMubGVuZ3RoPjIpe3ZhciB2PWMubGFzdEluZGV4T2YoIi8iKTtpZih2IT09Yy5sZW5ndGgtMSl7dj09PS0xPyhjPSIiLGQ9MCk6ZD0oYz1jLnNsaWNlKDAsdikpLmxlbmd0aC0xLWMubGFzdEluZGV4T2YoIi8iKSxtPXAsZz0wO2NvbnRpbnVlfX1lbHNlIGlmKGMubGVuZ3RoPT09Mnx8Yy5sZW5ndGg9PT0xKXtjPSIiLGQ9MCxtPXAsZz0wO2NvbnRpbnVlfX11JiYoYy5sZW5ndGg+MD9jKz0iLy4uIjpjPSIuLiIsZD0yKX1lbHNlIGMubGVuZ3RoPjA/Yys9Ii8iK28uc2xpY2UobSsxLHApOmM9by5zbGljZShtKzEscCksZD1wLW0tMTttPXAsZz0wfWVsc2UgaD09PTQ2JiZnIT09LTE/KytnOmc9LTF9cmV0dXJuIGN9dmFyIGw9e3Jlc29sdmU6ZnVuY3Rpb24oKXtmb3IodmFyIG8sdT0iIixoPSExLGM9YXJndW1lbnRzLmxlbmd0aC0xO2M+PS0xJiYhaDtjLS0pe3ZhciBkO2M+PTA/ZD1hcmd1bWVudHNbY106KG89PT12b2lkIDAmJihvPXByb2Nlc3MuY3dkKCkpLGQ9bykscyhkKSxkLmxlbmd0aCE9PTAmJih1PWQrIi8iK3UsaD1kLmNoYXJDb2RlQXQoMCk9PT00Nyl9cmV0dXJuIHU9YSh1LCFoKSxoP3UubGVuZ3RoPjA/Ii8iK3U6Ii8iOnUubGVuZ3RoPjA/dToiLiJ9LG5vcm1hbGl6ZTpmdW5jdGlvbihvKXtpZihzKG8pLG8ubGVuZ3RoPT09MClyZXR1cm4iLiI7dmFyIHU9by5jaGFyQ29kZUF0KDApPT09NDcsaD1vLmNoYXJDb2RlQXQoby5sZW5ndGgtMSk9PT00NztyZXR1cm4obz1hKG8sIXUpKS5sZW5ndGghPT0wfHx1fHwobz0iLiIpLG8ubGVuZ3RoPjAmJmgmJihvKz0iLyIpLHU/Ii8iK286b30saXNBYnNvbHV0ZTpmdW5jdGlvbihvKXtyZXR1cm4gcyhvKSxvLmxlbmd0aD4wJiZvLmNoYXJDb2RlQXQoMCk9PT00N30sam9pbjpmdW5jdGlvbigpe2lmKGFyZ3VtZW50cy5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIG8sdT0wO3U8YXJndW1lbnRzLmxlbmd0aDsrK3Upe3ZhciBoPWFyZ3VtZW50c1t1XTtzKGgpLGgubGVuZ3RoPjAmJihvPT09dm9pZCAwP289aDpvKz0iLyIraCl9cmV0dXJuIG89PT12b2lkIDA/Ii4iOmwubm9ybWFsaXplKG8pfSxyZWxhdGl2ZTpmdW5jdGlvbihvLHUpe2lmKHMobykscyh1KSxvPT09dXx8KG89bC5yZXNvbHZlKG8pKT09PSh1PWwucmVzb2x2ZSh1KSkpcmV0dXJuIiI7Zm9yKHZhciBoPTE7aDxvLmxlbmd0aCYmby5jaGFyQ29kZUF0KGgpPT09NDc7KytoKTtmb3IodmFyIGM9by5sZW5ndGgsZD1jLWgsbT0xO208dS5sZW5ndGgmJnUuY2hhckNvZGVBdChtKT09PTQ3OysrbSk7Zm9yKHZhciBnPXUubGVuZ3RoLW0scD1kPGc/ZDpnLHY9LTEsXz0wO188PXA7KytfKXtpZihfPT09cCl7aWYoZz5wKXtpZih1LmNoYXJDb2RlQXQobStfKT09PTQ3KXJldHVybiB1LnNsaWNlKG0rXysxKTtpZihfPT09MClyZXR1cm4gdS5zbGljZShtK18pfWVsc2UgZD5wJiYoby5jaGFyQ29kZUF0KGgrXyk9PT00Nz92PV86Xz09PTAmJih2PTApKTticmVha312YXIgTj1vLmNoYXJDb2RlQXQoaCtfKTtpZihOIT09dS5jaGFyQ29kZUF0KG0rXykpYnJlYWs7Tj09PTQ3JiYodj1fKX12YXIgeD0iIjtmb3IoXz1oK3YrMTtfPD1jOysrXylfIT09YyYmby5jaGFyQ29kZUF0KF8pIT09NDd8fCh4Lmxlbmd0aD09PTA/eCs9Ii4uIjp4Kz0iLy4uIik7cmV0dXJuIHgubGVuZ3RoPjA/eCt1LnNsaWNlKG0rdik6KG0rPXYsdS5jaGFyQ29kZUF0KG0pPT09NDcmJisrbSx1LnNsaWNlKG0pKX0sX21ha2VMb25nOmZ1bmN0aW9uKG8pe3JldHVybiBvfSxkaXJuYW1lOmZ1bmN0aW9uKG8pe2lmKHMobyksby5sZW5ndGg9PT0wKXJldHVybiIuIjtmb3IodmFyIHU9by5jaGFyQ29kZUF0KDApLGg9dT09PTQ3LGM9LTEsZD0hMCxtPW8ubGVuZ3RoLTE7bT49MTstLW0paWYoKHU9by5jaGFyQ29kZUF0KG0pKT09PTQ3KXtpZighZCl7Yz1tO2JyZWFrfX1lbHNlIGQ9ITE7cmV0dXJuIGM9PT0tMT9oPyIvIjoiLiI6aCYmYz09PTE/Ii8vIjpvLnNsaWNlKDAsYyl9LGJhc2VuYW1lOmZ1bmN0aW9uKG8sdSl7aWYodSE9PXZvaWQgMCYmdHlwZW9mIHUhPSJzdHJpbmciKXRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtzKG8pO3ZhciBoLGM9MCxkPS0xLG09ITA7aWYodSE9PXZvaWQgMCYmdS5sZW5ndGg+MCYmdS5sZW5ndGg8PW8ubGVuZ3RoKXtpZih1Lmxlbmd0aD09PW8ubGVuZ3RoJiZ1PT09bylyZXR1cm4iIjt2YXIgZz11Lmxlbmd0aC0xLHA9LTE7Zm9yKGg9by5sZW5ndGgtMTtoPj0wOy0taCl7dmFyIHY9by5jaGFyQ29kZUF0KGgpO2lmKHY9PT00Nyl7aWYoIW0pe2M9aCsxO2JyZWFrfX1lbHNlIHA9PT0tMSYmKG09ITEscD1oKzEpLGc+PTAmJih2PT09dS5jaGFyQ29kZUF0KGcpPy0tZz09LTEmJihkPWgpOihnPS0xLGQ9cCkpfXJldHVybiBjPT09ZD9kPXA6ZD09PS0xJiYoZD1vLmxlbmd0aCksby5zbGljZShjLGQpfWZvcihoPW8ubGVuZ3RoLTE7aD49MDstLWgpaWYoby5jaGFyQ29kZUF0KGgpPT09NDcpe2lmKCFtKXtjPWgrMTticmVha319ZWxzZSBkPT09LTEmJihtPSExLGQ9aCsxKTtyZXR1cm4gZD09PS0xPyIiOm8uc2xpY2UoYyxkKX0sZXh0bmFtZTpmdW5jdGlvbihvKXtzKG8pO2Zvcih2YXIgdT0tMSxoPTAsYz0tMSxkPSEwLG09MCxnPW8ubGVuZ3RoLTE7Zz49MDstLWcpe3ZhciBwPW8uY2hhckNvZGVBdChnKTtpZihwIT09NDcpYz09PS0xJiYoZD0hMSxjPWcrMSkscD09PTQ2P3U9PT0tMT91PWc6bSE9PTEmJihtPTEpOnUhPT0tMSYmKG09LTEpO2Vsc2UgaWYoIWQpe2g9ZysxO2JyZWFrfX1yZXR1cm4gdT09PS0xfHxjPT09LTF8fG09PT0wfHxtPT09MSYmdT09PWMtMSYmdT09PWgrMT8iIjpvLnNsaWNlKHUsYyl9LGZvcm1hdDpmdW5jdGlvbihvKXtpZihvPT09bnVsbHx8dHlwZW9mIG8hPSJvYmplY3QiKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAicGF0aE9iamVjdCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBvKTtyZXR1cm4gZnVuY3Rpb24odSxoKXt2YXIgYz1oLmRpcnx8aC5yb290LGQ9aC5iYXNlfHwoaC5uYW1lfHwiIikrKGguZXh0fHwiIik7cmV0dXJuIGM/Yz09PWgucm9vdD9jK2Q6YysiLyIrZDpkfSgwLG8pfSxwYXJzZTpmdW5jdGlvbihvKXtzKG8pO3ZhciB1PXtyb290OiIiLGRpcjoiIixiYXNlOiIiLGV4dDoiIixuYW1lOiIifTtpZihvLmxlbmd0aD09PTApcmV0dXJuIHU7dmFyIGgsYz1vLmNoYXJDb2RlQXQoMCksZD1jPT09NDc7ZD8odS5yb290PSIvIixoPTEpOmg9MDtmb3IodmFyIG09LTEsZz0wLHA9LTEsdj0hMCxfPW8ubGVuZ3RoLTEsTj0wO18+PWg7LS1fKWlmKChjPW8uY2hhckNvZGVBdChfKSkhPT00NylwPT09LTEmJih2PSExLHA9XysxKSxjPT09NDY/bT09PS0xP209XzpOIT09MSYmKE49MSk6bSE9PS0xJiYoTj0tMSk7ZWxzZSBpZighdil7Zz1fKzE7YnJlYWt9cmV0dXJuIG09PT0tMXx8cD09PS0xfHxOPT09MHx8Tj09PTEmJm09PT1wLTEmJm09PT1nKzE/cCE9PS0xJiYodS5iYXNlPXUubmFtZT1nPT09MCYmZD9vLnNsaWNlKDEscCk6by5zbGljZShnLHApKTooZz09PTAmJmQ/KHUubmFtZT1vLnNsaWNlKDEsbSksdS5iYXNlPW8uc2xpY2UoMSxwKSk6KHUubmFtZT1vLnNsaWNlKGcsbSksdS5iYXNlPW8uc2xpY2UoZyxwKSksdS5leHQ9by5zbGljZShtLHApKSxnPjA/dS5kaXI9by5zbGljZSgwLGctMSk6ZCYmKHUuZGlyPSIvIiksdX0sc2VwOiIvIixkZWxpbWl0ZXI6IjoiLHdpbjMyOm51bGwscG9zaXg6bnVsbH07bC5wb3NpeD1sLGkuZXhwb3J0cz1sfX0sdD17fTtmdW5jdGlvbiBuKGkpe3ZhciBzPXRbaV07aWYocyE9PXZvaWQgMClyZXR1cm4gcy5leHBvcnRzO3ZhciBhPXRbaV09e2V4cG9ydHM6e319O3JldHVybiBlW2ldKGEsYS5leHBvcnRzLG4pLGEuZXhwb3J0c31uLmQ9KGkscyk9Pntmb3IodmFyIGEgaW4gcyluLm8ocyxhKSYmIW4ubyhpLGEpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxhLHtlbnVtZXJhYmxlOiEwLGdldDpzW2FdfSl9LG4ubz0oaSxzKT0+T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGkscyksbi5yPWk9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfTt2YXIgcj17fTsoKCk9PntsZXQgaTtuLnIociksbi5kKHIse1VSSTooKT0+ZCxVdGlsczooKT0+RH0pLHR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0Ij9pPXByb2Nlc3MucGxhdGZvcm09PT0id2luMzIiOnR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYoaT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIldpbmRvd3MiKT49MCk7Y29uc3Qgcz0vXlx3W1x3XGQrLi1dKiQvLGE9L15cLy8sbD0vXlwvXC8vO2Z1bmN0aW9uIG8oTSx3KXtpZighTS5zY2hlbWUmJncpdGhyb3cgbmV3IEVycm9yKGBbVXJpRXJyb3JdOiBTY2hlbWUgaXMgbWlzc2luZzoge3NjaGVtZTogIiIsIGF1dGhvcml0eTogIiR7TS5hdXRob3JpdHl9IiwgcGF0aDogIiR7TS5wYXRofSIsIHF1ZXJ5OiAiJHtNLnF1ZXJ5fSIsIGZyYWdtZW50OiAiJHtNLmZyYWdtZW50fSJ9YCk7aWYoTS5zY2hlbWUmJiFzLnRlc3QoTS5zY2hlbWUpKXRocm93IG5ldyBFcnJvcigiW1VyaUVycm9yXTogU2NoZW1lIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTtpZihNLnBhdGgpe2lmKE0uYXV0aG9yaXR5KXtpZighYS50ZXN0KE0ucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihsLnRlc3QoTS5wYXRoKSl0aHJvdyBuZXcgRXJyb3IoJ1tVcmlFcnJvcl06IElmIGEgVVJJIGRvZXMgbm90IGNvbnRhaW4gYW4gYXV0aG9yaXR5IGNvbXBvbmVudCwgdGhlbiB0aGUgcGF0aCBjYW5ub3QgYmVnaW4gd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyAoIi8vIiknKX19Y29uc3QgdT0iIixoPSIvIixjPS9eKChbXjovPyNdKz8pOik/KFwvXC8oW14vPyNdKikpPyhbXj8jXSopKFw/KFteI10qKSk/KCMoLiopKT8vO2NsYXNzIGR7Y29uc3RydWN0b3IodyxTLEMsVCxQLEY9ITEpe2V0KHRoaXMsInNjaGVtZSIpO2V0KHRoaXMsImF1dGhvcml0eSIpO2V0KHRoaXMsInBhdGgiKTtldCh0aGlzLCJxdWVyeSIpO2V0KHRoaXMsImZyYWdtZW50Iik7dHlwZW9mIHc9PSJvYmplY3QiPyh0aGlzLnNjaGVtZT13LnNjaGVtZXx8dSx0aGlzLmF1dGhvcml0eT13LmF1dGhvcml0eXx8dSx0aGlzLnBhdGg9dy5wYXRofHx1LHRoaXMucXVlcnk9dy5xdWVyeXx8dSx0aGlzLmZyYWdtZW50PXcuZnJhZ21lbnR8fHUpOih0aGlzLnNjaGVtZT1mdW5jdGlvbihxLEcpe3JldHVybiBxfHxHP3E6ImZpbGUifSh3LEYpLHRoaXMuYXV0aG9yaXR5PVN8fHUsdGhpcy5wYXRoPWZ1bmN0aW9uKHEsRyl7c3dpdGNoKHEpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjpHP0dbMF0hPT1oJiYoRz1oK0cpOkc9aH1yZXR1cm4gR30odGhpcy5zY2hlbWUsQ3x8dSksdGhpcy5xdWVyeT1UfHx1LHRoaXMuZnJhZ21lbnQ9UHx8dSxvKHRoaXMsRikpfXN0YXRpYyBpc1VyaSh3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIGR8fCEhdyYmdHlwZW9mIHcuYXV0aG9yaXR5PT0ic3RyaW5nIiYmdHlwZW9mIHcuZnJhZ21lbnQ9PSJzdHJpbmciJiZ0eXBlb2Ygdy5wYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHcucXVlcnk9PSJzdHJpbmciJiZ0eXBlb2Ygdy5zY2hlbWU9PSJzdHJpbmciJiZ0eXBlb2Ygdy5mc1BhdGg9PSJzdHJpbmciJiZ0eXBlb2Ygdy53aXRoPT0iZnVuY3Rpb24iJiZ0eXBlb2Ygdy50b1N0cmluZz09ImZ1bmN0aW9uIn1nZXQgZnNQYXRoKCl7cmV0dXJuIE4odGhpcyl9d2l0aCh3KXtpZighdylyZXR1cm4gdGhpcztsZXR7c2NoZW1lOlMsYXV0aG9yaXR5OkMscGF0aDpULHF1ZXJ5OlAsZnJhZ21lbnQ6Rn09dztyZXR1cm4gUz09PXZvaWQgMD9TPXRoaXMuc2NoZW1lOlM9PT1udWxsJiYoUz11KSxDPT09dm9pZCAwP0M9dGhpcy5hdXRob3JpdHk6Qz09PW51bGwmJihDPXUpLFQ9PT12b2lkIDA/VD10aGlzLnBhdGg6VD09PW51bGwmJihUPXUpLFA9PT12b2lkIDA/UD10aGlzLnF1ZXJ5OlA9PT1udWxsJiYoUD11KSxGPT09dm9pZCAwP0Y9dGhpcy5mcmFnbWVudDpGPT09bnVsbCYmKEY9dSksUz09PXRoaXMuc2NoZW1lJiZDPT09dGhpcy5hdXRob3JpdHkmJlQ9PT10aGlzLnBhdGgmJlA9PT10aGlzLnF1ZXJ5JiZGPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBnKFMsQyxULFAsRil9c3RhdGljIHBhcnNlKHcsUz0hMSl7Y29uc3QgQz1jLmV4ZWModyk7cmV0dXJuIEM/bmV3IGcoQ1syXXx8dSxMKENbNF18fHUpLEwoQ1s1XXx8dSksTChDWzddfHx1KSxMKENbOV18fHUpLFMpOm5ldyBnKHUsdSx1LHUsdSl9c3RhdGljIGZpbGUodyl7bGV0IFM9dTtpZihpJiYodz13LnJlcGxhY2UoL1xcL2csaCkpLHdbMF09PT1oJiZ3WzFdPT09aCl7Y29uc3QgQz13LmluZGV4T2YoaCwyKTtDPT09LTE/KFM9dy5zdWJzdHJpbmcoMiksdz1oKTooUz13LnN1YnN0cmluZygyLEMpLHc9dy5zdWJzdHJpbmcoQyl8fGgpfXJldHVybiBuZXcgZygiZmlsZSIsUyx3LHUsdSl9c3RhdGljIGZyb20odyl7Y29uc3QgUz1uZXcgZyh3LnNjaGVtZSx3LmF1dGhvcml0eSx3LnBhdGgsdy5xdWVyeSx3LmZyYWdtZW50KTtyZXR1cm4gbyhTLCEwKSxTfXRvU3RyaW5nKHc9ITEpe3JldHVybiB4KHRoaXMsdyl9dG9KU09OKCl7cmV0dXJuIHRoaXN9c3RhdGljIHJldml2ZSh3KXtpZih3KXtpZih3IGluc3RhbmNlb2YgZClyZXR1cm4gdzt7Y29uc3QgUz1uZXcgZyh3KTtyZXR1cm4gUy5fZm9ybWF0dGVkPXcuZXh0ZXJuYWwsUy5fZnNQYXRoPXcuX3NlcD09PW0/dy5mc1BhdGg6bnVsbCxTfX1yZXR1cm4gd319Y29uc3QgbT1pPzE6dm9pZCAwO2NsYXNzIGcgZXh0ZW5kcyBke2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKTtldCh0aGlzLCJfZm9ybWF0dGVkIixudWxsKTtldCh0aGlzLCJfZnNQYXRoIixudWxsKX1nZXQgZnNQYXRoKCl7cmV0dXJuIHRoaXMuX2ZzUGF0aHx8KHRoaXMuX2ZzUGF0aD1OKHRoaXMpKSx0aGlzLl9mc1BhdGh9dG9TdHJpbmcoUz0hMSl7cmV0dXJuIFM/eCh0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPXgodGhpcywhMSkpLHRoaXMuX2Zvcm1hdHRlZCl9dG9KU09OKCl7Y29uc3QgUz17JG1pZDoxfTtyZXR1cm4gdGhpcy5fZnNQYXRoJiYoUy5mc1BhdGg9dGhpcy5fZnNQYXRoLFMuX3NlcD1tKSx0aGlzLl9mb3JtYXR0ZWQmJihTLmV4dGVybmFsPXRoaXMuX2Zvcm1hdHRlZCksdGhpcy5wYXRoJiYoUy5wYXRoPXRoaXMucGF0aCksdGhpcy5zY2hlbWUmJihTLnNjaGVtZT10aGlzLnNjaGVtZSksdGhpcy5hdXRob3JpdHkmJihTLmF1dGhvcml0eT10aGlzLmF1dGhvcml0eSksdGhpcy5xdWVyeSYmKFMucXVlcnk9dGhpcy5xdWVyeSksdGhpcy5mcmFnbWVudCYmKFMuZnJhZ21lbnQ9dGhpcy5mcmFnbWVudCksU319Y29uc3QgcD17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIHYoTSx3LFMpe2xldCBDLFQ9LTE7Zm9yKGxldCBQPTA7UDxNLmxlbmd0aDtQKyspe2NvbnN0IEY9TS5jaGFyQ29kZUF0KFApO2lmKEY+PTk3JiZGPD0xMjJ8fEY+PTY1JiZGPD05MHx8Rj49NDgmJkY8PTU3fHxGPT09NDV8fEY9PT00Nnx8Rj09PTk1fHxGPT09MTI2fHx3JiZGPT09NDd8fFMmJkY9PT05MXx8UyYmRj09PTkzfHxTJiZGPT09NTgpVCE9PS0xJiYoQys9ZW5jb2RlVVJJQ29tcG9uZW50KE0uc3Vic3RyaW5nKFQsUCkpLFQ9LTEpLEMhPT12b2lkIDAmJihDKz1NLmNoYXJBdChQKSk7ZWxzZXtDPT09dm9pZCAwJiYoQz1NLnN1YnN0cigwLFApKTtjb25zdCBxPXBbRl07cSE9PXZvaWQgMD8oVCE9PS0xJiYoQys9ZW5jb2RlVVJJQ29tcG9uZW50KE0uc3Vic3RyaW5nKFQsUCkpLFQ9LTEpLEMrPXEpOlQ9PT0tMSYmKFQ9UCl9fXJldHVybiBUIT09LTEmJihDKz1lbmNvZGVVUklDb21wb25lbnQoTS5zdWJzdHJpbmcoVCkpKSxDIT09dm9pZCAwP0M6TX1mdW5jdGlvbiBfKE0pe2xldCB3O2ZvcihsZXQgUz0wO1M8TS5sZW5ndGg7UysrKXtjb25zdCBDPU0uY2hhckNvZGVBdChTKTtDPT09MzV8fEM9PT02Mz8odz09PXZvaWQgMCYmKHc9TS5zdWJzdHIoMCxTKSksdys9cFtDXSk6dyE9PXZvaWQgMCYmKHcrPU1bU10pfXJldHVybiB3IT09dm9pZCAwP3c6TX1mdW5jdGlvbiBOKE0sdyl7bGV0IFM7cmV0dXJuIFM9TS5hdXRob3JpdHkmJk0ucGF0aC5sZW5ndGg+MSYmTS5zY2hlbWU9PT0iZmlsZSI/YC8vJHtNLmF1dGhvcml0eX0ke00ucGF0aH1gOk0ucGF0aC5jaGFyQ29kZUF0KDApPT09NDcmJihNLnBhdGguY2hhckNvZGVBdCgxKT49NjUmJk0ucGF0aC5jaGFyQ29kZUF0KDEpPD05MHx8TS5wYXRoLmNoYXJDb2RlQXQoMSk+PTk3JiZNLnBhdGguY2hhckNvZGVBdCgxKTw9MTIyKSYmTS5wYXRoLmNoYXJDb2RlQXQoMik9PT01OD9NLnBhdGhbMV0udG9Mb3dlckNhc2UoKStNLnBhdGguc3Vic3RyKDIpOk0ucGF0aCxpJiYoUz1TLnJlcGxhY2UoL1wvL2csIlxcIikpLFN9ZnVuY3Rpb24geChNLHcpe2NvbnN0IFM9dz9fOnY7bGV0IEM9IiIse3NjaGVtZTpULGF1dGhvcml0eTpQLHBhdGg6RixxdWVyeTpxLGZyYWdtZW50Okd9PU07aWYoVCYmKEMrPVQsQys9IjoiKSwoUHx8VD09PSJmaWxlIikmJihDKz1oLEMrPWgpLFApe2xldCBqPVAuaW5kZXhPZigiQCIpO2lmKGohPT0tMSl7Y29uc3QgUmU9UC5zdWJzdHIoMCxqKTtQPVAuc3Vic3RyKGorMSksaj1SZS5sYXN0SW5kZXhPZigiOiIpLGo9PT0tMT9DKz1TKFJlLCExLCExKTooQys9UyhSZS5zdWJzdHIoMCxqKSwhMSwhMSksQys9IjoiLEMrPVMoUmUuc3Vic3RyKGorMSksITEsITApKSxDKz0iQCJ9UD1QLnRvTG93ZXJDYXNlKCksaj1QLmxhc3RJbmRleE9mKCI6Iiksaj09PS0xP0MrPVMoUCwhMSwhMCk6KEMrPVMoUC5zdWJzdHIoMCxqKSwhMSwhMCksQys9UC5zdWJzdHIoaikpfWlmKEYpe2lmKEYubGVuZ3RoPj0zJiZGLmNoYXJDb2RlQXQoMCk9PT00NyYmRi5jaGFyQ29kZUF0KDIpPT09NTgpe2NvbnN0IGo9Ri5jaGFyQ29kZUF0KDEpO2o+PTY1JiZqPD05MCYmKEY9YC8ke1N0cmluZy5mcm9tQ2hhckNvZGUoaiszMil9OiR7Ri5zdWJzdHIoMyl9YCl9ZWxzZSBpZihGLmxlbmd0aD49MiYmRi5jaGFyQ29kZUF0KDEpPT09NTgpe2NvbnN0IGo9Ri5jaGFyQ29kZUF0KDApO2o+PTY1JiZqPD05MCYmKEY9YCR7U3RyaW5nLmZyb21DaGFyQ29kZShqKzMyKX06JHtGLnN1YnN0cigyKX1gKX1DKz1TKEYsITAsITEpfXJldHVybiBxJiYoQys9Ij8iLEMrPVMocSwhMSwhMSkpLEcmJihDKz0iIyIsQys9dz9HOnYoRywhMSwhMSkpLEN9ZnVuY3Rpb24geShNKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChNKX1jYXRjaHtyZXR1cm4gTS5sZW5ndGg+Mz9NLnN1YnN0cigwLDMpK3koTS5zdWJzdHIoMykpOk19fWNvbnN0IGI9LyglWzAtOUEtWmEtel1bMC05QS1aYS16XSkrL2c7ZnVuY3Rpb24gTChNKXtyZXR1cm4gTS5tYXRjaChiKT9NLnJlcGxhY2UoYix3PT55KHcpKTpNfXZhciBBPW4oNDcwKTtjb25zdCBSPUEucG9zaXh8fEEsST0iLyI7dmFyIEQ7KGZ1bmN0aW9uKE0pe00uam9pblBhdGg9ZnVuY3Rpb24odywuLi5TKXtyZXR1cm4gdy53aXRoKHtwYXRoOlIuam9pbih3LnBhdGgsLi4uUyl9KX0sTS5yZXNvbHZlUGF0aD1mdW5jdGlvbih3LC4uLlMpe2xldCBDPXcucGF0aCxUPSExO0NbMF0hPT1JJiYoQz1JK0MsVD0hMCk7bGV0IFA9Ui5yZXNvbHZlKEMsLi4uUyk7cmV0dXJuIFQmJlBbMF09PT1JJiYhdy5hdXRob3JpdHkmJihQPVAuc3Vic3RyaW5nKDEpKSx3LndpdGgoe3BhdGg6UH0pfSxNLmRpcm5hbWU9ZnVuY3Rpb24odyl7aWYody5wYXRoLmxlbmd0aD09PTB8fHcucGF0aD09PUkpcmV0dXJuIHc7bGV0IFM9Ui5kaXJuYW1lKHcucGF0aCk7cmV0dXJuIFMubGVuZ3RoPT09MSYmUy5jaGFyQ29kZUF0KDApPT09NDYmJihTPSIiKSx3LndpdGgoe3BhdGg6U30pfSxNLmJhc2VuYW1lPWZ1bmN0aW9uKHcpe3JldHVybiBSLmJhc2VuYW1lKHcucGF0aCl9LE0uZXh0bmFtZT1mdW5jdGlvbih3KXtyZXR1cm4gUi5leHRuYW1lKHcucGF0aCl9fSkoRHx8KEQ9e30pKX0pKCksQW89cn0pKCk7dmFye1VSSTpSdCxVdGlsczprMX09QW87ZnVuY3Rpb24gR2MoZSx0KXtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTtjb25zdCBuPVN0cmluZyhlKTtsZXQgcj0iIjtjb25zdCBpPXQ/ISF0LmV4dGVuZGVkOiExLHM9dD8hIXQuZ2xvYnN0YXI6ITE7bGV0IGE9ITE7Y29uc3QgbD10JiZ0eXBlb2YgdC5mbGFncz09InN0cmluZyI/dC5mbGFnczoiIjtsZXQgbztmb3IobGV0IHU9MCxoPW4ubGVuZ3RoO3U8aDt1Kyspc3dpdGNoKG89blt1XSxvKXtjYXNlIi8iOmNhc2UiJCI6Y2FzZSJeIjpjYXNlIisiOmNhc2UiLiI6Y2FzZSIoIjpjYXNlIikiOmNhc2UiPSI6Y2FzZSIhIjpjYXNlInwiOnIrPSJcXCIrbzticmVhaztjYXNlIj8iOmlmKGkpe3IrPSIuIjticmVha31jYXNlIlsiOmNhc2UiXSI6aWYoaSl7cis9bzticmVha31jYXNlInsiOmlmKGkpe2E9ITAscis9IigiO2JyZWFrfWNhc2UifSI6aWYoaSl7YT0hMSxyKz0iKSI7YnJlYWt9Y2FzZSIsIjppZihhKXtyKz0ifCI7YnJlYWt9cis9IlxcIitvO2JyZWFrO2Nhc2UiKiI6Y29uc3QgYz1uW3UtMV07bGV0IGQ9MTtmb3IoO25bdSsxXT09PSIqIjspZCsrLHUrKztjb25zdCBtPW5bdSsxXTtzP2Q+MSYmKGM9PT0iLyJ8fGM9PT12b2lkIDB8fGM9PT0ieyJ8fGM9PT0iLCIpJiYobT09PSIvInx8bT09PXZvaWQgMHx8bT09PSIsInx8bT09PSJ9Iik/KG09PT0iLyI/dSsrOmM9PT0iLyImJnIuZW5kc1dpdGgoIlxcLyIpJiYocj1yLnN1YnN0cigwLHIubGVuZ3RoLTIpKSxyKz0iKCg/OlteL10qKD86L3wkKSkqKSIpOnIrPSIoW14vXSopIjpyKz0iLioiO2JyZWFrO2RlZmF1bHQ6cis9b31yZXR1cm4oIWx8fCF+bC5pbmRleE9mKCJnIikpJiYocj0iXiIrcisiJCIpLG5ldyBSZWdFeHAocixsKX12YXIgSmM9IiEiLFhjPSIvIixRYz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5mb2xkZXJVcmk9dCx0aGlzLnVyaXM9bix0aGlzLmdsb2JXcmFwcGVycz1bXTt0cnl7Zm9yKGxldCByIG9mIGUpe2NvbnN0IGk9clswXSE9PUpjO2l8fChyPXIuc3Vic3RyaW5nKDEpKSxyLmxlbmd0aD4wJiYoclswXT09PVhjJiYocj1yLnN1YnN0cmluZygxKSksdGhpcy5nbG9iV3JhcHBlcnMucHVzaCh7cmVnZXhwOkdjKCIqKi8iK3Ise2V4dGVuZGVkOiEwLGdsb2JzdGFyOiEwfSksaW5jbHVkZTppfSkpfXQmJih0PUVvKHQpLHQuZW5kc1dpdGgoIi8iKXx8KHQ9dCsiLyIpLHRoaXMuZm9sZGVyVXJpPXQpfWNhdGNoe3RoaXMuZ2xvYldyYXBwZXJzLmxlbmd0aD0wLHRoaXMudXJpcz1bXX19bWF0Y2hlc1BhdHRlcm4oZSl7aWYodGhpcy5mb2xkZXJVcmkmJiFlLnN0YXJ0c1dpdGgodGhpcy5mb2xkZXJVcmkpKXJldHVybiExO2xldCB0PSExO2Zvcihjb25zdHtyZWdleHA6bixpbmNsdWRlOnJ9b2YgdGhpcy5nbG9iV3JhcHBlcnMpbi50ZXN0KGUpJiYodD1yKTtyZXR1cm4gdH1nZXRVUklzKCl7cmV0dXJuIHRoaXMudXJpc319LFpjPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxuKXt0aGlzLnNlcnZpY2U9ZSx0aGlzLnVyaT10LHRoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQsdGhpcy5hbmNob3JzPXZvaWQgMCxuJiYodGhpcy51bnJlc29sdmVkU2NoZW1hPXRoaXMuc2VydmljZS5wcm9taXNlLnJlc29sdmUobmV3IFp0KG4pKSl9Z2V0VW5yZXNvbHZlZFNjaGVtYSgpe3JldHVybiB0aGlzLnVucmVzb2x2ZWRTY2hlbWF8fCh0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dGhpcy5zZXJ2aWNlLmxvYWRTY2hlbWEodGhpcy51cmkpKSx0aGlzLnVucmVzb2x2ZWRTY2hlbWF9Z2V0UmVzb2x2ZWRTY2hlbWEoKXtyZXR1cm4gdGhpcy5yZXNvbHZlZFNjaGVtYXx8KHRoaXMucmVzb2x2ZWRTY2hlbWE9dGhpcy5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbihlPT50aGlzLnNlcnZpY2UucmVzb2x2ZVNjaGVtYUNvbnRlbnQoZSx0aGlzKSkpLHRoaXMucmVzb2x2ZWRTY2hlbWF9Y2xlYXJTY2hlbWEoKXtjb25zdCBlPSEhdGhpcy51bnJlc29sdmVkU2NoZW1hO3JldHVybiB0aGlzLnJlc29sdmVkU2NoZW1hPXZvaWQgMCx0aGlzLnVucmVzb2x2ZWRTY2hlbWE9dm9pZCAwLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5hbmNob3JzPXZvaWQgMCxlfX0sWnQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0PVtdKXt0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXR9fSxrbz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQ9W10sbj1bXSxyKXt0aGlzLnNjaGVtYT1lLHRoaXMuZXJyb3JzPXQsdGhpcy53YXJuaW5ncz1uLHRoaXMuc2NoZW1hRHJhZnQ9cn1nZXRTZWN0aW9uKGUpe2NvbnN0IHQ9dGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdGhpcy5zY2hlbWEpO2lmKHQpcmV0dXJuIHhlKHQpfWdldFNlY3Rpb25SZWN1cnNpdmUoZSx0KXtpZighdHx8dHlwZW9mIHQ9PSJib29sZWFuInx8ZS5sZW5ndGg9PT0wKXJldHVybiB0O2NvbnN0IG49ZS5zaGlmdCgpO2lmKHQucHJvcGVydGllcyYmdHlwZW9mIHQucHJvcGVydGllc1tuXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wcm9wZXJ0aWVzW25dKTtpZih0LnBhdHRlcm5Qcm9wZXJ0aWVzKXtmb3IoY29uc3QgciBvZiBPYmplY3Qua2V5cyh0LnBhdHRlcm5Qcm9wZXJ0aWVzKSlpZihMbihyKT8udGVzdChuKSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5wYXR0ZXJuUHJvcGVydGllc1tyXSl9ZWxzZXtpZih0eXBlb2YgdC5hZGRpdGlvbmFsUHJvcGVydGllcz09Im9iamVjdCIpcmV0dXJuIHRoaXMuZ2V0U2VjdGlvblJlY3Vyc2l2ZShlLHQuYWRkaXRpb25hbFByb3BlcnRpZXMpO2lmKG4ubWF0Y2goIlswLTldKyIpKXtpZihBcnJheS5pc0FycmF5KHQuaXRlbXMpKXtjb25zdCByPXBhcnNlSW50KG4sMTApO2lmKCFpc05hTihyKSYmdC5pdGVtc1tyXSlyZXR1cm4gdGhpcy5nZXRTZWN0aW9uUmVjdXJzaXZlKGUsdC5pdGVtc1tyXSl9ZWxzZSBpZih0Lml0ZW1zKXJldHVybiB0aGlzLmdldFNlY3Rpb25SZWN1cnNpdmUoZSx0Lml0ZW1zKX19fX0sWWM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuY29udGV4dFNlcnZpY2U9dCx0aGlzLnJlcXVlc3RTZXJ2aWNlPWUsdGhpcy5wcm9taXNlQ29uc3RydWN0b3I9bnx8UHJvbWlzZSx0aGlzLmNhbGxPbkRpc3Bvc2U9W10sdGhpcy5jb250cmlidXRpb25TY2hlbWFzPXt9LHRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zPVtdLHRoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9fWdldFJlZ2lzdGVyZWRTY2hlbWFJZHMoZSl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHMpLmZpbHRlcih0PT57Y29uc3Qgbj1SdC5wYXJzZSh0KS5zY2hlbWU7cmV0dXJuIG4hPT0ic2NoZW1hc2VydmljZSImJighZXx8ZShuKSl9KX1nZXQgcHJvbWlzZSgpe3JldHVybiB0aGlzLnByb21pc2VDb25zdHJ1Y3Rvcn1kaXNwb3NlKCl7Zm9yKDt0aGlzLmNhbGxPbkRpc3Bvc2UubGVuZ3RoPjA7KXRoaXMuY2FsbE9uRGlzcG9zZS5wb3AoKSgpfW9uUmVzb3VyY2VDaGFuZ2UoZSl7dGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDA7bGV0IHQ9ITE7ZT1ZZShlKTtjb25zdCBuPVtlXSxyPU9iamVjdC5rZXlzKHRoaXMuc2NoZW1hc0J5SWQpLm1hcChpPT50aGlzLnNjaGVtYXNCeUlkW2ldKTtmb3IoO24ubGVuZ3RoOyl7Y29uc3QgaT1uLnBvcCgpO2ZvcihsZXQgcz0wO3M8ci5sZW5ndGg7cysrKXtjb25zdCBhPXJbc107YSYmKGEudXJpPT09aXx8YS5kZXBlbmRlbmNpZXMuaGFzKGkpKSYmKGEudXJpIT09aSYmbi5wdXNoKGEudXJpKSxhLmNsZWFyU2NoZW1hKCkmJih0PSEwKSxyW3NdPXZvaWQgMCl9fXJldHVybiB0fXNldFNjaGVtYUNvbnRyaWJ1dGlvbnMoZSl7aWYoZS5zY2hlbWFzKXtjb25zdCB0PWUuc2NoZW1hcztmb3IoY29uc3QgbiBpbiB0KXtjb25zdCByPVllKG4pO3RoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tyXT10aGlzLmFkZFNjaGVtYUhhbmRsZShyLHRbbl0pfX1pZihBcnJheS5pc0FycmF5KGUuc2NoZW1hQXNzb2NpYXRpb25zKSl7Y29uc3QgdD1lLnNjaGVtYUFzc29jaWF0aW9ucztmb3IobGV0IG4gb2YgdCl7Y29uc3Qgcj1uLnVyaXMubWFwKFllKSxpPXRoaXMuYWRkRmlsZVBhdHRlcm5Bc3NvY2lhdGlvbihuLnBhdHRlcm4sbi5mb2xkZXJVcmkscik7dGhpcy5jb250cmlidXRpb25Bc3NvY2lhdGlvbnMucHVzaChpKX19fWFkZFNjaGVtYUhhbmRsZShlLHQpe2NvbnN0IG49bmV3IFpjKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXT1uLG59Z2V0T3JBZGRTY2hlbWFIYW5kbGUoZSx0KXtyZXR1cm4gdGhpcy5zY2hlbWFzQnlJZFtlXXx8dGhpcy5hZGRTY2hlbWFIYW5kbGUoZSx0KX1hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGUsdCxuKXtjb25zdCByPW5ldyBRYyhlLHQsbik7cmV0dXJuIHRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChyKSxyfXJlZ2lzdGVyRXh0ZXJuYWxTY2hlbWEoZSl7Y29uc3QgdD1ZZShlLnVyaSk7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFNjaGVtYXNJZHNbdF09ITAsdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZT12b2lkIDAsZS5maWxlTWF0Y2gmJmUuZmlsZU1hdGNoLmxlbmd0aCYmdGhpcy5hZGRGaWxlUGF0dGVybkFzc29jaWF0aW9uKGUuZmlsZU1hdGNoLGUuZm9sZGVyVXJpLFt0XSksZS5zY2hlbWE/dGhpcy5hZGRTY2hlbWFIYW5kbGUodCxlLnNjaGVtYSk6dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0KX1jbGVhckV4dGVybmFsU2NoZW1hcygpe3RoaXMuc2NoZW1hc0J5SWQ9e30sdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucz1bXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzPXt9LHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9dm9pZCAwO2Zvcihjb25zdCBlIGluIHRoaXMuY29udHJpYnV0aW9uU2NoZW1hcyl0aGlzLnNjaGVtYXNCeUlkW2VdPXRoaXMuY29udHJpYnV0aW9uU2NoZW1hc1tlXSx0aGlzLnJlZ2lzdGVyZWRTY2hlbWFzSWRzW2VdPSEwO2Zvcihjb25zdCBlIG9mIHRoaXMuY29udHJpYnV0aW9uQXNzb2NpYXRpb25zKXRoaXMuZmlsZVBhdHRlcm5Bc3NvY2lhdGlvbnMucHVzaChlKX1nZXRSZXNvbHZlZFNjaGVtYShlKXtjb25zdCB0PVllKGUpLG49dGhpcy5zY2hlbWFzQnlJZFt0XTtyZXR1cm4gbj9uLmdldFJlc29sdmVkU2NoZW1hKCk6dGhpcy5wcm9taXNlLnJlc29sdmUodm9pZCAwKX1sb2FkU2NoZW1hKGUpe2lmKCF0aGlzLnJlcXVlc3RTZXJ2aWNlKXtjb25zdCB0PUUoIlVuYWJsZSB0byBsb2FkIHNjaGVtYSBmcm9tICd7MH0nLiBObyBzY2hlbWEgcmVxdWVzdCBzZXJ2aWNlIGF2YWlsYWJsZSIsWXQoZSkpO3JldHVybiB0aGlzLnByb21pc2UucmVzb2x2ZShuZXcgWnQoe30sW3RdKSl9cmV0dXJuIGUuc3RhcnRzV2l0aCgiaHR0cDovL2pzb24tc2NoZW1hLm9yZy8iKSYmKGU9Imh0dHBzIitlLnN1YnN0cmluZyg0KSksdGhpcy5yZXF1ZXN0U2VydmljZShlKS50aGVuKHQ9PntpZighdCl7Y29uc3Qgcz1FKCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogTm8gY29udGVudC4iLFl0KGUpKTtyZXR1cm4gbmV3IFp0KHt9LFtzXSl9Y29uc3Qgbj1bXTt0LmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKG4ucHVzaChFKCJQcm9ibGVtIHJlYWRpbmcgY29udGVudCBmcm9tICd7MH0nOiBVVEYtOCB3aXRoIEJPTSBkZXRlY3RlZCwgb25seSBVVEYgOCBpcyBhbGxvd2VkLiIsWXQoZSkpKSx0PXQudHJpbVN0YXJ0KCkpO2xldCByPXt9O2NvbnN0IGk9W107cmV0dXJuIHI9cGModCxpKSxpLmxlbmd0aCYmbi5wdXNoKEUoIlVuYWJsZSB0byBwYXJzZSBjb250ZW50IGZyb20gJ3swfSc6IFBhcnNlIGVycm9yIGF0IG9mZnNldCB7MX0uIixZdChlKSxpWzBdLm9mZnNldCkpLG5ldyBadChyLG4pfSx0PT57bGV0IG49dC50b1N0cmluZygpO2NvbnN0IHI9dC50b1N0cmluZygpLnNwbGl0KCJFcnJvcjogIik7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMV0pLEd0KG4sIi4iKSYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSksbmV3IFp0KHt9LFtFKCJVbmFibGUgdG8gbG9hZCBzY2hlbWEgZnJvbSAnezB9JzogezF9LiIsWXQoZSksbildKX0pfXJlc29sdmVTY2hlbWFDb250ZW50KGUsdCl7Y29uc3Qgbj1lLmVycm9ycy5zbGljZSgwKSxyPWUuc2NoZW1hO2xldCBpPXIuJHNjaGVtYT9ZZShyLiRzY2hlbWEpOnZvaWQgMDtpZihpPT09Imh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDMvc2NoZW1hIilyZXR1cm4gdGhpcy5wcm9taXNlLnJlc29sdmUobmV3IGtvKHt9LFtFKCJEcmFmdC0wMyBzY2hlbWFzIGFyZSBub3Qgc3VwcG9ydGVkLiIpXSxbXSxpKSk7bGV0IHM9bmV3IFNldDtjb25zdCBhPXRoaXMuY29udGV4dFNlcnZpY2UsbD0oZyxwKT0+e3A9ZGVjb2RlVVJJQ29tcG9uZW50KHApO2xldCB2PWc7cmV0dXJuIHBbMF09PT0iLyImJihwPXAuc3Vic3RyaW5nKDEpKSxwLnNwbGl0KCIvIikuc29tZShfPT4oXz1fLnJlcGxhY2UoL34xL2csIi8iKS5yZXBsYWNlKC9+MC9nLCJ+Iiksdj12W19dLCF2KSksdn0sbz0oZyxwLHYpPT4ocC5hbmNob3JzfHwocC5hbmNob3JzPW0oZykpLHAuYW5jaG9ycy5nZXQodikpLHU9KGcscCk9Pntmb3IoY29uc3QgdiBpbiBwKXAuaGFzT3duUHJvcGVydHkodikmJnYhPT0iaWQiJiZ2IT09IiRpZCImJihnW3ZdPXBbdl0pfSxoPShnLHAsdixfKT0+e2xldCBOO189PT12b2lkIDB8fF8ubGVuZ3RoPT09MD9OPXA6Xy5jaGFyQXQoMCk9PT0iLyI/Tj1sKHAsXyk6Tj1vKHAsdixfKSxOP3UoZyxOKTpuLnB1c2goRSgiJHJlZiAnezB9JyBpbiAnezF9JyBjYW4gbm90IGJlIHJlc29sdmVkLiIsX3x8IiIsdi51cmkpKX0sYz0oZyxwLHYsXyk9PnthJiYhL15bQS1aYS16XVtBLVphLXowLTkrXC0uK10qOlwvXC8uKi8udGVzdChwKSYmKHA9YS5yZXNvbHZlUmVsYXRpdmVQYXRoKHAsXy51cmkpKSxwPVllKHApO2NvbnN0IE49dGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShwKTtyZXR1cm4gTi5nZXRVbnJlc29sdmVkU2NoZW1hKCkudGhlbih4PT57aWYoXy5kZXBlbmRlbmNpZXMuYWRkKHApLHguZXJyb3JzLmxlbmd0aCl7Y29uc3QgeT12P3ArIiMiK3Y6cDtuLnB1c2goRSgiUHJvYmxlbXMgbG9hZGluZyByZWZlcmVuY2UgJ3swfSc6IHsxfSIseSx4LmVycm9yc1swXSkpfXJldHVybiBoKGcseC5zY2hlbWEsTix2KSxkKGcseC5zY2hlbWEsTil9KX0sZD0oZyxwLHYpPT57Y29uc3QgXz1bXTtyZXR1cm4gdGhpcy50cmF2ZXJzZU5vZGVzKGcsTj0+e2NvbnN0IHg9bmV3IFNldDtmb3IoO04uJHJlZjspe2NvbnN0IHk9Ti4kcmVmLGI9eS5zcGxpdCgiIyIsMik7aWYoZGVsZXRlIE4uJHJlZixiWzBdLmxlbmd0aD4wKXtfLnB1c2goYyhOLGJbMF0sYlsxXSx2KSk7cmV0dXJufWVsc2UgaWYoIXguaGFzKHkpKXtjb25zdCBMPWJbMV07aChOLHAsdixMKSx4LmFkZCh5KX19Ti4kcmVjdXJzaXZlUmVmJiZzLmFkZCgiJHJlY3Vyc2l2ZVJlZiIpLE4uJGR5bmFtaWNSZWYmJnMuYWRkKCIkZHluYW1pY1JlZiIpfSksdGhpcy5wcm9taXNlLmFsbChfKX0sbT1nPT57Y29uc3QgcD1uZXcgTWFwO3JldHVybiB0aGlzLnRyYXZlcnNlTm9kZXMoZyx2PT57Y29uc3QgXz12LiRpZHx8di5pZCxOPXBhKF8pJiZfLmNoYXJBdCgwKT09PSIjIj9fLnN1YnN0cmluZygxKTp2LiRhbmNob3I7TiYmKHAuaGFzKE4pP24ucHVzaChFKCJEdXBsaWNhdGUgYW5jaG9yIGRlY2xhcmF0aW9uOiAnezB9JyIsTikpOnAuc2V0KE4sdikpLHYuJHJlY3Vyc2l2ZUFuY2hvciYmcy5hZGQoIiRyZWN1cnNpdmVBbmNob3IiKSx2LiRkeW5hbWljQW5jaG9yJiZzLmFkZCgiJGR5bmFtaWNBbmNob3IiKX0pLHB9O3JldHVybiBkKHIscix0KS50aGVuKGc9PntsZXQgcD1bXTtyZXR1cm4gcy5zaXplJiZwLnB1c2goRSgiVGhlIHNjaGVtYSB1c2VzIG1ldGEtc2NoZW1hIGZlYXR1cmVzICh7MH0pIHRoYXQgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IHRoZSB2YWxpZGF0b3IuIixBcnJheS5mcm9tKHMua2V5cygpKS5qb2luKCIsICIpKSksbmV3IGtvKHIsbixwLGkpfSl9dHJhdmVyc2VOb2RlcyhlLHQpe2lmKCFlfHx0eXBlb2YgZSE9Im9iamVjdCIpcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtjb25zdCBuPW5ldyBTZXQscj0oLi4udSk9Pntmb3IoY29uc3QgaCBvZiB1KVFlKGgpJiZsLnB1c2goaCl9LGk9KC4uLnUpPT57Zm9yKGNvbnN0IGggb2YgdSlpZihRZShoKSlmb3IoY29uc3QgYyBpbiBoKXtjb25zdCBtPWhbY107UWUobSkmJmwucHVzaChtKX19LHM9KC4uLnUpPT57Zm9yKGNvbnN0IGggb2YgdSlpZihBcnJheS5pc0FycmF5KGgpKWZvcihjb25zdCBjIG9mIGgpUWUoYykmJmwucHVzaChjKX0sYT11PT57aWYoQXJyYXkuaXNBcnJheSh1KSlmb3IoY29uc3QgaCBvZiB1KVFlKGgpJiZsLnB1c2goaCk7ZWxzZSBRZSh1KSYmbC5wdXNoKHUpfSxsPVtlXTtsZXQgbz1sLnBvcCgpO2Zvcig7bzspbi5oYXMobyl8fChuLmFkZChvKSx0KG8pLHIoby5hZGRpdGlvbmFsSXRlbXMsby5hZGRpdGlvbmFsUHJvcGVydGllcyxvLm5vdCxvLmNvbnRhaW5zLG8ucHJvcGVydHlOYW1lcyxvLmlmLG8udGhlbixvLmVsc2Usby51bmV2YWx1YXRlZEl0ZW1zLG8udW5ldmFsdWF0ZWRQcm9wZXJ0aWVzKSxpKG8uZGVmaW5pdGlvbnMsby4kZGVmcyxvLnByb3BlcnRpZXMsby5wYXR0ZXJuUHJvcGVydGllcyxvLmRlcGVuZGVuY2llcyxvLmRlcGVuZGVudFNjaGVtYXMpLHMoby5hbnlPZixvLmFsbE9mLG8ub25lT2Ysby5wcmVmaXhJdGVtcyksYShvLml0ZW1zKSksbz1sLnBvcCgpfWdldFNjaGVtYUZyb21Qcm9wZXJ0eShlLHQpe2lmKHQucm9vdD8udHlwZT09PSJvYmplY3QiKXtmb3IoY29uc3QgbiBvZiB0LnJvb3QucHJvcGVydGllcylpZihuLmtleU5vZGUudmFsdWU9PT0iJHNjaGVtYSImJm4udmFsdWVOb2RlPy50eXBlPT09InN0cmluZyIpe2xldCByPW4udmFsdWVOb2RlLnZhbHVlO3JldHVybiB0aGlzLmNvbnRleHRTZXJ2aWNlJiYhL15cd1tcd1xkKy4tXSo6Ly50ZXN0KHIpJiYocj10aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmVSZWxhdGl2ZVBhdGgocixlKSkscn19fWdldEFzc29jaWF0ZWRTY2hlbWFzKGUpe2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxuPVtdLHI9RW8oZSk7Zm9yKGNvbnN0IGkgb2YgdGhpcy5maWxlUGF0dGVybkFzc29jaWF0aW9ucylpZihpLm1hdGNoZXNQYXR0ZXJuKHIpKWZvcihjb25zdCBzIG9mIGkuZ2V0VVJJcygpKXRbc118fChuLnB1c2gocyksdFtzXT0hMCk7cmV0dXJuIG59Z2V0U2NoZW1hVVJJc0ZvclJlc291cmNlKGUsdCl7bGV0IG49dCYmdGhpcy5nZXRTY2hlbWFGcm9tUHJvcGVydHkoZSx0KTtyZXR1cm4gbj9bbl06dGhpcy5nZXRBc3NvY2lhdGVkU2NoZW1hcyhlKX1nZXRTY2hlbWFGb3JSZXNvdXJjZShlLHQpe2lmKHQpe2xldCBpPXRoaXMuZ2V0U2NoZW1hRnJvbVByb3BlcnR5KGUsdCk7aWYoaSl7Y29uc3Qgcz1ZZShpKTtyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZShzKS5nZXRSZXNvbHZlZFNjaGVtYSgpfX1pZih0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlJiZ0aGlzLmNhY2hlZFNjaGVtYUZvclJlc291cmNlLnJlc291cmNlPT09ZSlyZXR1cm4gdGhpcy5jYWNoZWRTY2hlbWFGb3JSZXNvdXJjZS5yZXNvbHZlZFNjaGVtYTtjb25zdCBuPXRoaXMuZ2V0QXNzb2NpYXRlZFNjaGVtYXMoZSkscj1uLmxlbmd0aD4wP3RoaXMuY3JlYXRlQ29tYmluZWRTY2hlbWEoZSxuKS5nZXRSZXNvbHZlZFNjaGVtYSgpOnRoaXMucHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHRoaXMuY2FjaGVkU2NoZW1hRm9yUmVzb3VyY2U9e3Jlc291cmNlOmUscmVzb2x2ZWRTY2hlbWE6cn0scn1jcmVhdGVDb21iaW5lZFNjaGVtYShlLHQpe2lmKHQubGVuZ3RoPT09MSlyZXR1cm4gdGhpcy5nZXRPckFkZFNjaGVtYUhhbmRsZSh0WzBdKTt7Y29uc3Qgbj0ic2NoZW1hc2VydmljZTovL2NvbWJpbmVkU2NoZW1hLyIrZW5jb2RlVVJJQ29tcG9uZW50KGUpLHI9e2FsbE9mOnQubWFwKGk9Pih7JHJlZjppfSkpfTtyZXR1cm4gdGhpcy5hZGRTY2hlbWFIYW5kbGUobixyKX19Z2V0TWF0Y2hpbmdTY2hlbWFzKGUsdCxuKXtpZihuKXtjb25zdCByPW4uaWR8fCJzY2hlbWFzZXJ2aWNlOi8vdW50aXRsZWQvbWF0Y2hpbmdTY2hlbWFzLyIrS2MrKztyZXR1cm4gdGhpcy5hZGRTY2hlbWFIYW5kbGUocixuKS5nZXRSZXNvbHZlZFNjaGVtYSgpLnRoZW4ocz0+dC5nZXRNYXRjaGluZ1NjaGVtYXMocy5zY2hlbWEpLmZpbHRlcihhPT4hYS5pbnZlcnRlZCkpfXJldHVybiB0aGlzLmdldFNjaGVtYUZvclJlc291cmNlKGUudXJpLHQpLnRoZW4ocj0+cj90LmdldE1hdGNoaW5nU2NoZW1hcyhyLnNjaGVtYSkuZmlsdGVyKGk9PiFpLmludmVydGVkKTpbXSl9fSxLYz0wO2Z1bmN0aW9uIFllKGUpe3RyeXtyZXR1cm4gUnQucGFyc2UoZSkudG9TdHJpbmcoITApfWNhdGNoe3JldHVybiBlfX1mdW5jdGlvbiBFbyhlKXt0cnl7cmV0dXJuIFJ0LnBhcnNlKGUpLndpdGgoe2ZyYWdtZW50Om51bGwscXVlcnk6bnVsbH0pLnRvU3RyaW5nKCEwKX1jYXRjaHtyZXR1cm4gZX19ZnVuY3Rpb24gWXQoZSl7dHJ5e2NvbnN0IHQ9UnQucGFyc2UoZSk7aWYodC5zY2hlbWU9PT0iZmlsZSIpcmV0dXJuIHQuZnNQYXRofWNhdGNoe31yZXR1cm4gZX1mdW5jdGlvbiBlMShlLHQpe2NvbnN0IG49W10scj1bXSxpPVtdO2xldCBzPS0xO2NvbnN0IGE9cnQoZS5nZXRUZXh0KCksITEpO2xldCBsPWEuc2NhbigpO2Z1bmN0aW9uIG8oZyl7bi5wdXNoKGcpLHIucHVzaChpLmxlbmd0aCl9Zm9yKDtsIT09MTc7KXtzd2l0Y2gobCl7Y2FzZSAxOmNhc2UgMzp7Y29uc3QgZz1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpKS5saW5lLHA9e3N0YXJ0TGluZTpnLGVuZExpbmU6ZyxraW5kOmw9PT0xPyJvYmplY3QiOiJhcnJheSJ9O2kucHVzaChwKTticmVha31jYXNlIDI6Y2FzZSA0Ontjb25zdCBnPWw9PT0yPyJvYmplY3QiOiJhcnJheSI7aWYoaS5sZW5ndGg+MCYmaVtpLmxlbmd0aC0xXS5raW5kPT09Zyl7Y29uc3QgcD1pLnBvcCgpLHY9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtwJiZ2PnAuc3RhcnRMaW5lKzEmJnMhPT1wLnN0YXJ0TGluZSYmKHAuZW5kTGluZT12LTEsbyhwKSxzPXAuc3RhcnRMaW5lKX1icmVha31jYXNlIDEzOntjb25zdCBnPWUucG9zaXRpb25BdChhLmdldFRva2VuT2Zmc2V0KCkpLmxpbmUscD1lLnBvc2l0aW9uQXQoYS5nZXRUb2tlbk9mZnNldCgpK2EuZ2V0VG9rZW5MZW5ndGgoKSkubGluZTthLmdldFRva2VuRXJyb3IoKT09PTEmJmcrMTxlLmxpbmVDb3VudD9hLnNldFBvc2l0aW9uKGUub2Zmc2V0QXQoWS5jcmVhdGUoZysxLDApKSk6ZzxwJiYobyh7c3RhcnRMaW5lOmcsZW5kTGluZTpwLGtpbmQ6SnQuQ29tbWVudH0pLHM9Zyk7YnJlYWt9Y2FzZSAxMjp7Y29uc3QgcD1lLmdldFRleHQoKS5zdWJzdHIoYS5nZXRUb2tlbk9mZnNldCgpLGEuZ2V0VG9rZW5MZW5ndGgoKSkubWF0Y2goL15cL1wvXHMqIyhyZWdpb25cYil8KGVuZHJlZ2lvblxiKS8pO2lmKHApe2NvbnN0IHY9ZS5wb3NpdGlvbkF0KGEuZ2V0VG9rZW5PZmZzZXQoKSkubGluZTtpZihwWzFdKXtjb25zdCBfPXtzdGFydExpbmU6dixlbmRMaW5lOnYsa2luZDpKdC5SZWdpb259O2kucHVzaChfKX1lbHNle2xldCBfPWkubGVuZ3RoLTE7Zm9yKDtfPj0wJiZpW19dLmtpbmQhPT1KdC5SZWdpb247KV8tLTtpZihfPj0wKXtjb25zdCBOPWlbX107aS5sZW5ndGg9Xyx2Pk4uc3RhcnRMaW5lJiZzIT09Ti5zdGFydExpbmUmJihOLmVuZExpbmU9dixvKE4pLHM9Ti5zdGFydExpbmUpfX19YnJlYWt9fWw9YS5zY2FuKCl9Y29uc3QgdT10JiZ0LnJhbmdlTGltaXQ7aWYodHlwZW9mIHUhPSJudW1iZXIifHxuLmxlbmd0aDw9dSlyZXR1cm4gbjt0JiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkJiZ0Lm9uUmFuZ2VMaW1pdEV4Y2VlZGVkKGUudXJpKTtjb25zdCBoPVtdO2ZvcihsZXQgZyBvZiByKWc8MzAmJihoW2ddPShoW2ddfHwwKSsxKTtsZXQgYz0wLGQ9MDtmb3IobGV0IGc9MDtnPGgubGVuZ3RoO2crKyl7Y29uc3QgcD1oW2ddO2lmKHApe2lmKHArYz51KXtkPWc7YnJlYWt9Yys9cH19Y29uc3QgbT1bXTtmb3IobGV0IGc9MDtnPG4ubGVuZ3RoO2crKyl7Y29uc3QgcD1yW2ddO3R5cGVvZiBwPT0ibnVtYmVyIiYmKHA8ZHx8cD09PWQmJmMrKzx1KSYmbS5wdXNoKG5bZ10pfXJldHVybiBtfWZ1bmN0aW9uIHQxKGUsdCxuKXtmdW5jdGlvbiByKGwpe2xldCBvPWUub2Zmc2V0QXQobCksdT1uLmdldE5vZGVGcm9tT2Zmc2V0KG8sITApO2NvbnN0IGg9W107Zm9yKDt1Oyl7c3dpdGNoKHUudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2Uib2JqZWN0IjpjYXNlImFycmF5Ijpjb25zdCBkPXUub2Zmc2V0KzEsbT11Lm9mZnNldCt1Lmxlbmd0aC0xO2Q8bSYmbz49ZCYmbzw9bSYmaC5wdXNoKGkoZCxtKSksaC5wdXNoKGkodS5vZmZzZXQsdS5vZmZzZXQrdS5sZW5ndGgpKTticmVhaztjYXNlIm51bWJlciI6Y2FzZSJib29sZWFuIjpjYXNlIm51bGwiOmNhc2UicHJvcGVydHkiOmgucHVzaChpKHUub2Zmc2V0LHUub2Zmc2V0K3UubGVuZ3RoKSk7YnJlYWt9aWYodS50eXBlPT09InByb3BlcnR5Inx8dS5wYXJlbnQmJnUucGFyZW50LnR5cGU9PT0iYXJyYXkiKXtjb25zdCBkPWEodS5vZmZzZXQrdS5sZW5ndGgsNSk7ZCE9PS0xJiZoLnB1c2goaSh1Lm9mZnNldCxkKSl9dT11LnBhcmVudH1sZXQgYztmb3IobGV0IGQ9aC5sZW5ndGgtMTtkPj0wO2QtLSljPWtuLmNyZWF0ZShoW2RdLGMpO3JldHVybiBjfHwoYz1rbi5jcmVhdGUoVS5jcmVhdGUobCxsKSkpLGN9ZnVuY3Rpb24gaShsLG8pe3JldHVybiBVLmNyZWF0ZShlLnBvc2l0aW9uQXQobCksZS5wb3NpdGlvbkF0KG8pKX1jb25zdCBzPXJ0KGUuZ2V0VGV4dCgpLCEwKTtmdW5jdGlvbiBhKGwsbyl7cmV0dXJuIHMuc2V0UG9zaXRpb24obCkscy5zY2FuKCk9PT1vP3MuZ2V0VG9rZW5PZmZzZXQoKStzLmdldFRva2VuTGVuZ3RoKCk6LTF9cmV0dXJuIHQubWFwKHIpfWZ1bmN0aW9uIFhyKGUsdCxuKXtsZXQgcjtpZihuKXtjb25zdCBzPWUub2Zmc2V0QXQobi5zdGFydCksYT1lLm9mZnNldEF0KG4uZW5kKS1zO3I9e29mZnNldDpzLGxlbmd0aDphfX1jb25zdCBpPXt0YWJTaXplOnQ/dC50YWJTaXplOjQsaW5zZXJ0U3BhY2VzOnQ/Lmluc2VydFNwYWNlcz09PSEwLGluc2VydEZpbmFsTmV3bGluZTp0Py5pbnNlcnRGaW5hbE5ld2xpbmU9PT0hMCxlb2w6YApgLGtlZXBMaW5lczp0Py5rZWVwTGluZXM9PT0hMH07cmV0dXJuIHljKGUuZ2V0VGV4dCgpLHIsaSkubWFwKHM9PlBlLnJlcGxhY2UoVS5jcmVhdGUoZS5wb3NpdGlvbkF0KHMub2Zmc2V0KSxlLnBvc2l0aW9uQXQocy5vZmZzZXQrcy5sZW5ndGgpKSxzLmNvbnRlbnQpKX12YXIgaWU7KGZ1bmN0aW9uKGUpe2VbZS5PYmplY3Q9MF09Ik9iamVjdCIsZVtlLkFycmF5PTFdPSJBcnJheSJ9KShpZXx8KGllPXt9KSk7dmFyIE1uPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0eU5hbWU9ZT8/IiIsdGhpcy5iZWdpbm5pbmdMaW5lTnVtYmVyPXQsdGhpcy5jaGlsZHJlblByb3BlcnRpZXM9W10sdGhpcy5sYXN0UHJvcGVydHk9ITEsdGhpcy5ub0tleU5hbWU9ITF9YWRkQ2hpbGRQcm9wZXJ0eShlKXtpZihlLnBhcmVudD10aGlzLHRoaXMuY2hpbGRyZW5Qcm9wZXJ0aWVzLmxlbmd0aD4wKXtsZXQgdD0wO2Uubm9LZXlOYW1lP3Q9dGhpcy5jaGlsZHJlblByb3BlcnRpZXMubGVuZ3RoOnQ9cjEodGhpcy5jaGlsZHJlblByb3BlcnRpZXMsZSxuMSksdDwwJiYodD10Ki0xLTEpLHRoaXMuY2hpbGRyZW5Qcm9wZXJ0aWVzLnNwbGljZSh0LDAsZSl9ZWxzZSB0aGlzLmNoaWxkcmVuUHJvcGVydGllcy5wdXNoKGUpO3JldHVybiBlfX07ZnVuY3Rpb24gbjEoZSx0KXtjb25zdCBuPWUucHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCkscj10LnByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiBuPHI/LTE6bj5yPzE6MH1mdW5jdGlvbiByMShlLHQsbil7Y29uc3Qgcj10LnByb3BlcnR5TmFtZS50b0xvd2VyQ2FzZSgpLGk9ZVswXS5wcm9wZXJ0eU5hbWUudG9Mb3dlckNhc2UoKSxzPWVbZS5sZW5ndGgtMV0ucHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7aWYocjxpKXJldHVybiAwO2lmKHI+cylyZXR1cm4gZS5sZW5ndGg7bGV0IGE9MCxsPWUubGVuZ3RoLTE7Zm9yKDthPD1sOyl7bGV0IG89bCthPj4xLHU9bih0LGVbb10pO2lmKHU+MClhPW8rMTtlbHNlIGlmKHU8MClsPW8tMTtlbHNlIHJldHVybiBvfXJldHVybi1hLTF9ZnVuY3Rpb24gaTEoZSx0KXtjb25zdCBuPXsuLi50LGtlZXBMaW5lczohMX0scj1rZS5hcHBseUVkaXRzKGUsWHIoZSxuLHZvaWQgMCkpLGk9a2UuY3JlYXRlKCJ0ZXN0Oi8vdGVzdC5qc29uIiwianNvbiIsMCxyKSxzPXMxKGkpLGE9YTEoaSxzKSxsPVhyKGEsbix2b2lkIDApLG89a2UuYXBwbHlFZGl0cyhhLGwpO3JldHVybltQZS5yZXBsYWNlKFUuY3JlYXRlKFkuY3JlYXRlKDAsMCksZS5wb3NpdGlvbkF0KGUuZ2V0VGV4dCgpLmxlbmd0aCkpLG8pXX1mdW5jdGlvbiBzMShlKXtjb25zdCB0PWUuZ2V0VGV4dCgpLG49cnQodCwhMSk7bGV0IHI9bmV3IE1uLGk9cixzPXIsYT1yLGwsbz0wLHU9MCxoLGMsZD0tMSxtPS0xLGc9MCxwPTAsdj1bXSxfPSExLE49ITE7Zm9yKDsobD1uLnNjYW4oKSkhPT0xNzspe2lmKF89PT0hMCYmbCE9PTE0JiZsIT09MTUmJmwhPT0xMiYmbCE9PTEzJiZzLmVuZExpbmVOdW1iZXI9PT12b2lkIDApe2xldCB4PW4uZ2V0VG9rZW5TdGFydExpbmUoKTtjPT09Mnx8Yz09PTQ/YS5lbmRMaW5lTnVtYmVyPXgtMTpzLmVuZExpbmVOdW1iZXI9eC0xLGc9eCxfPSExfWlmKE49PT0hMCYmbCE9PTE0JiZsIT09MTUmJmwhPT0xMiYmbCE9PTEzJiYoZz1uLmdldFRva2VuU3RhcnRMaW5lKCksTj0hMSksbi5nZXRUb2tlblN0YXJ0TGluZSgpIT09byl7Zm9yKGxldCB4PW87eDxuLmdldFRva2VuU3RhcnRMaW5lKCk7eCsrKXtjb25zdCB5PWUuZ2V0VGV4dChVLmNyZWF0ZShZLmNyZWF0ZSh4LDApLFkuY3JlYXRlKHgrMSwwKSkpLmxlbmd0aDt1PXUreX1vPW4uZ2V0VG9rZW5TdGFydExpbmUoKX1zd2l0Y2gobCl7Y2FzZSAxMDp7aWYoaD09PXZvaWQgMHx8aD09PTF8fGg9PT01JiZ2W3YubGVuZ3RoLTFdPT09aWUuT2JqZWN0KXtjb25zdCB4PW5ldyBNbihuLmdldFRva2VuVmFsdWUoKSxnKTthPXMscz1pLmFkZENoaWxkUHJvcGVydHkoeCl9YnJlYWt9Y2FzZSAzOntpZihyLmJlZ2lubmluZ0xpbmVOdW1iZXI9PT12b2lkIDAmJihyLmJlZ2lubmluZ0xpbmVOdW1iZXI9bi5nZXRUb2tlblN0YXJ0TGluZSgpKSx2W3YubGVuZ3RoLTFdPT09aWUuT2JqZWN0KWk9cztlbHNlIGlmKHZbdi5sZW5ndGgtMV09PT1pZS5BcnJheSl7Y29uc3QgeD1uZXcgTW4obi5nZXRUb2tlblZhbHVlKCksZyk7eC5ub0tleU5hbWU9ITAsYT1zLHM9aS5hZGRDaGlsZFByb3BlcnR5KHgpLGk9c312LnB1c2goaWUuQXJyYXkpLHMudHlwZT1pZS5BcnJheSxnPW4uZ2V0VG9rZW5TdGFydExpbmUoKSxnKys7YnJlYWt9Y2FzZSAxOntpZihyLmJlZ2lubmluZ0xpbmVOdW1iZXI9PT12b2lkIDApci5iZWdpbm5pbmdMaW5lTnVtYmVyPW4uZ2V0VG9rZW5TdGFydExpbmUoKTtlbHNlIGlmKHZbdi5sZW5ndGgtMV09PT1pZS5BcnJheSl7Y29uc3QgeD1uZXcgTW4obi5nZXRUb2tlblZhbHVlKCksZyk7eC5ub0tleU5hbWU9ITAsYT1zLHM9aS5hZGRDaGlsZFByb3BlcnR5KHgpfXMudHlwZT1pZS5PYmplY3Qsdi5wdXNoKGllLk9iamVjdCksaT1zLGc9bi5nZXRUb2tlblN0YXJ0TGluZSgpLGcrKzticmVha31jYXNlIDQ6e3A9bi5nZXRUb2tlblN0YXJ0TGluZSgpLHYucG9wKCkscy5lbmRMaW5lTnVtYmVyPT09dm9pZCAwJiYoaD09PTJ8fGg9PT00KSYmKHMuZW5kTGluZU51bWJlcj1wLTEscy5sYXN0UHJvcGVydHk9ITAscy5saW5lV2hlcmVUb0FkZENvbW1hPWQscy5pbmRleFdoZXJlVG9BZGRDb21hPW0sYT1zLHM9cz9zLnBhcmVudDp2b2lkIDAsaT1zKSxyLmVuZExpbmVOdW1iZXI9cCxnPXArMTticmVha31jYXNlIDI6e3A9bi5nZXRUb2tlblN0YXJ0TGluZSgpLHYucG9wKCksaCE9PTEmJihzLmVuZExpbmVOdW1iZXI9PT12b2lkIDAmJihzLmVuZExpbmVOdW1iZXI9cC0xLHMubGFzdFByb3BlcnR5PSEwLHMubGluZVdoZXJlVG9BZGRDb21tYT1kLHMuaW5kZXhXaGVyZVRvQWRkQ29tYT1tKSxhPXMscz1zP3MucGFyZW50OnZvaWQgMCxpPXMpLHIuZW5kTGluZU51bWJlcj1uLmdldFRva2VuU3RhcnRMaW5lKCksZz1wKzE7YnJlYWt9Y2FzZSA1OntwPW4uZ2V0VG9rZW5TdGFydExpbmUoKSxzLmVuZExpbmVOdW1iZXI9PT12b2lkIDAmJih2W3YubGVuZ3RoLTFdPT09aWUuT2JqZWN0fHx2W3YubGVuZ3RoLTFdPT09aWUuQXJyYXkmJihoPT09Mnx8aD09PTQpKSYmKHMuZW5kTGluZU51bWJlcj1wLHMuY29tbWFJbmRleD1uLmdldFRva2VuT2Zmc2V0KCktdSxzLmNvbW1hTGluZT1wKSwoaD09PTJ8fGg9PT00KSYmKGE9cyxzPXM/cy5wYXJlbnQ6dm9pZCAwLGk9cyksZz1wKzE7YnJlYWt9Y2FzZSAxMzp7aD09PTUmJmQ9PT1uLmdldFRva2VuU3RhcnRMaW5lKCkmJih2W3YubGVuZ3RoLTFdPT09aWUuQXJyYXkmJihjPT09Mnx8Yz09PTQpfHx2W3YubGVuZ3RoLTFdPT09aWUuT2JqZWN0KSYmKHZbdi5sZW5ndGgtMV09PT1pZS5BcnJheSYmKGM9PT0yfHxjPT09NCl8fHZbdi5sZW5ndGgtMV09PT1pZS5PYmplY3QpJiYocy5lbmRMaW5lTnVtYmVyPXZvaWQgMCxfPSEwKSwoaD09PTF8fGg9PT0zKSYmZD09PW4uZ2V0VG9rZW5TdGFydExpbmUoKSYmKE49ITApO2JyZWFrfX1sIT09MTQmJmwhPT0xMyYmbCE9PTEyJiZsIT09MTUmJihjPWgsaD1sLGQ9bi5nZXRUb2tlblN0YXJ0TGluZSgpLG09bi5nZXRUb2tlbk9mZnNldCgpK24uZ2V0VG9rZW5MZW5ndGgoKS11KX1yZXR1cm4gcn1mdW5jdGlvbiBhMShlLHQpe2lmKHQuY2hpbGRyZW5Qcm9wZXJ0aWVzLmxlbmd0aD09PTApcmV0dXJuIGU7Y29uc3Qgbj1rZS5jcmVhdGUoInRlc3Q6Ly90ZXN0Lmpzb24iLCJqc29uIiwwLGUuZ2V0VGV4dCgpKSxyPVtdO2ZvcihSbyhyLHQsdC5iZWdpbm5pbmdMaW5lTnVtYmVyKTtyLmxlbmd0aD4wOyl7Y29uc3QgaT1yLnNoaWZ0KCkscz1pLnByb3BlcnR5VHJlZUFycmF5O2xldCBhPWkuYmVnaW5uaW5nTGluZU51bWJlcjtmb3IobGV0IGw9MDtsPHMubGVuZ3RoO2wrKyl7Y29uc3Qgbz1zW2xdLHU9VS5jcmVhdGUoWS5jcmVhdGUoby5iZWdpbm5pbmdMaW5lTnVtYmVyLDApLFkuY3JlYXRlKG8uZW5kTGluZU51bWJlcisxLDApKSxoPWUuZ2V0VGV4dCh1KSxjPWtlLmNyZWF0ZSgidGVzdDovL3Rlc3QuanNvbiIsImpzb24iLDAsaCk7aWYoby5sYXN0UHJvcGVydHk9PT0hMCYmbCE9PXMubGVuZ3RoLTEpe2NvbnN0IGc9by5saW5lV2hlcmVUb0FkZENvbW1hLW8uYmVnaW5uaW5nTGluZU51bWJlcixwPW8uaW5kZXhXaGVyZVRvQWRkQ29tYSx2PXtyYW5nZTpVLmNyZWF0ZShZLmNyZWF0ZShnLHApLFkuY3JlYXRlKGcscCkpLHRleHQ6IiwifTtrZS51cGRhdGUoYyxbdl0sMSl9ZWxzZSBpZihvLmxhc3RQcm9wZXJ0eT09PSExJiZsPT09cy5sZW5ndGgtMSl7Y29uc3QgZz1vLmNvbW1hSW5kZXgsdj1vLmNvbW1hTGluZS1vLmJlZ2lubmluZ0xpbmVOdW1iZXIsXz17cmFuZ2U6VS5jcmVhdGUoWS5jcmVhdGUodixnKSxZLmNyZWF0ZSh2LGcrMSkpLHRleHQ6IiJ9O2tlLnVwZGF0ZShjLFtfXSwxKX1jb25zdCBkPW8uZW5kTGluZU51bWJlci1vLmJlZ2lubmluZ0xpbmVOdW1iZXIrMSxtPXtyYW5nZTpVLmNyZWF0ZShZLmNyZWF0ZShhLDApLFkuY3JlYXRlKGErZCwwKSksdGV4dDpjLmdldFRleHQoKX07a2UudXBkYXRlKG4sW21dLDEpLFJvKHIsbyxhKSxhPWErZH19cmV0dXJuIG59ZnVuY3Rpb24gUm8oZSx0LG4pe2lmKHQuY2hpbGRyZW5Qcm9wZXJ0aWVzLmxlbmd0aCE9PTApaWYodC50eXBlPT09aWUuT2JqZWN0KXtsZXQgcj0xLzA7Zm9yKGNvbnN0IHMgb2YgdC5jaGlsZHJlblByb3BlcnRpZXMpcy5iZWdpbm5pbmdMaW5lTnVtYmVyPHImJihyPXMuYmVnaW5uaW5nTGluZU51bWJlcik7Y29uc3QgaT1yLXQuYmVnaW5uaW5nTGluZU51bWJlcjtuPW4raSxlLnB1c2gobmV3IENvKG4sdC5jaGlsZHJlblByb3BlcnRpZXMpKX1lbHNlIHQudHlwZT09PWllLkFycmF5JiZNbyhlLHQsbil9ZnVuY3Rpb24gTW8oZSx0LG4pe2Zvcihjb25zdCByIG9mIHQuY2hpbGRyZW5Qcm9wZXJ0aWVzKXtpZihyLnR5cGU9PT1pZS5PYmplY3Qpe2xldCBpPTEvMDtmb3IoY29uc3QgYSBvZiByLmNoaWxkcmVuUHJvcGVydGllcylhLmJlZ2lubmluZ0xpbmVOdW1iZXI8aSYmKGk9YS5iZWdpbm5pbmdMaW5lTnVtYmVyKTtjb25zdCBzPWktci5iZWdpbm5pbmdMaW5lTnVtYmVyO2UucHVzaChuZXcgQ28obityLmJlZ2lubmluZ0xpbmVOdW1iZXItdC5iZWdpbm5pbmdMaW5lTnVtYmVyK3Msci5jaGlsZHJlblByb3BlcnRpZXMpKX1yLnR5cGU9PT1pZS5BcnJheSYmTW8oZSxyLG4rci5iZWdpbm5pbmdMaW5lTnVtYmVyLXQuYmVnaW5uaW5nTGluZU51bWJlcil9fXZhciBDbz1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuYmVnaW5uaW5nTGluZU51bWJlcj1lLHRoaXMucHJvcGVydHlUcmVlQXJyYXk9dH19O2Z1bmN0aW9uIG8xKGUsdCl7Y29uc3Qgbj1bXTtyZXR1cm4gdC52aXNpdChyPT57aWYoci50eXBlPT09InByb3BlcnR5IiYmci5rZXlOb2RlLnZhbHVlPT09IiRyZWYiJiZyLnZhbHVlTm9kZT8udHlwZT09PSJzdHJpbmciKXtjb25zdCBpPXIudmFsdWVOb2RlLnZhbHVlLHM9dTEodCxpKTtpZihzKXtjb25zdCBhPWUucG9zaXRpb25BdChzLm9mZnNldCk7bi5wdXNoKHt0YXJnZXQ6YCR7ZS51cml9IyR7YS5saW5lKzF9LCR7YS5jaGFyYWN0ZXIrMX1gLHJhbmdlOmwxKGUsci52YWx1ZU5vZGUpfSl9fXJldHVybiEwfSksUHJvbWlzZS5yZXNvbHZlKG4pfWZ1bmN0aW9uIGwxKGUsdCl7cmV0dXJuIFUuY3JlYXRlKGUucG9zaXRpb25BdCh0Lm9mZnNldCsxKSxlLnBvc2l0aW9uQXQodC5vZmZzZXQrdC5sZW5ndGgtMSkpfWZ1bmN0aW9uIHUxKGUsdCl7Y29uc3Qgbj1jMSh0KTtyZXR1cm4gbj9RcihuLGUucm9vdCk6bnVsbH1mdW5jdGlvbiBRcihlLHQpe2lmKCF0KXJldHVybiBudWxsO2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdDtjb25zdCBuPWUuc2hpZnQoKTtpZih0JiZ0LnR5cGU9PT0ib2JqZWN0Iil7Y29uc3Qgcj10LnByb3BlcnRpZXMuZmluZChpPT5pLmtleU5vZGUudmFsdWU9PT1uKTtyZXR1cm4gcj9RcihlLHIudmFsdWVOb2RlKTpudWxsfWVsc2UgaWYodCYmdC50eXBlPT09ImFycmF5IiYmbi5tYXRjaCgvXigwfFsxLTldWzAtOV0qKSQvKSl7Y29uc3Qgcj1OdW1iZXIucGFyc2VJbnQobiksaT10Lml0ZW1zW3JdO3JldHVybiBpP1FyKGUsaSk6bnVsbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBjMShlKXtyZXR1cm4gZT09PSIjIj9bXTplWzBdIT09IiMifHxlWzFdIT09Ii8iP251bGw6ZS5zdWJzdHJpbmcoMikuc3BsaXQoL1wvLykubWFwKGYxKX1mdW5jdGlvbiBmMShlKXtyZXR1cm4gZS5yZXBsYWNlKC9+MS9nLCIvIikucmVwbGFjZSgvfjAvZywifiIpfWZ1bmN0aW9uIGgxKGUpe2NvbnN0IHQ9ZS5wcm9taXNlQ29uc3RydWN0b3J8fFByb21pc2Usbj1uZXcgWWMoZS5zY2hlbWFSZXF1ZXN0U2VydmljZSxlLndvcmtzcGFjZUNvbnRleHQsdCk7bi5zZXRTY2hlbWFDb250cmlidXRpb25zKEpyKTtjb25zdCByPW5ldyBWYyhuLGUuY29udHJpYnV0aW9ucyx0LGUuY2xpZW50Q2FwYWJpbGl0aWVzKSxpPW5ldyBEYyhuLGUuY29udHJpYnV0aW9ucyx0KSxzPW5ldyBXYyhuKSxhPW5ldyBCYyhuLHQpO3JldHVybntjb25maWd1cmU6bD0+e24uY2xlYXJFeHRlcm5hbFNjaGVtYXMoKSxsLnNjaGVtYXM/LmZvckVhY2gobi5yZWdpc3RlckV4dGVybmFsU2NoZW1hLmJpbmQobikpLGEuY29uZmlndXJlKGwpfSxyZXNldFNjaGVtYTpsPT5uLm9uUmVzb3VyY2VDaGFuZ2UobCksZG9WYWxpZGF0aW9uOmEuZG9WYWxpZGF0aW9uLmJpbmQoYSksZ2V0TGFuZ3VhZ2VTdGF0dXM6YS5nZXRMYW5ndWFnZVN0YXR1cy5iaW5kKGEpLHBhcnNlSlNPTkRvY3VtZW50Omw9PkZjKGwse2NvbGxlY3RDb21tZW50czohMH0pLG5ld0pTT05Eb2N1bWVudDoobCxvKT0+SWMobCxvKSxnZXRNYXRjaGluZ1NjaGVtYXM6bi5nZXRNYXRjaGluZ1NjaGVtYXMuYmluZChuKSxkb1Jlc29sdmU6ci5kb1Jlc29sdmUuYmluZChyKSxkb0NvbXBsZXRlOnIuZG9Db21wbGV0ZS5iaW5kKHIpLGZpbmREb2N1bWVudFN5bWJvbHM6cy5maW5kRG9jdW1lbnRTeW1ib2xzLmJpbmQocyksZmluZERvY3VtZW50U3ltYm9sczI6cy5maW5kRG9jdW1lbnRTeW1ib2xzMi5iaW5kKHMpLGZpbmREb2N1bWVudENvbG9yczpzLmZpbmREb2N1bWVudENvbG9ycy5iaW5kKHMpLGdldENvbG9yUHJlc2VudGF0aW9uczpzLmdldENvbG9yUHJlc2VudGF0aW9ucy5iaW5kKHMpLGRvSG92ZXI6aS5kb0hvdmVyLmJpbmQoaSksZ2V0Rm9sZGluZ1JhbmdlczplMSxnZXRTZWxlY3Rpb25SYW5nZXM6dDEsZmluZERlZmluaXRpb246KCk9PlByb21pc2UucmVzb2x2ZShbXSksZmluZExpbmtzOm8xLGZvcm1hdDoobCxvLHUpPT5YcihsLHUsbyksc29ydDoobCxvKT0+aTEobCxvKX19dmFyIFRvO3R5cGVvZiBmZXRjaDwidSImJihUbz1mdW5jdGlvbihlKXtyZXR1cm4gZmV0Y2goZSkudGhlbih0PT50LnRleHQoKSl9KTt2YXIgZDE9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXt0aGlzLl9jdHg9ZSx0aGlzLl9sYW5ndWFnZVNldHRpbmdzPXQubGFuZ3VhZ2VTZXR0aW5ncyx0aGlzLl9sYW5ndWFnZUlkPXQubGFuZ3VhZ2VJZCx0aGlzLl9sYW5ndWFnZVNlcnZpY2U9aDEoe3dvcmtzcGFjZUNvbnRleHQ6e3Jlc29sdmVSZWxhdGl2ZVBhdGg6KG4scik9Pntjb25zdCBpPXIuc3Vic3RyKDAsci5sYXN0SW5kZXhPZigiLyIpKzEpO3JldHVybiBwMShpLG4pfX0sc2NoZW1hUmVxdWVzdFNlcnZpY2U6dC5lbmFibGVTY2hlbWFSZXF1ZXN0P1RvOnZvaWQgMCxjbGllbnRDYXBhYmlsaXRpZXM6anIuTEFURVNUfSksdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLl9sYW5ndWFnZVNldHRpbmdzKX1hc3luYyBkb1ZhbGlkYXRpb24oZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKHQpe2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gdGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmRvVmFsaWRhdGlvbih0LG4sdGhpcy5fbGFuZ3VhZ2VTZXR0aW5ncyl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSl9YXN5bmMgZG9Db21wbGV0ZShlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0NvbXBsZXRlKG4sdCxyKX1hc3luYyBkb1Jlc29sdmUoZSl7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb1Jlc29sdmUoZSl9YXN5bmMgZG9Ib3ZlcihlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm4gbnVsbDtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobik7cmV0dXJuIHRoaXMuX2xhbmd1YWdlU2VydmljZS5kb0hvdmVyKG4sdCxyKX1hc3luYyBmb3JtYXQoZSx0LG4pe2xldCByPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighcilyZXR1cm5bXTtsZXQgaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZm9ybWF0KHIsdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIHJlc2V0U2NoZW1hKGUpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnJlc2V0U2NoZW1hKGUpKX1hc3luYyBmaW5kRG9jdW1lbnRTeW1ib2xzKGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm5bXTtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCkscj10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZmluZERvY3VtZW50U3ltYm9sczIodCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGZpbmREb2N1bWVudENvbG9ycyhlKXtsZXQgdD10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXQpcmV0dXJuW107bGV0IG49dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHQpLHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmZpbmREb2N1bWVudENvbG9ycyh0LG4pO3JldHVybiBQcm9taXNlLnJlc29sdmUocil9YXN5bmMgZ2V0Q29sb3JQcmVzZW50YXRpb25zKGUsdCxuKXtsZXQgcj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIXIpcmV0dXJuW107bGV0IGk9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLnBhcnNlSlNPTkRvY3VtZW50KHIpLHM9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldENvbG9yUHJlc2VudGF0aW9ucyhyLGksdCxuKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMpfWFzeW5jIGdldEZvbGRpbmdSYW5nZXMoZSx0KXtsZXQgbj10aGlzLl9nZXRUZXh0RG9jdW1lbnQoZSk7aWYoIW4pcmV0dXJuW107bGV0IHI9dGhpcy5fbGFuZ3VhZ2VTZXJ2aWNlLmdldEZvbGRpbmdSYW5nZXMobix0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHIpfWFzeW5jIGdldFNlbGVjdGlvblJhbmdlcyhlLHQpe2xldCBuPXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighbilyZXR1cm5bXTtsZXQgcj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQobiksaT10aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0U2VsZWN0aW9uUmFuZ2VzKG4sdCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpfWFzeW5jIHBhcnNlSlNPTkRvY3VtZW50KGUpe2xldCB0PXRoaXMuX2dldFRleHREb2N1bWVudChlKTtpZighdClyZXR1cm4gbnVsbDtsZXQgbj10aGlzLl9sYW5ndWFnZVNlcnZpY2UucGFyc2VKU09ORG9jdW1lbnQodCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShuKX1hc3luYyBnZXRNYXRjaGluZ1NjaGVtYXMoZSl7bGV0IHQ9dGhpcy5fZ2V0VGV4dERvY3VtZW50KGUpO2lmKCF0KXJldHVybltdO2xldCBuPXRoaXMuX2xhbmd1YWdlU2VydmljZS5wYXJzZUpTT05Eb2N1bWVudCh0KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xhbmd1YWdlU2VydmljZS5nZXRNYXRjaGluZ1NjaGVtYXModCxuKSl9X2dldFRleHREb2N1bWVudChlKXtsZXQgdD10aGlzLl9jdHguZ2V0TWlycm9yTW9kZWxzKCk7Zm9yKGxldCBuIG9mIHQpaWYobi51cmkudG9TdHJpbmcoKT09PWUpcmV0dXJuIGtlLmNyZWF0ZShlLHRoaXMuX2xhbmd1YWdlSWQsbi52ZXJzaW9uLG4uZ2V0VmFsdWUoKSk7cmV0dXJuIG51bGx9fSxtMT00Nyxacj00NjtmdW5jdGlvbiBnMShlKXtyZXR1cm4gZS5jaGFyQ29kZUF0KDApPT09bTF9ZnVuY3Rpb24gcDEoZSx0KXtpZihnMSh0KSl7Y29uc3Qgbj1SdC5wYXJzZShlKSxyPXQuc3BsaXQoIi8iKTtyZXR1cm4gbi53aXRoKHtwYXRoOlBvKHIpfSkudG9TdHJpbmcoKX1yZXR1cm4gYjEoZSx0KX1mdW5jdGlvbiBQbyhlKXtjb25zdCB0PVtdO2Zvcihjb25zdCByIG9mIGUpci5sZW5ndGg9PT0wfHxyLmxlbmd0aD09PTEmJnIuY2hhckNvZGVBdCgwKT09PVpyfHwoci5sZW5ndGg9PT0yJiZyLmNoYXJDb2RlQXQoMCk9PT1aciYmci5jaGFyQ29kZUF0KDEpPT09WnI/dC5wb3AoKTp0LnB1c2gocikpO2UubGVuZ3RoPjEmJmVbZS5sZW5ndGgtMV0ubGVuZ3RoPT09MCYmdC5wdXNoKCIiKTtsZXQgbj10LmpvaW4oIi8iKTtyZXR1cm4gZVswXS5sZW5ndGg9PT0wJiYobj0iLyIrbiksbn1mdW5jdGlvbiBiMShlLC4uLnQpe2NvbnN0IG49UnQucGFyc2UoZSkscj1uLnBhdGguc3BsaXQoIi8iKTtmb3IobGV0IGkgb2YgdClyLnB1c2goLi4uaS5zcGxpdCgiLyIpKTtyZXR1cm4gbi53aXRoKHtwYXRoOlBvKHIpfSkudG9TdHJpbmcoKX1zZWxmLm9ubWVzc2FnZT0oKT0+e29hKChlLHQpPT5uZXcgZDEoZSx0KSl9fSkoKTsK", c = (Z) => Uint8Array.from(atob(Z), (l) => l.charCodeAt(0)), d = typeof self < "u" && self.Blob && new Blob([c(m)], { type: "text/javascript;charset=utf-8" });
|
2
|
-
function G(Z) {
|
3
|
-
let l;
|
4
|
-
try {
|
5
|
-
if (l = d && (self.URL || self.webkitURL).createObjectURL(d), !l) throw "";
|
6
|
-
const b = new Worker(l, {
|
7
|
-
name: Z?.name
|
8
|
-
});
|
9
|
-
return b.addEventListener("error", () => {
|
10
|
-
(self.URL || self.webkitURL).revokeObjectURL(l);
|
11
|
-
}), b;
|
12
|
-
} catch {
|
13
|
-
return new Worker(
|
14
|
-
"data:text/javascript;base64," + m,
|
15
|
-
{
|
16
|
-
name: Z?.name
|
17
|
-
}
|
18
|
-
);
|
19
|
-
} finally {
|
20
|
-
l && (self.URL || self.webkitURL).revokeObjectURL(l);
|
21
|
-
}
|
22
|
-
}
|
23
|
-
export {
|
24
|
-
G as default
|
25
|
-
};
|