tx · 9fjuJxtDD4ETGMgXdGVsj2zGtrHDoH2AY1g3oejoUPRc

3MzqQ3HKdkHmJmk9mDhAeAMxmK5D2ztdAe5:  -0.42000000 Waves

2023.06.16 11:41 [2624962] smart account 3MzqQ3HKdkHmJmk9mDhAeAMxmK5D2ztdAe5 > SELF 0.00000000 Waves

{ "type": 13, "id": "9fjuJxtDD4ETGMgXdGVsj2zGtrHDoH2AY1g3oejoUPRc", "fee": 42000000, "feeAssetId": null, "timestamp": 1686904884775, "version": 2, "chainId": 84, "sender": "3MzqQ3HKdkHmJmk9mDhAeAMxmK5D2ztdAe5", "senderPublicKey": "FEnkfXnQZkk1FmjhH6QZqyK2taN6ngnZBexevKxouLUM", "proofs": [ "x3mcVMjJYReaKSqFZeNsDfzmWANfjXfhUmRm3UotSvhqU4RfYX9NFhRBy9853tcibZ3g9eoWk2TyeBfw8T1PY8h", "56pKcCixFMH75n3JvzBVF3edLFxB9tGNzgHygYU38NnwJ63bC3UYC7dsqC8E6BEz4AGcNmticPewKZyTuBexmSaP" ], "script": "base64:BgJaCAISBgoEAhgREhIGCgQCGBESEgYKBAIYERISBgoEAhgREhIGCgQCGBESEgYKBAIYERISBgoEAhgREhIGCgQCGBESEgYKBAIYERISBgoEAhgREhIGCgQCGBESUwAHdmVyc2lvbgIFMS4wLjAACGtWZXJzaW9uAgd2ZXJzaW9uAAdrQWN0aXZlAgZhY3RpdmUAC2tEZXByZWNhdGVkAgtkZXByZWNhdGVkXwAJa0Fzc2V0SWRBAgpBX2Fzc2V0X2lkAAlrQXNzZXRJZEICCkJfYXNzZXRfaWQACWtCYWxhbmNlQQIPQV9hc3NldF9iYWxhbmNlAAlrQmFsYW5jZUICD0JfYXNzZXRfYmFsYW5jZQANa0JhbGFuY2VJbml0QQIMQV9hc3NldF9pbml0AA1rQmFsYW5jZUluaXRCAgxCX2Fzc2V0X2luaXQADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkABFrU2hhcmVBc3NldFN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AARrRmVlAgpjb21taXNzaW9uAAZrQ2F1c2UCDnNodXRkb3duX2NhdXNlAA1rRmlyc3RIYXJ2ZXN0Ag1maXJzdF9oYXJ2ZXN0ABNrRmlyc3RIYXJ2ZXN0SGVpZ2h0AhRmaXJzdF9oYXJ2ZXN0X2hlaWdodAALa1NoYXJlTGltaXQCHHNoYXJlX2xpbWl0X29uX2ZpcnN0X2hhcnZlc3QAC2tCYXNlUGVyaW9kAgtiYXNlX3BlcmlvZAANa1BlcmlvZExlbmd0aAINcGVyaW9kX2xlbmd0aAAMa1N0YXJ0SGVpZ2h0AgxzdGFydF9oZWlnaHQADGtVU0ROQWRkcmVzcwIYc3Rha2luZ191c2RubnNidF9hZGRyZXNzAAxrRVVSTkFkZHJlc3MCFHN0YWtpbmdfZXVybl9hZGRyZXNzAA5rTGVhc2luZ0Ftb3VudAIObGVhc2luZ19hbW91bnQADGtVU0ROQXNzZXRJZAINdXNkbl9hc3NldF9pZAAMa0VVUk5Bc3NldElkAg1ldXJuX2Fzc2V0X2lkAA5rU3Rha2luZ0Fzc2V0cwIOc3Rha2luZ19hc3NldHMADWtPcmFjbGVBY3RpdmUCFGFjdGl2ZV9hbGxfY29udHJhY3RzAAprRGlzY291bnRzAglkaXNjb3VudHMAD2tEaXNjb3VudFZhbHVlcwIPZGlzY291bnRfdmFsdWVzAA9rVXNlckdTd29wSW5Hb3YCDV9HU3dvcF9hbW91bnQADmtVc2VyU3dvcEluR292AgxfU1dPUF9hbW91bnQAC2tPcmFjbGVQb29sAgVwb29sXwANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwAPa1RlYW1Cb3hBZGRyZXNzAhB0ZWFtX2JveF9hZGRyZXNzAA5rVm90aW5nQWRkcmVzcwIOdm90aW5nX2FkZHJlc3MAC2tHb3ZBZGRyZXNzAhJnb3Zlcm5hbmNlX2FkZHJlc3MAD2tGYXJtaW5nQWRkcmVzcwIPZmFybWluZ19hZGRyZXNzAAZvcmFjbGUJAQdBZGRyZXNzAQEaAVeK/whomjW6QM1hdPISN96mN/D6OM7oHjgBE2dldEJhc2U1OEZyb21PcmFjbGUBA2tleQQHJG1hdGNoMAkAnQgCBQZvcmFjbGUFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEBnN0cmluZwUHJG1hdGNoMAkA2QQBBQZzdHJpbmcEB25vdGhpbmcFByRtYXRjaDAJAAIBCQCsAgIFA2tleQIIaXMgZW1wdHkADGFkbWluUHViS2V5MQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkxAAxhZG1pblB1YktleTIJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MgAMYWRtaW5QdWJLZXkzCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTMAEWFkbWluSW52b2tlUHViS2V5CQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEmtBZG1pbkludm9rZVB1YktleQAPbW9uZXlCb3hBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUQa01vbmV5Qm94QWRkcmVzcwAOdGVhbUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ9rVGVhbUJveEFkZHJlc3MADXZvdGluZ0FkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ5rVm90aW5nQWRkcmVzcwAKZ292QWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFC2tHb3ZBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAEVVNETgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFzc2V0SWQABEVVUk4JARNnZXRCYXNlNThGcm9tT3JhY2xlAQUMa0VVUk5Bc3NldElkAA1zdGFraW5nQXNzZXRzCQERQGV4dHJOYXRpdmUoMTA1MykCBQZvcmFjbGUFDmtTdGFraW5nQXNzZXRzABJzdGFraW5nVVNETkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQxrVVNETkFkZHJlc3MAEnN0YWtpbmdFVVJOQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtFVVJOQWRkcmVzcwAKYmFzZVBlcmlvZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MFC2tCYXNlUGVyaW9kAhFFbXB0eSBrQmFzZVBlcmlvZAALc3RhcnRIZWlnaHQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQ12b3RpbmdBZGRyZXNzBQxrU3RhcnRIZWlnaHQCEkVtcHR5IGtTdGFydEhlaWdodAAMcGVyaW9kTGVuZ3RoCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUNdm90aW5nQWRkcmVzcwUNa1BlcmlvZExlbmd0aAITRW1wdHkga1BlcmlvZExlbmd0aAAVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kCQBkAgkAZAIFCmJhc2VQZXJpb2QJAGkCCQBlAgUGaGVpZ2h0BQtzdGFydEhlaWdodAUMcGVyaW9kTGVuZ3RoAAMABmFjdGl2ZQkBEUBleHRyTmF0aXZlKDEwNTEpAgUGb3JhY2xlBQ1rT3JhY2xlQWN0aXZlAAlmZWVTY2FsZTYAwIQ9AAZzY2FsZTgAgMLXLwAHc2NhbGUxNgkAtgIBAICAhP6m3uERAQ5hY2NvdW50QmFsYW5jZQIHYXNzZXRJZARwb29sBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHBvb2wFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQRwb29sCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQxzdGFrZWRBbW91bnQCB2Fzc2V0SWQEcG9vbAQWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBANhSWQFByRtYXRjaDADCQAAAgUDYUlkBQRVU0ROCQCaCAIFEnN0YWtpbmdVU0ROQWRkcmVzcwkArAICCQCsAgIJAKwCAgIMcnBkX2JhbGFuY2VfCQDYBAEFA2FJZAIBXwkApQgBBQRwb29sAwkAAAIFA2FJZAUERVVSTgkAmggCBRJzdGFraW5nRVVSTkFkZHJlc3MJAKwCAgkArAICCQCsAgICGCVzJXMlc19fc3Rha2luZ0JhbGFuY2VfXwkA2AQBBQNhSWQCAl9fCQClCAEFBHBvb2wAAAMJAAECBQckbWF0Y2gwAgRVbml0CQELdmFsdWVPckVsc2UCCQCaCAIFBHBvb2wFDmtMZWFzaW5nQW1vdW50AAAJAAIBAgtNYXRjaCBlcnJvcgQHJG1hdGNoMAUWc3Rha2VkQW1vdW50Q2FsY3VsYXRlZAMJAAECBQckbWF0Y2gwAgNJbnQEAWkFByRtYXRjaDAFAWkAAAEMZ2V0QXNzZXRJbmZvAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwMJAAECBQckbWF0Y2gwAgZTdHJpbmcGCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAECyR0MDQwNzk0MjUxBAckbWF0Y2gxBQJpZAMJAAECBQckbWF0Y2gxAgpCeXRlVmVjdG9yBANhSWQFByRtYXRjaDEJAJQKAgkA2AQBBQNhSWQFA2FJZAMJAAECBQckbWF0Y2gxAgZTdHJpbmcEA2FJZAUHJG1hdGNoMQkAlAoCBQNhSWQJANkEAQUDYUlkCQACAQILTWF0Y2ggZXJyb3IECHN0cmluZ0lkCAULJHQwNDA3OTQyNTECXzEEB2J5dGVzSWQIBQskdDA0MDc5NDI1MQJfMgQEaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFB2J5dGVzSWQJAKwCAgkArAICAgZBc3NldCAFCHN0cmluZ0lkAg4gZG9lc24ndCBleGlzdAkAlQoDBQhzdHJpbmdJZAgFBGluZm8EbmFtZQgFBGluZm8IZGVjaW1hbHMDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAJAJUKAwIFV0FWRVMCBVdBVkVTAAgJAAIBAgtNYXRjaCBlcnJvcgEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAEUY2FsY3VsYXRlRmVlRGlzY291bnQBCHVzZXJBZGRyBApzd29wQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgkApQgBBQh1c2VyQWRkcgUOa1VzZXJTd29wSW5Hb3YAAAQLZ1N3b3BBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUKZ292QWRkcmVzcwkArAICCQClCAEFCHVzZXJBZGRyBQ9rVXNlckdTd29wSW5Hb3YFCnN3b3BBbW91bnQEDmRpc2NvdW50VmFsdWVzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUPa0Rpc2NvdW50VmFsdWVzAgEsBAlkaXNjb3VudHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQprRGlzY291bnRzAgEsAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAAJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAADAwkAZwIFC2dTd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACBQtnU3dvcEFtb3VudAcJAGUCBQlmZWVTY2FsZTYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlkaXNjb3VudHMAAQMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMFC2dTd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwACAwMJAGcCBQtnU3dvcEFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmRpc2NvdW50VmFsdWVzAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMABAULZ1N3b3BBbW91bnQHCQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAMDCQBnAgULZ1N3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAECQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAQFCWZlZVNjYWxlNgENY2FsY3VsYXRlRmVlcwcJcG10QW1vdW50Em1pbkFtb3VudFRvUmVjZWl2ZQl0b2tlbkZyb20HdG9rZW5UbwNmZWUGZmVlR292B2ZlZVRlYW0EEGFtb3VudFdpdGhvdXRGZWUJAGsDBQd0b2tlblRvBQlwbXRBbW91bnQJAGQCBQlwbXRBbW91bnQFCXRva2VuRnJvbQQNYW1vdW50V2l0aEZlZQkAawMFEGFtb3VudFdpdGhvdXRGZWUJAGUCBQlmZWVTY2FsZTYFA2ZlZQUJZmVlU2NhbGU2BBBnb3Zlcm5hbmNlUmV3YXJkCQBrAwUQYW1vdW50V2l0aG91dEZlZQUGZmVlR292BQlmZWVTY2FsZTYECnRlYW1SZXdhcmQJAGsDBRBhbW91bnRXaXRob3V0RmVlBQdmZWVUZWFtBQlmZWVTY2FsZTYDCQBmAgUSbWluQW1vdW50VG9SZWNlaXZlBQ1hbW91bnRXaXRoRmVlCQACAQkArAICCQCsAgIJAKwCAgIdQ2FsY3VsYXRlZCBhbW91bnQgdG8gcmVjZWl2ZSAJAKQDAQUNYW1vdW50V2l0aEZlZQIgIGlzIGxlc3MgdGhhbiBzcGVjaWZpZWQgbWluaW11bSAJAKQDAQUSbWluQW1vdW50VG9SZWNlaXZlCQCWCgQFEGFtb3VudFdpdGhvdXRGZWUFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQBEGNhbGN1bGF0ZVZpcnRQYXkDCXBtdEFtb3VudAdiYWxhbmNlA2ZlZQQBRgkAZQIFCWZlZVNjYWxlNgUDZmVlBAFrCQBrAwUDZmVlADcAZAQBYQkAZAIFBnNjYWxlOAkAawMJAGgCBQFGBQFrBQZzY2FsZTgJAGgCBQlmZWVTY2FsZTYFCWZlZVNjYWxlNgQBYgkAZQIJAGUCCQBkAgkAZAIFB2JhbGFuY2UJAGsDBQdiYWxhbmNlBQFGBQlmZWVTY2FsZTYJAGsDBQlwbXRBbW91bnQFAUYFCWZlZVNjYWxlNgUJcG10QW1vdW50CQBrAwUJcG10QW1vdW50CQBoAgUBRgUBawkAaAIFCWZlZVNjYWxlNgUJZmVlU2NhbGU2BAFjCQC5AgIJAL4CAQkAtgIBBQdiYWxhbmNlCQC2AgEFCXBtdEFtb3VudAQBRAkAuAICCQC5AgIJALYCAQUBYgkAtgIBBQFiCQC8AgMJALkCAgkAtgIBAAQFAWMJALYCAQUBYQkAtgIBBQZzY2FsZTgJAKADAQkAvAIDCQC3AgIJAL4CAQkAtgIBBQFiCQEKc3FydEJpZ0ludAQFAUQAAAAABQRET1dOCQC2AgEFBnNjYWxlOAkAtgIBCQBoAgACBQFhARFwYXJzZVBheW1lbnRBc3NldAEHYXNzZXRJZAMJAAACBQdhc3NldElkAQAFBHVuaXQFB2Fzc2V0SWQBEXN1c3BlbmRTdXNwaWNpb3VzBg9hY2NvdW50QmFsYW5jZUEPYWNjb3VudEJhbGFuY2VCCGJhbGFuY2VBCGJhbGFuY2VCCGFzc2V0SWRBCGFzc2V0SWRCCQEHc3VzcGVuZAEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICI1N1c3BpY2lvdXMgc3RhdGUuIEFjdHVhbCBiYWxhbmNlczogCQCkAwEFD2FjY291bnRCYWxhbmNlQQIBIAUIYXNzZXRJZEECAiwgCQCkAwEFD2FjY291bnRCYWxhbmNlQgIBIAUIYXNzZXRJZEICCS4gU3RhdGU6IAkApAMBBQhiYWxhbmNlQQIBIAUIYXNzZXRJZEECAiwgCQCkAwEFCGJhbGFuY2VCAgEgBQhhc3NldElkQgEIaXNBY3RpdmUAAwUGYWN0aXZlBQR1bml0CQACAQIfREFwcCBpcyBpbmFjdGl2ZSBhdCB0aGlzIG1vbWVudAEMaXNPcmFjbGVQb29sAQtwb29sQWRkcmVzcwMJAQlpc0RlZmluZWQBCQCdCAIFBm9yYWNsZQkArAICBQtrT3JhY2xlUG9vbAULcG9vbEFkZHJlc3MFBHVuaXQJAAIBAhtEQXBwIGlzIG5vdCByZWdpc3RlcmVkIHBvb2wBDGlzRGVwcmljYXRlZAELcG9vbEFkZHJlc3MDCQEBIQEJAQt2YWx1ZU9yRWxzZQIJAJsIAgUGb3JhY2xlCQCsAgIFC2tEZXByZWNhdGVkBQtwb29sQWRkcmVzcwcFBHVuaXQJAAIBAjFQb29sIGlzIGRlcHJlY2F0ZWQuIE9ubHkgd2l0aGRyYXcgYWN0aW9uIGFsbG93ZWQuAQ9nZXRQb29sQmFsYW5jZXMDBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIECGJhbGFuY2VBCQERQGV4dHJOYXRpdmUoMTA1MCkCBQRwb29sBQlrQmFsYW5jZUEECGJhbGFuY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQRwb29sBQlrQmFsYW5jZUIEDXN0YWtlZEFtb3VudEEJAQxzdGFrZWRBbW91bnQCBQhhc3NldElkQQUEcG9vbAQNc3Rha2VkQW1vdW50QgkBDHN0YWtlZEFtb3VudAIFCGFzc2V0SWRCBQRwb29sBA9hY2NvdW50QmFsYW5jZUEJAGQCCQEOYWNjb3VudEJhbGFuY2UCBQhhc3NldElkQQUEcG9vbAUNc3Rha2VkQW1vdW50QQQPYWNjb3VudEJhbGFuY2VCCQBkAgkBDmFjY291bnRCYWxhbmNlAgUIYXNzZXRJZEIFBHBvb2wFDXN0YWtlZEFtb3VudEIEC3NoYXJlU3VwcGx5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQRwb29sBRFrU2hhcmVBc3NldFN1cHBseQkAlwoFBQhiYWxhbmNlQQUIYmFsYW5jZUIFD2FjY291bnRCYWxhbmNlQQUPYWNjb3VudEJhbGFuY2VCBQtzaGFyZVN1cHBseQENZ2V0UG9vbEFzc2V0cwEEcG9vbAQLc3RyQXNzZXRJZEEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHBvb2wFCWtBc3NldElkQQQLc3RyQXNzZXRJZEIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHBvb2wFCWtBc3NldElkQgQIYXNzZXRJZEEDCQAAAgULc3RyQXNzZXRJZEECBVdBVkVTBQR1bml0CQDZBAEFC3N0ckFzc2V0SWRBBAhhc3NldElkQgMJAAACBQtzdHJBc3NldElkQgIFV0FWRVMFBHVuaXQJANkEAQULc3RyQXNzZXRJZEIEDHNoYXJlQXNzZXRJZAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCBQRwb29sBQ1rU2hhcmVBc3NldElkCQCXCgUFC3N0ckFzc2V0SWRBBQtzdHJBc3NldElkQgUIYXNzZXRJZEEFCGFzc2V0SWRCBQxzaGFyZUFzc2V0SWQBDGdldEZlZVBhcmFtcwIEcG9vbAZjYWxsZXIEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBBQZjYWxsZXIEA2ZlZQkAbgQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHBvb2wFBGtGZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcEBmdvdkZlZQkAawMFA2ZlZQAjAGQEB3RlYW1GZWUJAGsDBQNmZWUACgBkCQCVCgMFA2ZlZQUGZ292RmVlBQd0ZWFtRmVlAR9jYWxjTFBBbW91bnRSZXBsZW5zaXNoVHdvVG9rZW5zBwRwbXRBBHBtdEIGcG10SWRBBnBtdElkQgRiYWxBBGJhbEIQc2hhcmVBc3NldFN1cHBseQQLJHQwOTU2Mjk2MzQJAQxnZXRBc3NldEluZm8BBQZwbXRJZEEEDnBtdFN0ckFzc2V0SWRBCAULJHQwOTU2Mjk2MzQCXzEEDXBtdEFzc2V0TmFtZUEIBQskdDA5NTYyOTYzNAJfMgQMcG10RGVjaW1hbHNBCAULJHQwOTU2Mjk2MzQCXzMECyR0MDk2Mzk5NzExCQEMZ2V0QXNzZXRJbmZvAQUGcG10SWRCBA5wbXRTdHJBc3NldElkQggFCyR0MDk2Mzk5NzExAl8xBA1wbXRBc3NldE5hbWVCCAULJHQwOTYzOTk3MTECXzIEDHBtdERlY2ltYWxzQggFCyR0MDk2Mzk5NzExAl8zBAdpbml0aWFsCQAAAgkAZAIFBGJhbEEFBGJhbEIAAAQMJHQwOTc1NDEwNDEzAwUHaW5pdGlhbAkAlwoFBQRwbXRBBQRwbXRCAAAFBnBtdElkQQkAtgIBAAEEE3JhdGlvU2hhcmVUb2tlbnNJbkEJALwCAwUHc2NhbGUxNgkAtgIBBQRwbXRBCQC2AgEFBGJhbEEEE3JhdGlvU2hhcmVUb2tlbnNJbkIJALwCAwUHc2NhbGUxNgkAtgIBBQRwbXRCCQC2AgEFBGJhbEIDCQC/AgIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFE3JhdGlvU2hhcmVUb2tlbnNJbkEEA3BtdAkAawMFBHBtdEEFBGJhbEIFBGJhbEEJAJcKBQUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQZwbXRJZEIFE3JhdGlvU2hhcmVUb2tlbnNJbkEEA3BtdAkAawMFBHBtdEIFBGJhbEEFBGJhbEIJAJcKBQUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQZwbXRJZEEFE3JhdGlvU2hhcmVUb2tlbnNJbkIECnBtdEFtb3VudEEIBQwkdDA5NzU0MTA0MTMCXzEECnBtdEFtb3VudEIIBQwkdDA5NzU0MTA0MTMCXzIEBmNoYW5nZQgFDCR0MDk3NTQxMDQxMwJfMwQNY2hhbmdlQXNzZXRJZAgFDCR0MDk3NTQxMDQxMwJfNAQPc2hhcmVUb2tlblJhdGlvCAUMJHQwOTc1NDEwNDEzAl81BBVzaGFyZVRva2VuVG9QYXlBbW91bnQDBQdpbml0aWFsBA1zaGFyZURlY2ltYWxzCQBpAgkAZAIFDHBtdERlY2ltYWxzQQUMcG10RGVjaW1hbHNCAAIJAGsDCQBsBgUKcG10QW1vdW50QQUMcG10RGVjaW1hbHNBAAUAAQUMcG10RGVjaW1hbHNBBQRET1dOCQBsBgUKcG10QW1vdW50QgUMcG10RGVjaW1hbHNCAAUAAQUMcG10RGVjaW1hbHNCBQRET1dOCQBsBgAKAAAFDXNoYXJlRGVjaW1hbHMAAAAABQRET1dOCQCgAwEJALwCAwUPc2hhcmVUb2tlblJhdGlvCQC2AgEFEHNoYXJlQXNzZXRTdXBwbHkFB3NjYWxlMTYJAJcKBQUVc2hhcmVUb2tlblRvUGF5QW1vdW50BQZjaGFuZ2UFDWNoYW5nZUFzc2V0SWQFCnBtdEFtb3VudEEFCnBtdEFtb3VudEIBHmNhbGNMUEFtb3VudFJlcGxhbnNpc2hPbmVUb2tlbgsJcG10QW1vdW50CnBtdEFzc2V0SWQDYUlkA2JJZARiYWxBBGJhbEIIbHBTdXBwbHkDZmVlBmdvdkZlZQd0ZWFtRmVlEHZpcnRHZXRNaW5BbW91bnQDCQAAAgUKcG10QXNzZXRJZAUDYUlkBA12aXJ0UGF5QW1vdW50CQEQY2FsY3VsYXRlVmlydFBheQMFCXBtdEFtb3VudAUEYmFsQQUDZmVlBA0kdDAxMTI3ODExNDI1CQENY2FsY3VsYXRlRmVlcwcFDXZpcnRQYXlBbW91bnQFEHZpcnRHZXRNaW5BbW91bnQFBGJhbEEFBGJhbEIFA2ZlZQUGZ292RmVlBQd0ZWFtRmVlBBBhbW91bnRXaXRob3V0RmVlCAUNJHQwMTEyNzgxMTQyNQJfMQQNYW1vdW50V2l0aEZlZQgFDSR0MDExMjc4MTE0MjUCXzIEEGdvdmVybmFuY2VSZXdhcmQIBQ0kdDAxMTI3ODExNDI1Al8zBAd0UmV3YXJkCAUNJHQwMTEyNzgxMTQyNQJfNAQMYmFsYW5jZUFWaXJ0CQBkAgUEYmFsQQUNdmlydFBheUFtb3VudAQMYmFsYW5jZUJWaXJ0CQBlAgkAZQIJAGQCBQRiYWxCBRBhbW91bnRXaXRob3V0RmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQd0UmV3YXJkBAtuZXdCYWxhbmNlQQkAZAIFBGJhbEEFCXBtdEFtb3VudAQLbmV3QmFsYW5jZUIJAGUCCQBlAgUEYmFsQgUQZ292ZXJuYW5jZVJld2FyZAUHdFJld2FyZAQTcmF0aW9TaGFyZVRva2Vuc0luQQkAvAIDCQC2AgEJAGUCBQlwbXRBbW91bnQFDXZpcnRQYXlBbW91bnQFB3NjYWxlMTYJALYCAQUMYmFsYW5jZUFWaXJ0BBNyYXRpb1NoYXJlVG9rZW5zSW5CCQC8AgMJALYCAQUNYW1vdW50V2l0aEZlZQUHc2NhbGUxNgkAtgIBBQxiYWxhbmNlQlZpcnQEFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAoAMBCQC8AgMJAJkDAQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5BCQDMCAIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFA25pbAkAtgIBBQhscFN1cHBseQUHc2NhbGUxNgQbc2hhcmVUb2tlblRvUGF5QW1vdW50SW5Cb3RoCQCgAwEJALwCAwkAvAIDCQC2AgEFCXBtdEFtb3VudAUHc2NhbGUxNgkAtgIBBQRiYWxBCQC2AgEFCGxwU3VwcGx5BQdzY2FsZTE2BARsb3NzCQBrAwkAZQIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUbc2hhcmVUb2tlblRvUGF5QW1vdW50SW5Cb3RoBQZzY2FsZTgFG3NoYXJlVG9rZW5Ub1BheUFtb3VudEluQm90aAkAmQoHBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgUQZ292ZXJuYW5jZVJld2FyZAUHdFJld2FyZAUDYklkBQRsb3NzBA12aXJ0UGF5QW1vdW50CQEQY2FsY3VsYXRlVmlydFBheQMFCXBtdEFtb3VudAUEYmFsQgUDZmVlBA0kdDAxMjQ1MTEyNTk4CQENY2FsY3VsYXRlRmVlcwcFDXZpcnRQYXlBbW91bnQFEHZpcnRHZXRNaW5BbW91bnQFBGJhbEIFBGJhbEEFA2ZlZQUGZ292RmVlBQd0ZWFtRmVlBBBhbW91bnRXaXRob3V0RmVlCAUNJHQwMTI0NTExMjU5OAJfMQQNYW1vdW50V2l0aEZlZQgFDSR0MDEyNDUxMTI1OTgCXzIEEGdvdmVybmFuY2VSZXdhcmQIBQ0kdDAxMjQ1MTEyNTk4Al8zBAd0UmV3YXJkCAUNJHQwMTI0NTExMjU5OAJfNAQMYmFsYW5jZUFWaXJ0CQBlAgkAZQIJAGQCBQRiYWxBBRBhbW91bnRXaXRob3V0RmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQd0UmV3YXJkBAxiYWxhbmNlQlZpcnQJAGQCBQRiYWxCBQ12aXJ0UGF5QW1vdW50BAtuZXdCYWxhbmNlQQkAZQIJAGUCBQRiYWxBBRBnb3Zlcm5hbmNlUmV3YXJkBQd0UmV3YXJkBAtuZXdCYWxhbmNlQgkAZAIFBGJhbEIFCXBtdEFtb3VudAQTcmF0aW9TaGFyZVRva2Vuc0luQQkAvAIDCQC2AgEFDWFtb3VudFdpdGhGZWUFB3NjYWxlMTYJALYCAQUMYmFsYW5jZUFWaXJ0BBNyYXRpb1NoYXJlVG9rZW5zSW5CCQC8AgMJALYCAQkAZQIFCXBtdEFtb3VudAUNdmlydFBheUFtb3VudAUHc2NhbGUxNgkAtgIBBQxiYWxhbmNlQlZpcnQEFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAoAMBCQC8AgMJAJkDAQkAzAgCBRNyYXRpb1NoYXJlVG9rZW5zSW5BCQDMCAIFE3JhdGlvU2hhcmVUb2tlbnNJbkIFA25pbAkAtgIBBQhscFN1cHBseQUHc2NhbGUxNgQbc2hhcmVUb2tlblRvUGF5QW1vdW50SW5Cb3RoCQCgAwEJALwCAwkAvAIDCQC2AgEFCXBtdEFtb3VudAUHc2NhbGUxNgkAtgIBBQRiYWxCCQC2AgEFCGxwU3VwcGx5BQdzY2FsZTE2BARsb3NzCQBrAwkAZQIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUbc2hhcmVUb2tlblRvUGF5QW1vdW50SW5Cb3RoBQZzY2FsZTgFG3NoYXJlVG9rZW5Ub1BheUFtb3VudEluQm90aAkAmQoHBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFC25ld0JhbGFuY2VBBQtuZXdCYWxhbmNlQgUQZ292ZXJuYW5jZVJld2FyZAUHdFJld2FyZAUDYUlkBQRsb3NzARdjYWxjTFBSZXBsZW5pc2hEaWZmUHJvcAsEcG10QQRwbXRCBnBtdElkQQZwbXRJZEIEYmFsQQRiYWxCCGxwU3VwcGx5A2ZlZQZnb3ZGZWUHdGVhbUZlZRB2aXJ0R2V0TWluQW1vdW50BA0kdDAxMzc0NzEzODk1CQEfY2FsY0xQQW1vdW50UmVwbGVuc2lzaFR3b1Rva2VucwcFBHBtdEEFBHBtdEIFBnBtdElkQQUGcG10SWRCBQRiYWxBBQRiYWxCBQhscFN1cHBseQQLbHBUd29BbW91bnQIBQ0kdDAxMzc0NzEzODk1Al8xBAZjaGFuZ2UIBQ0kdDAxMzc0NzEzODk1Al8yBA1jaGFuZ2VBc3NldElkCAUNJHQwMTM3NDcxMzg5NQJfMwQKcG10QW1vdW50QQgFDSR0MDEzNzQ3MTM4OTUCXzQECnBtdEFtb3VudEIIBQ0kdDAxMzc0NzEzODk1Al81AwkAZgIFBmNoYW5nZQAABA0kdDAxMzkyNzE0MTYyCQEeY2FsY0xQQW1vdW50UmVwbGFuc2lzaE9uZVRva2VuCwUGY2hhbmdlBQ1jaGFuZ2VBc3NldElkBQZwbXRJZEEFBnBtdElkQgkAZAIFBGJhbEEFCnBtdEFtb3VudEEJAGQCBQRiYWxCBQpwbXRBbW91bnRCBQhscFN1cHBseQUDZmVlBQZnb3ZGZWUFB3RlYW1GZWUFEHZpcnRHZXRNaW5BbW91bnQEBWxwT25lCAUNJHQwMTM5MjcxNDE2MgJfMQQLbmV3QmFsYW5jZUEIBQ0kdDAxMzkyNzE0MTYyAl8yBAtuZXdCYWxhbmNlQggFDSR0MDEzOTI3MTQxNjICXzMEEGdvdmVybmFuY2VSZXdhcmQIBQ0kdDAxMzkyNzE0MTYyAl80BAd0UmV3YXJkCAUNJHQwMTM5MjcxNDE2MgJfNQQDZ0lkCAUNJHQwMTM5MjcxNDE2MgJfNgQEbG9zcwgFDSR0MDEzOTI3MTQxNjICXzcJAJkKBwkAZAIFC2xwVHdvQW1vdW50BQVscE9uZQUEbG9zcwULbmV3QmFsYW5jZUEFC25ld0JhbGFuY2VCBRBnb3Zlcm5hbmNlUmV3YXJkBQd0UmV3YXJkBQNnSWQJAJkKBwULbHBUd29BbW91bnQAAAkAZAIFBGJhbEEFCnBtdEFtb3VudEEJAGQCBQRiYWxCBQpwbXRBbW91bnRCAAAAAAUEdW5pdAsBaQEfY2FsY0xQUmVwbGVuaXNoRGlmZlByb3BSRUFET05MWQQLY2FsbGVyQnl0ZXMEYXJncwhwQW1vdW50cwlwQXNzZXRJZHMEDSR0MDE0NDk4MTQ1ODgJAQ1nZXRQb29sQXNzZXRzAQgFAWkGY2FsbGVyBAtzdHJBc3NldElkQQgFDSR0MDE0NDk4MTQ1ODgCXzEEC3N0ckFzc2V0SWRCCAUNJHQwMTQ0OTgxNDU4OAJfMgQIYXNzZXRJZEEIBQ0kdDAxNDQ5ODE0NTg4Al8zBAhhc3NldElkQggFDSR0MDE0NDk4MTQ1ODgCXzQEDHNoYXJlQXNzZXRJZAgFDSR0MDE0NDk4MTQ1ODgCXzUEDSR0MDE0NTkzMTQ2ODUJAQ9nZXRQb29sQmFsYW5jZXMDCAUBaQZjYWxsZXIFCGFzc2V0SWRBBQhhc3NldElkQgQEYmFsQQgFDSR0MDE0NTkzMTQ2ODUCXzEEBGJhbEIIBQ0kdDAxNDU5MzE0Njg1Al8yBAdhY2NCYWxBCAUNJHQwMTQ1OTMxNDY4NQJfMwQHYWNjQmFsQggFDSR0MDE0NTkzMTQ2ODUCXzQECGxwU3VwcGx5CAUNJHQwMTQ1OTMxNDY4NQJfNQQEcG10QQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAAQEcG10QgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAQQQdmlydEdldE1pbkFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAgQNJHQwMTQ4MTkxNDg4NgkBDGdldEZlZVBhcmFtcwIIBQFpBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBANmZWUIBQ0kdDAxNDgxOTE0ODg2Al8xBAZnb3ZGZWUIBQ0kdDAxNDgxOTE0ODg2Al8yBAd0ZWFtRmVlCAUNJHQwMTQ4MTkxNDg4NgJfMwQNJHQwMTQ4OTExNTA4MwkBF2NhbGNMUFJlcGxlbmlzaERpZmZQcm9wCwUEcG10QQUEcG10QgUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBQhscFN1cHBseQUDZmVlBQZnb3ZGZWUFB3RlYW1GZWUFEHZpcnRHZXRNaW5BbW91bnQEAmxwCAUNJHQwMTQ4OTExNTA4MwJfMQQEbG9zcwgFDSR0MDE0ODkxMTUwODMCXzIEC25ld0JhbGFuY2VBCAUNJHQwMTQ4OTExNTA4MwJfMwQLbmV3QmFsYW5jZUIIBQ0kdDAxNDg5MTE1MDgzAl80BBBnb3Zlcm5hbmNlUmV3YXJkCAUNJHQwMTQ4OTExNTA4MwJfNQQHdFJld2FyZAgFDSR0MDE0ODkxMTUwODMCXzYEA2FJZAgFDSR0MDE0ODkxMTUwODMCXzcJAJQKAgUDbmlsCQCUCgIFA25pbAkAzAgCBQJscAkAzAgCBQRsb3NzCQDMCAIFC25ld0JhbGFuY2VBCQDMCAIFC25ld0JhbGFuY2VCCQDMCAIFEGdvdmVybmFuY2VSZXdhcmQJAMwIAgUHdFJld2FyZAkAzAgCBQNhSWQFA25pbAFpARB3aXRoZHJhd1JFQURPTkxZBAtjYWxsZXJCeXRlcwRhcmdzCHBBbW91bnRzCXBBc3NldElkcwQNJHQwMTUzMTAxNTQwMAkBDWdldFBvb2xBc3NldHMBCAUBaQZjYWxsZXIEC3N0ckFzc2V0SWRBCAUNJHQwMTUzMTAxNTQwMAJfMQQLc3RyQXNzZXRJZEIIBQ0kdDAxNTMxMDE1NDAwAl8yBAhhc3NldElkQQgFDSR0MDE1MzEwMTU0MDACXzMECGFzc2V0SWRCCAUNJHQwMTUzMTAxNTQwMAJfNAQMc2hhcmVBc3NldElkCAUNJHQwMTUzMTAxNTQwMAJfNQQNJHQwMTU0MDUxNTUyOQkBD2dldFBvb2xCYWxhbmNlcwMIBQFpBmNhbGxlcgUIYXNzZXRJZEEFCGFzc2V0SWRCBAhiYWxhbmNlQQgFDSR0MDE1NDA1MTU1MjkCXzEECGJhbGFuY2VCCAUNJHQwMTU0MDUxNTUyOQJfMgQPYWNjb3VudEJhbGFuY2VBCAUNJHQwMTU0MDUxNTUyOQJfMwQPYWNjb3VudEJhbGFuY2VCCAUNJHQwMTU0MDUxNTUyOQJfNAQQc2hhcmVBc3NldFN1cHBseQgFDSR0MDE1NDA1MTU1MjkCXzUEDndpdGhkcmF3QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwAABA0kdDAxNTU4MzE1NzQ1AwkAAAIJAJADAQUEYXJncwADCQCUCgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRhcmdzAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRhcmdzAAIJAJQKAgUIYmFsYW5jZUEFCGJhbGFuY2VCBARiYWxBCAUNJHQwMTU1ODMxNTc0NQJfMQQEYmFsQggFDSR0MDE1NTgzMTU3NDUCXzIEDGFtb3VudFRvUGF5QQkAawMFDndpdGhkcmF3QW1vdW50BQRiYWxBBRBzaGFyZUFzc2V0U3VwcGx5BAxhbW91bnRUb1BheUIJAGsDBQ53aXRoZHJhd0Ftb3VudAUEYmFsQgUQc2hhcmVBc3NldFN1cHBseQkAlAoCBQNuaWwJAJQKAgUDbmlsCQDMCAIFDGFtb3VudFRvUGF5QQkAzAgCBQxhbW91bnRUb1BheUIFA25pbAFpAQRpbml0BAtjYWxsZXJCeXRlcwRhcmdzCHBBbW91bnRzCXBBc3NldElkcwQGY2FsbGVyCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBA0kdDAxNjEwMDE2MTc4CQCUCgIJAJEDAgUIcEFtb3VudHMAAAkBEXBhcnNlUGF5bWVudEFzc2V0AQkAkQMCBQlwQXNzZXRJZHMAAAQKcG10QW1vdW50QQgFDSR0MDE2MTAwMTYxNzgCXzEEC3BtdEFzc2V0SWRBCAUNJHQwMTYxMDAxNjE3OAJfMgQNJHQwMTYxODMxNjI2MQkAlAoCCQCRAwIFCHBBbW91bnRzAAEJARFwYXJzZVBheW1lbnRBc3NldAEJAJEDAgUJcEFzc2V0SWRzAAEECnBtdEFtb3VudEIIBQ0kdDAxNjE4MzE2MjYxAl8xBAtwbXRBc3NldElkQggFDSR0MDE2MTgzMTYyNjECXzIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzCQDMCAIFEWFkbWluSW52b2tlUHViS2V5BQNuaWwIBQFpFW9yaWdpbkNhbGxlclB1YmxpY0tleQkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQIhPQIJAJADAQUEYXJncwABCQACAQIPV3JvbmcgYXJncyBzaXplAwkBCWlzRGVmaW5lZAEJAJsIAgUGY2FsbGVyBQdrQWN0aXZlCQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAAACBQtwbXRBc3NldElkQQULcG10QXNzZXRJZEIJAAIBAhhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEDSR0MDE2Njk2MTY3NzMJAQxnZXRBc3NldEluZm8BBQtwbXRBc3NldElkQQQOcG10U3RyQXNzZXRJZEEIBQ0kdDAxNjY5NjE2NzczAl8xBA1wbXRBc3NldE5hbWVBCAUNJHQwMTY2OTYxNjc3MwJfMgQMcG10RGVjaW1hbHNBCAUNJHQwMTY2OTYxNjc3MwJfMwQNJHQwMTY3ODIxNjg1OQkBDGdldEFzc2V0SW5mbwEFC3BtdEFzc2V0SWRCBA5wbXRTdHJBc3NldElkQggFDSR0MDE2NzgyMTY4NTkCXzEEDXBtdEFzc2V0TmFtZUIIBQ0kdDAxNjc4MjE2ODU5Al8yBAxwbXREZWNpbWFsc0IIBQ0kdDAxNjc4MjE2ODU5Al8zBAxmaXJzdEhhcnZlc3QJAAACCQCRAwIFBGFyZ3MAAAIEdHJ1ZQQJc2hhcmVOYW1lCQCsAgIJAKwCAgkArAICAgFzCQCvAgIFDXBtdEFzc2V0TmFtZUEABwIBXwkArwICBQ1wbXRBc3NldE5hbWVCAAcEEHNoYXJlRGVzY3JpcHRpb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiJTaGFyZVRva2VuIG9mIFN3b3BGaSBwcm90b2NvbCBmb3IgBQ1wbXRBc3NldE5hbWVBAgUgYW5kIAUNcG10QXNzZXROYW1lQgIMIGF0IGFkZHJlc3MgCQClCAEFBHRoaXMEDXNoYXJlRGVjaW1hbHMJAGkCCQBkAgUMcG10RGVjaW1hbHNBBQxwbXREZWNpbWFsc0IAAgQEYXJnMQkAbAYFCnBtdEFtb3VudEEFDHBtdERlY2ltYWxzQQAFAAEFDHBtdERlY2ltYWxzQQUERE9XTgQEYXJnMgkAbAYFCnBtdEFtb3VudEIFDHBtdERlY2ltYWxzQgAFAAEFDHBtdERlY2ltYWxzQgUERE9XTgQEYXJnMwkAbAYACgAABQ1zaGFyZURlY2ltYWxzAAAAAAUERE9XTgQSc2hhcmVJbml0aWFsU3VwcGx5CQBrAwUEYXJnMQUEYXJnMgUEYXJnMwQKc2hhcmVJc3N1ZQkAwggFBQlzaGFyZU5hbWUFEHNoYXJlRGVzY3JpcHRpb24FEnNoYXJlSW5pdGlhbFN1cHBseQUNc2hhcmVEZWNpbWFscwYEDHNoYXJlSXNzdWVJZAkAuAgBBQpzaGFyZUlzc3VlBAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQQkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQpwbXRBbW91bnRBCQDMCAIFDnBtdFN0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQ5wbXRTdHJBc3NldElkQgkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQpwbXRBbW91bnRCCQDMCAIFDnBtdFN0ckFzc2V0SWRCBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyBAliYXNlRW50cnkJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa1ZlcnNpb24FB3ZlcnNpb24JAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBc3NldElkQQUOcG10U3RyQXNzZXRJZEEJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0Fzc2V0SWRCBQ5wbXRTdHJBc3NldElkQgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBBQpwbXRBbW91bnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIFCnBtdEFtb3VudEIJAMwIAgkBDEludGVnZXJFbnRyeQIFBGtGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBm9yYWNsZQINYmFzZV9mZWVfY3BtbQkAzAgCBQpzaGFyZUlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtTaGFyZUFzc2V0SWQJANgEAQUMc2hhcmVJc3N1ZUlkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQUSc2hhcmVJbml0aWFsU3VwcGx5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUSc2hhcmVJbml0aWFsU3VwcGx5BQxzaGFyZUlzc3VlSWQFA25pbAMFDGZpcnN0SGFydmVzdAkAlAoCBQNuaWwJAJQKAgkAzggCBQliYXNlRW50cnkJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtGaXJzdEhhcnZlc3QFDGZpcnN0SGFydmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa0ZpcnN0SGFydmVzdEhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0CQBoAgUVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQxwZXJpb2RMZW5ndGgFA25pbAUDbmlsCQCUCgIFA25pbAkAlAoCBQliYXNlRW50cnkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFpbml0V2l0aEluaXRSYXRpbwQLY2FsbGVyQnl0ZXMEYXJncwhwQW1vdW50cwlwQXNzZXRJZHMEBmNhbGxlcgkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwQNJHQwMTkwODAxOTI4MAkAlwoFCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwABCQCRAwIFBGFyZ3MAAgkAkQMCBQRhcmdzAAMJAAACCQCRAwIFBGFyZ3MABAIEdHJ1ZQQJYW10QXNzZXRBCAUNJHQwMTkwODAxOTI4MAJfMQQJYW10QXNzZXRCCAUNJHQwMTkwODAxOTI4MAJfMgQLYXNzZXRJZEFTdHIIBQ0kdDAxOTA4MDE5MjgwAl8zBAthc3NldElkQlN0cggFDSR0MDE5MDgwMTkyODACXzQEDGZpcnN0SGFydmVzdAgFDSR0MDE5MDgwMTkyODACXzUDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzCQDMCAIFEWFkbWluSW52b2tlUHViS2V5BQNuaWwIBQFpFW9yaWdpbkNhbGxlclB1YmxpY0tleQkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQIhPQIJAJADAQUEYXJncwAFCQACAQIPV3JvbmcgYXJncyBzaXplAwkBCWlzRGVmaW5lZAEJAJsIAgUGY2FsbGVyBQdrQWN0aXZlCQACAQIWREFwcCBpcyBhbHJlYWR5IGFjdGl2ZQMJAAACBQthc3NldElkQVN0cgULYXNzZXRJZEJTdHIJAAIBAhhBc3NldHMgbXVzdCBiZSBkaWZmZXJlbnQEDSR0MDE5NzE1MTk3OTIJAQxnZXRBc3NldEluZm8BBQthc3NldElkQVN0cgQOcG10U3RyQXNzZXRJZEEIBQ0kdDAxOTcxNTE5NzkyAl8xBA1wbXRBc3NldE5hbWVBCAUNJHQwMTk3MTUxOTc5MgJfMgQMcG10RGVjaW1hbHNBCAUNJHQwMTk3MTUxOTc5MgJfMwQNJHQwMTk4MDExOTg3OAkBDGdldEFzc2V0SW5mbwEFC2Fzc2V0SWRCU3RyBA5wbXRTdHJBc3NldElkQggFDSR0MDE5ODAxMTk4NzgCXzEEDXBtdEFzc2V0TmFtZUIIBQ0kdDAxOTgwMTE5ODc4Al8yBAxwbXREZWNpbWFsc0IIBQ0kdDAxOTgwMTE5ODc4Al8zBAlzaGFyZU5hbWUJAKwCAgkArAICCQCsAgICAXMJAK8CAgUNcG10QXNzZXROYW1lQQAHAgFfCQCvAgIFDXBtdEFzc2V0TmFtZUIABwQQc2hhcmVEZXNjcmlwdGlvbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIlNoYXJlVG9rZW4gb2YgU3dvcEZpIHByb3RvY29sIGZvciAFDXBtdEFzc2V0TmFtZUECBSBhbmQgBQ1wbXRBc3NldE5hbWVCAgwgYXQgYWRkcmVzcyAJAKUIAQUEdGhpcwQNc2hhcmVEZWNpbWFscwkAaQIJAGQCBQxwbXREZWNpbWFsc0EFDHBtdERlY2ltYWxzQgACBBJzaGFyZUluaXRpYWxTdXBwbHkAAAQKc2hhcmVJc3N1ZQkAwggFBQlzaGFyZU5hbWUFEHNoYXJlRGVzY3JpcHRpb24FEnNoYXJlSW5pdGlhbFN1cHBseQUNc2hhcmVEZWNpbWFscwYEDHNoYXJlSXNzdWVJZAkAuAgBBQpzaGFyZUlzc3VlBAliYXNlRW50cnkJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa1ZlcnNpb24FB3ZlcnNpb24JAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWtBc3NldElkQQUOcG10U3RyQXNzZXRJZEEJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa0Fzc2V0SWRCBQ5wbXRTdHJBc3NldElkQgkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa0JhbGFuY2VJbml0QQUJYW10QXNzZXRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rQmFsYW5jZUluaXRCBQlhbXRBc3NldEIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9jcG1tCQDMCAIFCnNoYXJlSXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgUNa1NoYXJlQXNzZXRJZAkA2AQBBQxzaGFyZUlzc3VlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5BRJzaGFyZUluaXRpYWxTdXBwbHkFA25pbAMFDGZpcnN0SGFydmVzdAkAlAoCBQNuaWwJAJQKAgkAzggCBQliYXNlRW50cnkJAMwIAgkBDEJvb2xlYW5FbnRyeQIFDWtGaXJzdEhhcnZlc3QFDGZpcnN0SGFydmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa0ZpcnN0SGFydmVzdEhlaWdodAkAZAIFC3N0YXJ0SGVpZ2h0CQBoAgUVZmlyc3RIYXJ2ZXN0RW5kUGVyaW9kBQxwZXJpb2RMZW5ndGgFA25pbAUDbmlsCQCUCgIFA25pbAkAlAoCBQliYXNlRW50cnkFA25pbAFpARhrZWVwTGltaXRGb3JGaXJzdEhhcnZlc3QEC2NhbGxlckJ5dGVzBGFyZ3MIcEFtb3VudHMJcEFzc2V0SWRzCQELdmFsdWVPckVsc2UCCQEMaXNPcmFjbGVQb29sAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzCQDMCAIFEWFkbWluSW52b2tlUHViS2V5BQNuaWwIBQFpFW9yaWdpbkNhbGxlclB1YmxpY0tleQkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgMJAQIhPQIJAJADAQUEYXJncwABCQACAQIPV3JvbmcgYXJncyBzaXplBApzaGFyZUxpbWl0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwAACQCUCgIFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtrU2hhcmVMaW1pdAUKc2hhcmVMaW1pdAUDbmlsBQNuaWwBaQEIZXhjaGFuZ2UEC2NhbGxlckJ5dGVzBGFyZ3MIcEFtb3VudHMJcEFzc2V0SWRzCQELdmFsdWVPckVsc2UCCQEMaXNPcmFjbGVQb29sAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQBCQClCAEIBQFpBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQGY2FsbGVyCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBA0kdDAyMjMwNDIyMzgwCQCUCgIJAJEDAgUIcEFtb3VudHMAAAkBEXBhcnNlUGF5bWVudEFzc2V0AQkAkQMCBQlwQXNzZXRJZHMAAAQJcG10QW1vdW50CAUNJHQwMjIzMDQyMjM4MAJfMQQKcG10QXNzZXRJZAgFDSR0MDIyMzA0MjIzODACXzIEEm1pbkFtb3VudFRvUmVjZWl2ZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAAQNJHQwMjI0NDUyMjUyMQkBDWdldFBvb2xBc3NldHMBCAUBaQZjYWxsZXIEC3N0ckFzc2V0SWRBCAUNJHQwMjI0NDUyMjUyMQJfMQQLc3RyQXNzZXRJZEIIBQ0kdDAyMjQ0NTIyNTIxAl8yBAhhc3NldElkQQgFDSR0MDIyNDQ1MjI1MjECXzMECGFzc2V0SWRCCAUNJHQwMjI0NDUyMjUyMQJfNAQNJHQwMjI1MzAyMjYzNgkBD2dldFBvb2xCYWxhbmNlcwMIBQFpBmNhbGxlcgUIYXNzZXRJZEEFCGFzc2V0SWRCBAhiYWxhbmNlQQgFDSR0MDIyNTMwMjI2MzYCXzEECGJhbGFuY2VCCAUNJHQwMjI1MzAyMjYzNgJfMgQPYWNjb3VudEJhbGFuY2VBCAUNJHQwMjI1MzAyMjYzNgJfMwQPYWNjb3VudEJhbGFuY2VCCAUNJHQwMjI1MzAyMjYzNgJfNAMJAQIhPQIJAJADAQUEYXJncwABCQACAQIPV3JvbmcgYXJncyBzaXplAwMJAAACBQhiYWxhbmNlQQAABgkAAAIFCGJhbGFuY2VCAAAJAAIBAiBDYW4ndCBleGNoYW5nZSB3aXRoIHplcm8gYmFsYW5jZQMJAGcCAAAFEm1pbkFtb3VudFRvUmVjZWl2ZQkAAgEJAKwCAgI0TWluaW1hbCBhbW91bnQgdG8gcmVjZWl2ZSBtdXN0IGJlIHBvc2l0aXZlLiBBY3R1YWw6IAkApAMBBRJtaW5BbW91bnRUb1JlY2VpdmUDCQECIT0CCQCQAwEFCHBBbW91bnRzAAEJAAIBAh1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUIYXNzZXRJZEEJAMwIAgUIYXNzZXRJZEIFA25pbAUKcG10QXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAULc3RyQXNzZXRJZEECBCBvciAFC3N0ckFzc2V0SWRCAwMJAGYCBQhiYWxhbmNlQQUPYWNjb3VudEJhbGFuY2VBBgkAZgIFCGJhbGFuY2VCBQ9hY2NvdW50QmFsYW5jZUIJAJQKAgUDbmlsCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzBgUPYWNjb3VudEJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUIFCGJhbGFuY2VBBQhiYWxhbmNlQgULc3RyQXNzZXRJZEEFC3N0ckFzc2V0SWRCBA0kdDAyMzUzNjIzNjAzCQEMZ2V0RmVlUGFyYW1zAggFAWkGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIEA2ZlZQgFDSR0MDIzNTM2MjM2MDMCXzEEBmdvdkZlZQgFDSR0MDIzNTM2MjM2MDMCXzIEB3RlYW1GZWUIBQ0kdDAyMzUzNjIzNjAzAl8zBA0kdDAyMzYxNjIzOTY3AwkAAAIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQENY2FsY3VsYXRlRmVlcwcFCXBtdEFtb3VudAUSbWluQW1vdW50VG9SZWNlaXZlBQhiYWxhbmNlQQUIYmFsYW5jZUIFA2ZlZQUGZ292RmVlBQd0ZWFtRmVlCQENY2FsY3VsYXRlRmVlcwcFCXBtdEFtb3VudAUSbWluQW1vdW50VG9SZWNlaXZlBQhiYWxhbmNlQgUIYmFsYW5jZUEFA2ZlZQUGZ292RmVlBQd0ZWFtRmVlBBBhbW91bnRXaXRob3V0RmVlCAUNJHQwMjM2MTYyMzk2NwJfMQQNYW1vdW50V2l0aEZlZQgFDSR0MDIzNjE2MjM5NjcCXzIEEGdvdmVybmFuY2VSZXdhcmQIBQ0kdDAyMzYxNjIzOTY3Al8zBAp0ZWFtUmV3YXJkCAUNJHQwMjM2MTYyMzk2NwJfNAQNJHQwMjM5ODEyNDMxNgMJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAlQoDCQBkAgUIYmFsYW5jZUEFCXBtdEFtb3VudAkAZQIJAGUCCQBlAgUIYmFsYW5jZUIFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQFCGFzc2V0SWRCCQCVCgMJAGUCCQBlAgkAZQIFCGJhbGFuY2VBBQ1hbW91bnRXaXRoRmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQp0ZWFtUmV3YXJkCQBkAgUIYmFsYW5jZUIFCXBtdEFtb3VudAUIYXNzZXRJZEEEC25ld0JhbGFuY2VBCAUNJHQwMjM5ODEyNDMxNgJfMQQLbmV3QmFsYW5jZUIIBQ0kdDAyMzk4MTI0MzE2Al8yBAthc3NldElkU2VuZAgFDSR0MDIzOTgxMjQzMTYCXzMEDSR0MDI0MzMwMjQ1OTADCQAAAgUKcG10QXNzZXRJZAUIYXNzZXRJZEEJAJQKAgUJcG10QW1vdW50CQBkAgkAZAIFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQJAJQKAgkAZAIJAGQCBQ1hbW91bnRXaXRoRmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQp0ZWFtUmV3YXJkBQlwbXRBbW91bnQEDHN0YWtlQW1vdW50QQgFDSR0MDI0MzMwMjQ1OTACXzEEDHN0YWtlQW1vdW50QggFDSR0MDI0MzMwMjQ1OTACXzIEBnN0YWtlMQMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRBCQD8BwQIBQFpBmNhbGxlcgIMc3Rha2VVbnN0YWtlCQDMCAIJAAACBQpwbXRBc3NldElkBQhhc3NldElkQQkAzAgCBQxzdGFrZUFtb3VudEEJAMwIAgULc3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRCCQD8BwQIBQFpBmNhbGxlcgIMc3Rha2VVbnN0YWtlCQDMCAIJAAACBQpwbXRBc3NldElkBQhhc3NldElkQgkAzAgCBQxzdGFrZUFtb3VudEIJAMwIAgULc3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UyBQZzdGFrZTIJAJQKAgUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQULbmV3QmFsYW5jZUEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgULbmV3QmFsYW5jZUIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQ1hbW91bnRXaXRoRmVlBQthc3NldElkU2VuZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ9tb25leUJveEFkZHJlc3MFEGdvdmVybmFuY2VSZXdhcmQFC2Fzc2V0SWRTZW5kCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnRlYW1Cb3hBZGRyZXNzBQp0ZWFtUmV3YXJkBQthc3NldElkU2VuZAUDbmlsCQDMCAIFDWFtb3VudFdpdGhGZWUJAMwIAgULYXNzZXRJZFNlbmQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARZyZXBsZW5pc2hXaXRoVHdvVG9rZW5zBAtjYWxsZXJCeXRlcwRhcmdzCHBBbW91bnRzCXBBc3NldElkcwkBC3ZhbHVlT3JFbHNlAgkBDGlzT3JhY2xlUG9vbAEJAKUIAQgFAWkGY2FsbGVyCQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBmNhbGxlcgkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwQLcG10QXNzZXRJZEEJARFwYXJzZVBheW1lbnRBc3NldAEJAJEDAgUJcEFzc2V0SWRzAAAEC3BtdEFzc2V0SWRCCQERcGFyc2VQYXltZW50QXNzZXQBCQCRAwIFCXBBc3NldElkcwABBAxzdGFrZUZhcm1pbmcJAAACCQCRAwIFBGFyZ3MAAAIEdHJ1ZQQIbG9ja1R5cGUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRhcmdzAAEEDSR0MDI1OTA1MjU5OTUJAQ1nZXRQb29sQXNzZXRzAQgFAWkGY2FsbGVyBAtzdHJBc3NldElkQQgFDSR0MDI1OTA1MjU5OTUCXzEEC3N0ckFzc2V0SWRCCAUNJHQwMjU5MDUyNTk5NQJfMgQIYXNzZXRJZEEIBQ0kdDAyNTkwNTI1OTk1Al8zBAhhc3NldElkQggFDSR0MDI1OTA1MjU5OTUCXzQEDHNoYXJlQXNzZXRJZAgFDSR0MDI1OTA1MjU5OTUCXzUEDSR0MDI2MDA0MjYxMjgJAQ9nZXRQb29sQmFsYW5jZXMDCAUBaQZjYWxsZXIFCGFzc2V0SWRBBQhhc3NldElkQgQIYmFsYW5jZUEIBQ0kdDAyNjAwNDI2MTI4Al8xBAhiYWxhbmNlQggFDSR0MDI2MDA0MjYxMjgCXzIED2FjY291bnRCYWxhbmNlQQgFDSR0MDI2MDA0MjYxMjgCXzMED2FjY291bnRCYWxhbmNlQggFDSR0MDI2MDA0MjYxMjgCXzQEEHNoYXJlQXNzZXRTdXBwbHkIBQ0kdDAyNjAwNDI2MTI4Al81AwkBAiE9AgkAkAMBBQRhcmdzAAIJAAIBAg9Xcm9uZyBhcmdzIHNpemUDAwkBAiE9AgkAkAMBBQhwQW1vdW50cwACCQECIT0CCQCQAwEFCHBBbW91bnRzAAMHCQACAQIeVHdvIG9yIHRocmVlIHBheW1lbnRzIGV4cGVjdGVkAwMJAQIhPQIFC3BtdEFzc2V0SWRBBQhhc3NldElkQQYJAQIhPQIFC3BtdEFzc2V0SWRCBQhhc3NldElkQgkAAgEJAKwCAgkArAICCQCsAgICJUluY29ycmVjdCBhc3NldHMgYXR0YWNoZWQuIEV4cGVjdGVkOiAFC3N0ckFzc2V0SWRBAgUgYW5kIAULc3RyQXNzZXRJZEIDAwkAZgIFCGJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUEGCQBmAgUIYmFsYW5jZUIFD2FjY291bnRCYWxhbmNlQgkAlAoCBQNuaWwJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAJEDAgUIcEFtb3VudHMAAAULcG10QXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyCQCRAwIFCHBBbW91bnRzAAEFC3BtdEFzc2V0SWRCBQNuaWwDCQAAAgkAkAMBBQhwQW1vdW50cwADCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIJAJEDAgUJcEFzc2V0SWRzAAIBAAUEdW5pdAkAkQMCBQlwQXNzZXRJZHMAAgkAkQMCBQhwQW1vdW50cwACBQNuaWwJAM4IAgUDbmlsCQERc3VzcGVuZFN1c3BpY2lvdXMGBQ9hY2NvdW50QmFsYW5jZUEFD2FjY291bnRCYWxhbmNlQgUIYmFsYW5jZUEFCGJhbGFuY2VCBQtzdHJBc3NldElkQQULc3RyQXNzZXRJZEIEDSR0MDI3MDY1MjcyNjMJAR9jYWxjTFBBbW91bnRSZXBsZW5zaXNoVHdvVG9rZW5zBwkAkQMCBQhwQW1vdW50cwAACQCRAwIFCHBBbW91bnRzAAEFC3BtdEFzc2V0SWRBBQtwbXRBc3NldElkQgUIYmFsYW5jZUEFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BBVzaGFyZVRva2VuVG9QYXlBbW91bnQIBQ0kdDAyNzA2NTI3MjYzAl8xBAZjaGFuZ2UIBQ0kdDAyNzA2NTI3MjYzAl8yBA1jaGFuZ2VBc3NldElkCAUNJHQwMjcwNjUyNzI2MwJfMwQKcG10QW1vdW50QQgFDSR0MDI3MDY1MjcyNjMCXzQECnBtdEFtb3VudEIIBQ0kdDAyNzA2NTI3MjYzAl81AwkAAAIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAAACQACAQIdVG9vIHNtYWxsIGFtb3VudCB0byByZXBsZW5pc2gDCQBmAgAABQZjaGFuZ2UJAAIBAgpDaGFuZ2UgPCAwBAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQQkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQpwbXRBbW91bnRBCQDMCAIFC3N0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMQUGc3Rha2UxBAZzdGFrZTIDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQgkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQpwbXRBbW91bnRCCQDMCAIFC3N0ckFzc2V0SWRCBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyBAxzaGFyZVRva2VuU1QDBQxzdGFrZUZhcm1pbmcECnN0UGF5bWVudHMJAM4IAgkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFA25pbAMJAAACCQCQAwEFCHBBbW91bnRzAAMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIDCQAAAgkAkQMCBQlwQXNzZXRJZHMAAgEABQR1bml0CQCRAwIFCXBBc3NldElkcwACCQCRAwIFCHBBbW91bnRzAAIFA25pbAUDbmlsBAdyZWlzc3VlCQD8BwQIBQFpBmNhbGxlcgIRcmVpc3N1ZVNoYXJlVG9rZW4JAMwIAgUVc2hhcmVUb2tlblRvUGF5QW1vdW50BQNuaWwFA25pbAMJAAACBQdyZWlzc3VlBQdyZWlzc3VlBAZzdGFrZTMJAPwHBAUOZmFybWluZ0FkZHJlc3MCF2xvY2tTaGFyZVRva2Vuc0Zyb21Qb29sCQDMCAIFC2NhbGxlckJ5dGVzCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFCGxvY2tUeXBlBQNuaWwFCnN0UGF5bWVudHMDCQAAAgUGc3Rha2UzBQZzdGFrZTMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUMc2hhcmVBc3NldElkBQNuaWwJAJQKAgUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBCQBkAgUIYmFsYW5jZUEFCnBtdEFtb3VudEEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgkAZAIFCGJhbGFuY2VCBQpwbXRBbW91bnRCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFEHNoYXJlQXNzZXRTdXBwbHkFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFBmNoYW5nZQUNY2hhbmdlQXNzZXRJZAUDbmlsBQxzaGFyZVRva2VuU1QFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARVyZXBsZW5pc2hXaXRoT25lVG9rZW4EC2NhbGxlckJ5dGVzBGFyZ3MIcEFtb3VudHMJcEFzc2V0SWRzCQELdmFsdWVPckVsc2UCCQEMaXNPcmFjbGVQb29sAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQxpc0RlcHJpY2F0ZWQBCQClCAEIBQFpBmNhbGxlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQGY2FsbGVyCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBApwbXRBc3NldElkCQERcGFyc2VQYXltZW50QXNzZXQBCQCRAwIFCXBBc3NldElkcwAABAlwbXRBbW91bnQJAJEDAgUIcEFtb3VudHMAAAQQdmlydEdldE1pbkFtb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGFyZ3MAAAQMc3Rha2VGYXJtaW5nCQAAAgkAkQMCBQRhcmdzAAECBHRydWUECGxvY2tUeXBlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwACBA0kdDAyOTUyMjI5NjEyCQENZ2V0UG9vbEFzc2V0cwEIBQFpBmNhbGxlcgQLc3RyQXNzZXRJZEEIBQ0kdDAyOTUyMjI5NjEyAl8xBAtzdHJBc3NldElkQggFDSR0MDI5NTIyMjk2MTICXzIECGFzc2V0SWRBCAUNJHQwMjk1MjIyOTYxMgJfMwQIYXNzZXRJZEIIBQ0kdDAyOTUyMjI5NjEyAl80BAxzaGFyZUFzc2V0SWQIBQ0kdDAyOTUyMjI5NjEyAl81BA0kdDAyOTYxNzI5NzQxCQEPZ2V0UG9vbEJhbGFuY2VzAwgFAWkGY2FsbGVyBQhhc3NldElkQQUIYXNzZXRJZEIECGJhbGFuY2VBCAUNJHQwMjk2MTcyOTc0MQJfMQQIYmFsYW5jZUIIBQ0kdDAyOTYxNzI5NzQxAl8yBA9hY2NvdW50QmFsYW5jZUEIBQ0kdDAyOTYxNzI5NzQxAl8zBA9hY2NvdW50QmFsYW5jZUIIBQ0kdDAyOTYxNzI5NzQxAl80BBBzaGFyZUFzc2V0U3VwcGx5CAUNJHQwMjk2MTcyOTc0MQJfNQQHaW5pdGlhbAkAAAIJAGQCBQhiYWxhbmNlQQUIYmFsYW5jZUIAAAMJAQIhPQIJAJADAQUEYXJncwADCQACAQIPV3JvbmcgYXJncyBzaXplAwMJAQIhPQIJAJADAQUIcEFtb3VudHMAAQkBAiE9AgkAkAMBBQhwQW1vdW50cwACBwkAAgECI1R3byBvciBvbmUgYXR0YWNoZWQgYXNzZXRzIGV4cGVjdGVkAwMJAQIhPQIFCnBtdEFzc2V0SWQFCGFzc2V0SWRBCQECIT0CBQpwbXRBc3NldElkBQhhc3NldElkQgcJAAIBCQCsAgIJAKwCAgkArAICAiRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAFC3N0ckFzc2V0SWRBAgQgb3IgBQtzdHJBc3NldElkQgMFB2luaXRpYWwJAAIBAjBGb3IgaW5pdGlhbCBleGNoYW5nZXIgeW91IG5lZWQgdG8gdXNlIHR3byB0b2tlbnMDAwkAZgIFCGJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUEGCQBmAgUIYmFsYW5jZUIFD2FjY291bnRCYWxhbmNlQgkAlAoCBQNuaWwJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUDbmlsAwkAAAIJAJADAQUIcEFtb3VudHMAAgkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgMJAAACCQCRAwIFCXBBc3NldElkcwACAQAFBHVuaXQJAJEDAgUJcEFzc2V0SWRzAAIJAJEDAgUIcEFtb3VudHMAAgUDbmlsCQDOCAIFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzBgUPYWNjb3VudEJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUIFCGJhbGFuY2VBBQhiYWxhbmNlQgULc3RyQXNzZXRJZEEFC3N0ckFzc2V0SWRCBA0kdDAzMDY1MzMwNzIwCQEMZ2V0RmVlUGFyYW1zAggFAWkGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIEA2ZlZQgFDSR0MDMwNjUzMzA3MjACXzEEBmdvdkZlZQgFDSR0MDMwNjUzMzA3MjACXzIEB3RlYW1GZWUIBQ0kdDAzMDY1MzMwNzIwAl8zBA0kdDAzMDcyOTMwNzkxCQEMZ2V0QXNzZXRJbmZvAQUKcG10QXNzZXRJZAQNcG10QXNzZXRJZFN0cggFDSR0MDMwNzI5MzA3OTECXzEEDnBtdEFzc2V0SWROYW1lCAUNJHQwMzA3MjkzMDc5MQJfMgQNJHQwMzA4MDkzMTA1NQkBHmNhbGNMUEFtb3VudFJlcGxhbnNpc2hPbmVUb2tlbgsFCXBtdEFtb3VudAUKcG10QXNzZXRJZAUIYXNzZXRJZEEFCGFzc2V0SWRCBQhiYWxhbmNlQQUIYmFsYW5jZUIFEHNoYXJlQXNzZXRTdXBwbHkFA2ZlZQUGZ292RmVlBQd0ZWFtRmVlBRB2aXJ0R2V0TWluQW1vdW50BBVzaGFyZVRva2VuVG9QYXlBbW91bnQIBQ0kdDAzMDgwOTMxMDU1Al8xBAtuZXdCYWxhbmNlQQgFDSR0MDMwODA5MzEwNTUCXzIEC25ld0JhbGFuY2VCCAUNJHQwMzA4MDkzMTA1NQJfMwQJZ292UmV3YXJkCAUNJHQwMzA4MDkzMTA1NQJfNAQKdGVhbVJld2FyZAgFDSR0MDMwODA5MzEwNTUCXzUEDmdvdlJld2FyZEFzc2V0CAUNJHQwMzA4MDkzMTA1NQJfNgQRZ292UmV3YXJkQXNzZXRTdHIDCQAAAgUOZ292UmV3YXJkQXNzZXQFCGFzc2V0SWRBBQtzdHJBc3NldElkQQULc3RyQXNzZXRJZEIDCQAAAgUVc2hhcmVUb2tlblRvUGF5QW1vdW50AAAJAAIBAh1Ub28gc21hbGwgYW1vdW50IHRvIHJlcGxlbmlzaAQGc3Rha2UxAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwUNcG10QXNzZXRJZFN0cgkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQlwbXRBbW91bnQJAMwIAgUNcG10QXNzZXRJZFN0cgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwURZ292UmV3YXJkQXNzZXRTdHIJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgkAZAIFCWdvdlJld2FyZAUKdGVhbVJld2FyZAkAzAgCBRFnb3ZSZXdhcmRBc3NldFN0cgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgQMc2hhcmVUb2tlblNUAwUMc3Rha2VGYXJtaW5nBApzdFBheW1lbnRzCQDOCAIJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUVc2hhcmVUb2tlblRvUGF5QW1vdW50BQNuaWwDCQAAAgkAkAMBBQhwQW1vdW50cwACCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCAwkAAAIJAJEDAgUJcEFzc2V0SWRzAAEBAAUEdW5pdAkAkQMCBQlwQXNzZXRJZHMAAQkAkQMCBQhwQW1vdW50cwABBQNuaWwFA25pbAQHcmVpc3N1ZQkA/AcECAUBaQZjYWxsZXICEXJlaXNzdWVTaGFyZVRva2VuCQDMCAIFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAUDbmlsBQNuaWwDCQAAAgUHcmVpc3N1ZQUHcmVpc3N1ZQQGc3Rha2UzCQD8BwQFDmZhcm1pbmdBZGRyZXNzAhdsb2NrU2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCBQtjYWxsZXJCeXRlcwkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQhsb2NrVHlwZQUDbmlsBQpzdFBheW1lbnRzAwkAAAIFBnN0YWtlMwUGc3Rha2UzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBB1JlaXNzdWUDBQxzaGFyZUFzc2V0SWQFFXNoYXJlVG9rZW5Ub1BheUFtb3VudAYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBRVzaGFyZVRva2VuVG9QYXlBbW91bnQFDHNoYXJlQXNzZXRJZAUDbmlsCQCUCgIFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQQULbmV3QmFsYW5jZUEJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtCYWxhbmNlQgULbmV3QmFsYW5jZUIJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtTaGFyZUFzc2V0U3VwcGx5CQBkAgUQc2hhcmVBc3NldFN1cHBseQUVc2hhcmVUb2tlblRvUGF5QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUJZ292UmV3YXJkBQ5nb3ZSZXdhcmRBc3NldAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ50ZWFtQm94QWRkcmVzcwUKdGVhbVJld2FyZAUOZ292UmV3YXJkQXNzZXQFA25pbAUMc2hhcmVUb2tlblNUBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEId2l0aGRyYXcEC2NhbGxlckJ5dGVzBGFyZ3MIcEFtb3VudHMJcEFzc2V0SWRzCQELdmFsdWVPckVsc2UCCQEMaXNPcmFjbGVQb29sAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBmNhbGxlcgkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwQNJHQwMzMxMjMzMzIxMwkBDWdldFBvb2xBc3NldHMBCAUBaQZjYWxsZXIEC3N0ckFzc2V0SWRBCAUNJHQwMzMxMjMzMzIxMwJfMQQLc3RyQXNzZXRJZEIIBQ0kdDAzMzEyMzMzMjEzAl8yBAhhc3NldElkQQgFDSR0MDMzMTIzMzMyMTMCXzMECGFzc2V0SWRCCAUNJHQwMzMxMjMzMzIxMwJfNAQMc2hhcmVBc3NldElkCAUNJHQwMzMxMjMzMzIxMwJfNQQNJHQwMzMyMjIzMzM0NgkBD2dldFBvb2xCYWxhbmNlcwMIBQFpBmNhbGxlcgUIYXNzZXRJZEEFCGFzc2V0SWRCBAhiYWxhbmNlQQgFDSR0MDMzMjIyMzMzNDYCXzEECGJhbGFuY2VCCAUNJHQwMzMyMjIzMzM0NgJfMgQPYWNjb3VudEJhbGFuY2VBCAUNJHQwMzMyMjIzMzM0NgJfMwQPYWNjb3VudEJhbGFuY2VCCAUNJHQwMzMyMjIzMzM0NgJfNAQQc2hhcmVBc3NldFN1cHBseQgFDSR0MDMzMjIyMzMzNDYCXzUEDSR0MDMzMzU1MzM3MzUDCQAAAgkAkAMBBQhwQW1vdW50cwABBAZwQXNzZXQJARFwYXJzZVBheW1lbnRBc3NldAEJAJEDAgUJcEFzc2V0SWRzAAADCQECIT0CBQZwQXNzZXQFDHNoYXJlQXNzZXRJZAkAAgEJAKwCAgIkSW5jb3JyZWN0IGFzc2V0IGF0dGFjaGVkLiBFeHBlY3RlZDogCQDYBAEFDHNoYXJlQXNzZXRJZAkAlAoCCQCRAwIFCHBBbW91bnRzAAAFBnBBc3NldAkAlAoCAAAFDHNoYXJlQXNzZXRJZAQJcG10QW1vdW50CAUNJHQwMzMzNTUzMzczNQJfMQQKcG10QXNzZXRJZAgFDSR0MDMzMzU1MzM3MzUCXzIDCQECIT0CCQCQAwEFBGFyZ3MAAQkAAgECD1dyb25nIGFyZ3Mgc2l6ZQMJAGYCCQCQAwEFCHBBbW91bnRzAAEJAAIBAh1PbmUgYXR0YWNoZWQgcGF5bWVudCBleHBlY3RlZAMDCQBmAgUIYmFsYW5jZUEFD2FjY291bnRCYWxhbmNlQQYJAGYCBQhiYWxhbmNlQgUPYWNjb3VudEJhbGFuY2VCCQCUCgIFA25pbAkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUJcG10QW1vdW50BQpwbXRBc3NldElkBQNuaWwJARFzdXNwZW5kU3VzcGljaW91cwYFD2FjY291bnRCYWxhbmNlQQUPYWNjb3VudEJhbGFuY2VCBQhiYWxhbmNlQQUIYmFsYW5jZUIFC3N0ckFzc2V0SWRBBQtzdHJBc3NldElkQgQMdW5sb2NrQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAQt2YWx1ZU9yRWxzZQIJAJEDAgUEYXJncwAAAgEwBAZ1bmxvY2sDCQBmAgUMdW5sb2NrQW1vdW50AAAJAPwHBAUOZmFybWluZ0FkZHJlc3MCG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAkAzAgCBQtjYWxsZXJCeXRlcwkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBQx1bmxvY2tBbW91bnQFA25pbAUDbmlsAAADCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEDGFtb3VudFRvUGF5QQkAawMFDndpdGhkcmF3QW1vdW50BQhiYWxhbmNlQQUQc2hhcmVBc3NldFN1cHBseQQMYW1vdW50VG9QYXlCCQBrAwUOd2l0aGRyYXdBbW91bnQFCGJhbGFuY2VCBRBzaGFyZUFzc2V0U3VwcGx5BAZzdGFrZTEDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQQkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBwkAzAgCBQxhbW91bnRUb1BheUEJAMwIAgULc3RyQXNzZXRJZEEFA25pbAUDbmlsAAADCQAAAgUGc3Rha2UxBQZzdGFrZTEEBnN0YWtlMgMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRCCQD8BwQIBQFpBmNhbGxlcgIMc3Rha2VVbnN0YWtlCQDMCAIHCQDMCAIFDGFtb3VudFRvUGF5QgkAzAgCBQtzdHJBc3NldElkQgUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTIFBnN0YWtlMgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMdW5sb2NrQW1vdW50BQxzaGFyZUFzc2V0SWQFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUIJAGUCBQhiYWxhbmNlQgUMYW1vdW50VG9QYXlCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFEHNoYXJlQXNzZXRTdXBwbHkFDndpdGhkcmF3QW1vdW50CQDMCAIJAQRCdXJuAgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIFDGFtb3VudFRvUGF5QQUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQxhbW91bnRUb1BheUIFCGFzc2V0SWRCBQNuaWwFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARB3aXRoZHJhd09uZVRva2VuBAtjYWxsZXJCeXRlcwRhcmdzCHBBbW91bnRzCXBBc3NldElkcwkBC3ZhbHVlT3JFbHNlAgkBDGlzT3JhY2xlUG9vbAEJAKUIAQgFAWkGY2FsbGVyCQELdmFsdWVPckVsc2UCCQEMaXNEZXByaWNhdGVkAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEBmNhbGxlcgkBB0FkZHJlc3MBBQtjYWxsZXJCeXRlcwQNd2l0aGRyYXdBc3NldAMJAAACCQCRAwIFBGFyZ3MAAAIABQR1bml0CQDZBAEJAJEDAgUEYXJncwAABA0kdDAzNTk1MzM2MDQzCQENZ2V0UG9vbEFzc2V0cwEIBQFpBmNhbGxlcgQLc3RyQXNzZXRJZEEIBQ0kdDAzNTk1MzM2MDQzAl8xBAtzdHJBc3NldElkQggFDSR0MDM1OTUzMzYwNDMCXzIECGFzc2V0SWRBCAUNJHQwMzU5NTMzNjA0MwJfMwQIYXNzZXRJZEIIBQ0kdDAzNTk1MzM2MDQzAl80BAxzaGFyZUFzc2V0SWQIBQ0kdDAzNTk1MzM2MDQzAl81BA0kdDAzNjA1MjM2MTc2CQEPZ2V0UG9vbEJhbGFuY2VzAwgFAWkGY2FsbGVyBQhhc3NldElkQQUIYXNzZXRJZEIECGJhbGFuY2VBCAUNJHQwMzYwNTIzNjE3NgJfMQQIYmFsYW5jZUIIBQ0kdDAzNjA1MjM2MTc2Al8yBA9hY2NvdW50QmFsYW5jZUEIBQ0kdDAzNjA1MjM2MTc2Al8zBA9hY2NvdW50QmFsYW5jZUIIBQ0kdDAzNjA1MjM2MTc2Al80BBBzaGFyZUFzc2V0U3VwcGx5CAUNJHQwMzYwNTIzNjE3NgJfNQQNJHQwMzYxODUzNjUzNwMJAAACCQCQAwEFCHBBbW91bnRzAAEEBnBBc3NldAkBEXBhcnNlUGF5bWVudEFzc2V0AQkAkQMCBQlwQXNzZXRJZHMAAAMJAQIhPQIFBnBBc3NldAUMc2hhcmVBc3NldElkCQACAQkArAICAiRJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQuIEV4cGVjdGVkOiAJANgEAQUMc2hhcmVBc3NldElkCQCUCgIJAJEDAgUIcEFtb3VudHMAAAUGcEFzc2V0CQCUCgIAAAUMc2hhcmVBc3NldElkBAlwbXRBbW91bnQIBQ0kdDAzNjE4NTM2NTM3Al8xBApwbXRBc3NldElkCAUNJHQwMzYxODUzNjUzNwJfMgQPdmlydE1pblRvUmVjaXZlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEYXJncwABAwkBAiE9AgkAkAMBBQRhcmdzAAMJAAIBAg9Xcm9uZyBhcmdzIHNpemUDCQBmAgkAkAMBBQhwQW1vdW50cwABCQACAQIdT25lIGF0dGFjaGVkIHBheW1lbnQgZXhwZWN0ZWQDCQECIT0CBQpwbXRBc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBCQCsAgICJEluY29ycmVjdCBhc3NldCBhdHRhY2hlZC4gRXhwZWN0ZWQ6IAkA2AQBBQxzaGFyZUFzc2V0SWQDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFCGFzc2V0SWRBCQDMCAIFCGFzc2V0SWRCBQNuaWwFDXdpdGhkcmF3QXNzZXQJAAIBAhlJbmNvcnJlY3Qgd2l0aGRyYXcgYXNzZXQuAwMJAGYCBQhiYWxhbmNlQQUPYWNjb3VudEJhbGFuY2VBBgkAZgIFCGJhbGFuY2VCBQ9hY2NvdW50QmFsYW5jZUIJAJQKAgUDbmlsCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBQlwbXRBbW91bnQFCnBtdEFzc2V0SWQFA25pbAkBEXN1c3BlbmRTdXNwaWNpb3VzBgUPYWNjb3VudEJhbGFuY2VBBQ9hY2NvdW50QmFsYW5jZUIFCGJhbGFuY2VBBQhiYWxhbmNlQgULc3RyQXNzZXRJZEEFC3N0ckFzc2V0SWRCBAx1bmxvY2tBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkBC3ZhbHVlT3JFbHNlAgkAkQMCBQRhcmdzAAICATAEBnVubG9jawMJAGYCBQx1bmxvY2tBbW91bnQAAAkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIbd2l0aGRyYXdTaGFyZVRva2Vuc0Zyb21Qb29sCQDMCAIFC2NhbGxlckJ5dGVzCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwAAAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQMYW1vdW50VG9QYXlBCQBrAwUOd2l0aGRyYXdBbW91bnQFCGJhbGFuY2VBBRBzaGFyZUFzc2V0U3VwcGx5BAxhbW91bnRUb1BheUIJAGsDBQ53aXRoZHJhd0Ftb3VudAUIYmFsYW5jZUIFEHNoYXJlQXNzZXRTdXBwbHkEDSR0MDM3ODA0Mzc4NzEJAQxnZXRGZWVQYXJhbXMCCAUBaQZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQDZmVlCAUNJHQwMzc4MDQzNzg3MQJfMQQGZ292RmVlCAUNJHQwMzc4MDQzNzg3MQJfMgQHdGVhbUZlZQgFDSR0MDM3ODA0Mzc4NzECXzMEDSR0MDM3ODg0MzgyOTgDCQAAAgUNd2l0aGRyYXdBc3NldAUIYXNzZXRJZEEJAQ1jYWxjdWxhdGVGZWVzBwUMYW1vdW50VG9QYXlCBQ92aXJ0TWluVG9SZWNpdmUJAGUCBQhiYWxhbmNlQgUMYW1vdW50VG9QYXlCCQBlAgUIYmFsYW5jZUEFDGFtb3VudFRvUGF5QQUDZmVlBQZnb3ZGZWUFB3RlYW1GZWUJAQ1jYWxjdWxhdGVGZWVzBwUMYW1vdW50VG9QYXlBBQ92aXJ0TWluVG9SZWNpdmUJAGUCBQhiYWxhbmNlQQUMYW1vdW50VG9QYXlBCQBlAgUIYmFsYW5jZUIFDGFtb3VudFRvUGF5QgUDZmVlBQZnb3ZGZWUFB3RlYW1GZWUEEGFtb3VudFdpdGhvdXRGZWUIBQ0kdDAzNzg4NDM4Mjk4Al8xBA1hbW91bnRXaXRoRmVlCAUNJHQwMzc4ODQzODI5OAJfMgQQZ292ZXJuYW5jZVJld2FyZAgFDSR0MDM3ODg0MzgyOTgCXzMECnRlYW1SZXdhcmQIBQ0kdDAzNzg4NDM4Mjk4Al80BA0kdDAzODMxMTM5NjIxAwkAAAIFDXdpdGhkcmF3QXNzZXQFCGFzc2V0SWRBBAd1bnN0YWtlAwkBCGNvbnRhaW5zAgUNc3Rha2luZ0Fzc2V0cwULc3RyQXNzZXRJZEEJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgcJAMwIAgkAZAIJAGQCCQBkAgUMYW1vdW50VG9QYXlBBQ1hbW91bnRXaXRoRmVlBRBnb3Zlcm5hbmNlUmV3YXJkBQp0ZWFtUmV3YXJkCQDMCAIFC3N0ckFzc2V0SWRBBQNuaWwFA25pbAAAAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAJYKBAkAZQIJAGUCCQBlAgkAZQIFCGJhbGFuY2VBBQxhbW91bnRUb1BheUEFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQFCGJhbGFuY2VCBQhhc3NldElkQQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGQCBQxhbW91bnRUb1BheUEFDWFtb3VudFdpdGhGZWUFCGFzc2V0SWRBBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EB3Vuc3Rha2UDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQgkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBwkAzAgCCQBkAgkAZAIJAGQCBQxhbW91bnRUb1BheUIFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQJAMwIAgULc3RyQXNzZXRJZEIFA25pbAUDbmlsAAADCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAlgoEBQhiYWxhbmNlQQkAZQIJAGUCCQBlAgkAZQIFCGJhbGFuY2VCBQxhbW91bnRUb1BheUIFDWFtb3VudFdpdGhGZWUFEGdvdmVybmFuY2VSZXdhcmQFCnRlYW1SZXdhcmQFCGFzc2V0SWRCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZAIFDGFtb3VudFRvUGF5QgUNYW1vdW50V2l0aEZlZQUIYXNzZXRJZEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQLbmV3QmFsYW5jZUEIBQ0kdDAzODMxMTM5NjIxAl8xBAtuZXdCYWxhbmNlQggFDSR0MDM4MzExMzk2MjECXzIEEGdvdlJld2FyZEFzc2V0SWQIBQ0kdDAzODMxMTM5NjIxAl8zBAx1c2VyVHJhbnNmZXIIBQ0kdDAzODMxMTM5NjIxAl80CQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQx1bmxvY2tBbW91bnQFDHNoYXJlQXNzZXRJZAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VBBQtuZXdCYWxhbmNlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCBQtuZXdCYWxhbmNlQgkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBRBzaGFyZUFzc2V0U3VwcGx5BQ53aXRoZHJhd0Ftb3VudAkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBRBnb3Zlcm5hbmNlUmV3YXJkBRBnb3ZSZXdhcmRBc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDnRlYW1Cb3hBZGRyZXNzBQp0ZWFtUmV3YXJkBRBnb3ZSZXdhcmRBc3NldElkBQNuaWwFDHVzZXJUcmFuc2ZlcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXRha2VJbnRvQWNjb3VudEV4dHJhRnVuZHMEC2NhbGxlckJ5dGVzBGFyZ3MIcEFtb3VudHMJcEFzc2V0SWRzCQELdmFsdWVPckVsc2UCCQEMaXNPcmFjbGVQb29sAQkApQgBCAUBaQZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDSR0MDQwMzgxNDA0NTcJAQ1nZXRQb29sQXNzZXRzAQgFAWkGY2FsbGVyBAtzdHJBc3NldElkQQgFDSR0MDQwMzgxNDA0NTcCXzEEC3N0ckFzc2V0SWRCCAUNJHQwNDAzODE0MDQ1NwJfMgQIYXNzZXRJZEEIBQ0kdDA0MDM4MTQwNDU3Al8zBAhhc3NldElkQggFDSR0MDQwMzgxNDA0NTcCXzQEBWNsYWltAwMJAAACBQhhc3NldElkQQUEVVNETgYJAAACBQhhc3NldElkQgUEVVNETgkA/AcECAUBaQZjYWxsZXICE2NsYWltTmV0cmlub1Jld2FyZHMFA25pbAUDbmlsAAADCQAAAgUFY2xhaW0FBWNsYWltBA0kdDA0MDYxNzQwNzIzCQEPZ2V0UG9vbEJhbGFuY2VzAwgFAWkGY2FsbGVyBQhhc3NldElkQQUIYXNzZXRJZEIECGJhbGFuY2VBCAUNJHQwNDA2MTc0MDcyMwJfMQQIYmFsYW5jZUIIBQ0kdDA0MDYxNzQwNzIzAl8yBA9hY2NvdW50QmFsYW5jZUEIBQ0kdDA0MDYxNzQwNzIzAl8zBA9hY2NvdW50QmFsYW5jZUIIBQ0kdDA0MDYxNzQwNzIzAl80BA1hbW91bnRFbnJvbGxBCQBlAgUPYWNjb3VudEJhbGFuY2VBBQhiYWxhbmNlQQQNYW1vdW50RW5yb2xsQgkAZQIFD2FjY291bnRCYWxhbmNlQgUIYmFsYW5jZUIDCQECIT0CCQCQAwEFBGFyZ3MAAAkAAgECD1dyb25nIGFyZ3Mgc2l6ZQMJAQIhPQIFD21vbmV5Qm94QWRkcmVzcwgFAWkMb3JpZ2luQ2FsbGVyCQACAQImT25seSB0aGUgd2FsbGV0IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24DAwkAZgIAAAUNYW1vdW50RW5yb2xsQQYJAGYCAAAFDWFtb3VudEVucm9sbEIJAQdzdXNwZW5kAQIWRW5yb2xsIGFtb3VudCBuZWdhdGl2ZQMDCQAAAgUNYW1vdW50RW5yb2xsQQAACQAAAgUNYW1vdW50RW5yb2xsQgAABwkAAgECEE5vIG1vbmV5IHRvIHRha2UEBnN0YWtlMQMDCQEIY29udGFpbnMCBQ1zdGFraW5nQXNzZXRzBQtzdHJBc3NldElkQQkAZgIFDWFtb3VudEVucm9sbEEAAAcJAPwHBAgFAWkGY2FsbGVyAgxzdGFrZVVuc3Rha2UJAMwIAgYJAMwIAgUNYW1vdW50RW5yb2xsQQkAzAgCBQtzdHJBc3NldElkQQUDbmlsBQNuaWwAAAMJAAACBQZzdGFrZTEFBnN0YWtlMQQGc3Rha2UyAwMJAQhjb250YWlucwIFDXN0YWtpbmdBc3NldHMFC3N0ckFzc2V0SWRCCQBmAgUNYW1vdW50RW5yb2xsQgAABwkA/AcECAUBaQZjYWxsZXICDHN0YWtlVW5zdGFrZQkAzAgCBgkAzAgCBQ1hbW91bnRFbnJvbGxCCQDMCAIFC3N0ckFzc2V0SWRCBQNuaWwFA25pbAAAAwkAAAIFBnN0YWtlMgUGc3Rha2UyCQCUCgIFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrQmFsYW5jZUEJAGQCBQhiYWxhbmNlQQUNYW1vdW50RW5yb2xsQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa0JhbGFuY2VCCQBkAgUIYmFsYW5jZUIFDWFtb3VudEVucm9sbEIFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJ0eAEGdmVyaWZ5AAQTbXVsdGlTaWduZWRCeUFkbWlucwQSYWRtaW5QdWJLZXkxU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAUMYWRtaW5QdWJLZXkxAAEAAAQSYWRtaW5QdWJLZXkyU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAQUMYWRtaW5QdWJLZXkyAAEAAAQSYWRtaW5QdWJLZXkzU2lnbmVkAwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAgUMYWRtaW5QdWJLZXkzAAEAAAkAZwIJAGQCCQBkAgUSYWRtaW5QdWJLZXkxU2lnbmVkBRJhZG1pblB1YktleTJTaWduZWQFEmFkbWluUHViS2V5M1NpZ25lZAACBRNtdWx0aVNpZ25lZEJ5QWRtaW5z+j/sUQ==", "height": 2624962, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DcPFXUgWvt7aFcegn2UvABrxMdhknJuENJpFuwyNKnLQ Next: none Diff:
OldNewDifferences
8383
8484 let O = "farming_address"
8585
86-let P = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
86+let P = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
8787
8888 func Q (R) = {
8989 let S = getString(P, R)
385385 let bZ = fraction(toBigInt((aP - co)), aq, toBigInt(cr))
386386 let ca = fraction(toBigInt(aX), aq, toBigInt(cs))
387387 let ch = toInt(fraction(min([bZ, ca]), toBigInt(cm), aq))
388- $Tuple6(ch, ct, cu, aY, cq, cl)
388+ let cv = toInt(fraction(fraction(toBigInt(aP), aq, toBigInt(bM)), toBigInt(cm), aq))
389+ let cw = fraction((ch - cv), ap, cv)
390+ $Tuple7(ch, ct, cu, aY, cq, cl, cw)
389391 }
390392 else {
391393 let co = ba(aP, bN, aT)
392- let cv = aO(co, cn, bN, bM, aT, bF, bG)
393- let aW = cv._1
394- let aX = cv._2
395- let aY = cv._3
396- let cq = cv._4
394+ let cx = aO(co, cn, bN, bM, aT, bF, bG)
395+ let aW = cx._1
396+ let aX = cx._2
397+ let aY = cx._3
398+ let cq = cx._4
397399 let cr = (((bM + aW) - aY) - cq)
398400 let cs = (bN + co)
399401 let ct = ((bM - aY) - cq)
401403 let bZ = fraction(toBigInt(aX), aq, toBigInt(cr))
402404 let ca = fraction(toBigInt((aP - co)), aq, toBigInt(cs))
403405 let ch = toInt(fraction(min([bZ, ca]), toBigInt(cm), aq))
404- $Tuple6(ch, ct, cu, aY, cq, ay)
406+ let cv = toInt(fraction(fraction(toBigInt(aP), aq, toBigInt(bN)), toBigInt(cm), aq))
407+ let cw = fraction((ch - cv), ap, cv)
408+ $Tuple7(ch, ct, cu, aY, cq, ay, cw)
405409 }
406410
407411
408-func cw (bI,bJ,bK,bL,bM,bN,cm,aT,bF,bG,cn) = {
409- let cx = bH(bI, bJ, bK, bL, bM, bN, cm)
410- let cy = cx._1
411- let ce = cx._2
412- let cf = cx._3
413- let cc = cx._4
414- let cd = cx._5
412+func cy (bI,bJ,bK,bL,bM,bN,cm,aT,bF,bG,cn) = {
413+ let cz = bH(bI, bJ, bK, bL, bM, bN, cm)
414+ let cA = cz._1
415+ let ce = cz._2
416+ let cf = cz._3
417+ let cc = cz._4
418+ let cd = cz._5
415419 if ((ce > 0))
416420 then {
417- let cz = cj(ce, cf, bK, bL, (bM + cc), (bN + cd), cm, aT, bF, bG, cn)
418- let cA = cz._1
419- let ct = cz._2
420- let cu = cz._3
421- let aY = cz._4
422- let cq = cz._5
423- let cB = cz._6
424- $Tuple6((cy + cA), ct, cu, aY, cq, cB)
421+ let cB = cj(ce, cf, bK, bL, (bM + cc), (bN + cd), cm, aT, bF, bG, cn)
422+ let cC = cB._1
423+ let ct = cB._2
424+ let cu = cB._3
425+ let aY = cB._4
426+ let cq = cB._5
427+ let cD = cB._6
428+ let cw = cB._7
429+ $Tuple7((cA + cC), cw, ct, cu, aY, cq, cD)
425430 }
426- else $Tuple6(cy, (bM + cc), (bN + cd), 0, 0, unit)
431+ else $Tuple7(cA, 0, (bM + cc), (bN + cd), 0, 0, unit)
427432 }
428433
429434
430435 @Callable(az)
431-func calcLPReplenishDiffPropREADONLY (cC,cD,cE,cF) = {
432- let cG = by(az.caller)
433- let bz = cG._1
434- let bA = cG._2
435- let bo = cG._3
436- let bp = cG._4
437- let bB = cG._5
438- let cH = bu(az.caller, bo, bp)
439- let bM = cH._1
440- let bN = cH._2
441- let cI = cH._3
442- let cJ = cH._4
443- let cm = cH._5
444- let bI = parseIntValue(cD[0])
445- let bJ = parseIntValue(cD[1])
446- let cn = parseIntValue(cD[2])
447- let cK = bC(az.caller, az.originCaller)
448- let aT = cK._1
449- let bF = cK._2
450- let bG = cK._3
451- let cL = cw(bI, bJ, bo, bp, bM, bN, cm, aT, bF, bG, cn)
452- let cM = cL._1
453- let ct = cL._2
454- let cu = cL._3
455- let aY = cL._4
456- let cq = cL._5
457- let ay = cL._6
458- $Tuple2(nil, $Tuple2(nil, [cM, ct, cu, aY, cq, ay]))
436+func calcLPReplenishDiffPropREADONLY (cE,cF,cG,cH) = {
437+ let cI = by(az.caller)
438+ let bz = cI._1
439+ let bA = cI._2
440+ let bo = cI._3
441+ let bp = cI._4
442+ let bB = cI._5
443+ let cJ = bu(az.caller, bo, bp)
444+ let bM = cJ._1
445+ let bN = cJ._2
446+ let cK = cJ._3
447+ let cL = cJ._4
448+ let cm = cJ._5
449+ let bI = parseIntValue(cF[0])
450+ let bJ = parseIntValue(cF[1])
451+ let cn = parseIntValue(cF[2])
452+ let cM = bC(az.caller, az.originCaller)
453+ let aT = cM._1
454+ let bF = cM._2
455+ let bG = cM._3
456+ let cN = cy(bI, bJ, bo, bp, bM, bN, cm, aT, bF, bG, cn)
457+ let cO = cN._1
458+ let cw = cN._2
459+ let ct = cN._3
460+ let cu = cN._4
461+ let aY = cN._5
462+ let cq = cN._6
463+ let ay = cN._7
464+ $Tuple2(nil, $Tuple2(nil, [cO, cw, ct, cu, aY, cq, ay]))
459465 }
460466
461467
462468
463469 @Callable(az)
464-func withdrawREADONLY (cC,cD,cE,cF) = {
465- let cN = by(az.caller)
466- let bz = cN._1
467- let bA = cN._2
468- let bo = cN._3
469- let bp = cN._4
470- let bB = cN._5
471- let cO = bu(az.caller, bo, bp)
472- let bm = cO._1
473- let bn = cO._2
474- let bk = cO._3
475- let bl = cO._4
476- let bO = cO._5
477- let cP = parseIntValue(cD[0])
478- let cQ = if ((size(cD) == 3))
479- then $Tuple2(parseIntValue(cD[1]), parseIntValue(cD[2]))
470+func withdrawREADONLY (cE,cF,cG,cH) = {
471+ let cP = by(az.caller)
472+ let bz = cP._1
473+ let bA = cP._2
474+ let bo = cP._3
475+ let bp = cP._4
476+ let bB = cP._5
477+ let cQ = bu(az.caller, bo, bp)
478+ let bm = cQ._1
479+ let bn = cQ._2
480+ let bk = cQ._3
481+ let bl = cQ._4
482+ let bO = cQ._5
483+ let cR = parseIntValue(cF[0])
484+ let cS = if ((size(cF) == 3))
485+ then $Tuple2(parseIntValue(cF[1]), parseIntValue(cF[2]))
480486 else $Tuple2(bm, bn)
481- let bM = cQ._1
482- let bN = cQ._2
483- let cR = fraction(cP, bM, bO)
484- let cS = fraction(cP, bN, bO)
485- $Tuple2(nil, $Tuple2(nil, [cR, cS]))
487+ let bM = cS._1
488+ let bN = cS._2
489+ let cT = fraction(cR, bM, bO)
490+ let cU = fraction(cR, bN, bO)
491+ $Tuple2(nil, $Tuple2(nil, [cT, cU]))
486492 }
487493
488494
489495
490496 @Callable(az)
491-func init (cC,cD,cE,cF) = {
492- let bD = Address(cC)
493- let cT = $Tuple2(cE[0], bi(cF[0]))
494- let cc = cT._1
495- let cU = cT._2
496- let cV = $Tuple2(cE[1], bi(cF[1]))
497- let cd = cV._1
497+func init (cE,cF,cG,cH) = {
498+ let bD = Address(cE)
499+ let cV = $Tuple2(cG[0], bi(cH[0]))
500+ let cc = cV._1
498501 let cW = cV._2
502+ let cX = $Tuple2(cG[1], bi(cH[1]))
503+ let cd = cX._1
504+ let cY = cX._2
499505 if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
500506 then throw("Only admin can call this function")
501- else if ((size(cD) != 1))
507+ else if ((size(cF) != 1))
502508 then throw("Wrong args size")
503509 else if (isDefined(getBoolean(bD, c)))
504510 then throw("DApp is already active")
505- else if ((cU == cW))
511+ else if ((cW == cY))
506512 then throw("Assets must be different")
507513 else {
508- let cX = aA(cU)
509- let bQ = cX._1
510- let bR = cX._2
511- let bS = cX._3
512- let cY = aA(cW)
513- let bU = cY._1
514- let bV = cY._2
515- let bW = cY._3
516- let cZ = (cD[0] == "true")
517- let da = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
518- let db = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
514+ let cZ = aA(cW)
515+ let bQ = cZ._1
516+ let bR = cZ._2
517+ let bS = cZ._3
518+ let da = aA(cY)
519+ let bU = da._1
520+ let bV = da._2
521+ let bW = da._3
522+ let db = (cF[0] == "true")
523+ let dc = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
524+ let dd = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
519525 let ci = ((bS + bW) / 2)
520- let dc = pow(cc, bS, 5, 1, bS, DOWN)
521- let dd = pow(cd, bW, 5, 1, bW, DOWN)
522- let de = pow(10, 0, ci, 0, 0, DOWN)
523- let df = fraction(dc, dd, de)
524- let dg = Issue(da, db, df, ci, true)
525- let dh = calculateAssetId(dg)
526- let di = if (contains(ag, bQ))
526+ let de = pow(cc, bS, 5, 1, bS, DOWN)
527+ let df = pow(cd, bW, 5, 1, bW, DOWN)
528+ let dg = pow(10, 0, ci, 0, 0, DOWN)
529+ let dh = fraction(de, df, dg)
530+ let di = Issue(dc, dd, dh, ci, true)
531+ let dj = calculateAssetId(di)
532+ let dk = if (contains(ag, bQ))
527533 then invoke(az.caller, "stakeUnstake", [true, cc, bQ], nil)
528534 else 0
529- if ((di == di))
535+ if ((dk == dk))
530536 then {
531- let dj = if (contains(ag, bU))
537+ let dl = if (contains(ag, bU))
532538 then invoke(az.caller, "stakeUnstake", [true, cd, bU], nil)
533539 else 0
534- if ((dj == dj))
540+ if ((dl == dl))
535541 then {
536- let dk = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(g, cc), IntegerEntry(h, cd), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), dg, StringEntry(k, toBase58String(dh)), IntegerEntry(l, df), ScriptTransfer(bD, df, dh)]
537- if (cZ)
538- then $Tuple2(nil, $Tuple2((dk ++ [BooleanEntry(o, cZ), IntegerEntry(p, (ak + (am * al)))]), nil))
539- else $Tuple2(nil, $Tuple2(dk, nil))
542+ let dm = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(g, cc), IntegerEntry(h, cd), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), di, StringEntry(k, toBase58String(dj)), IntegerEntry(l, dh), ScriptTransfer(bD, dh, dj)]
543+ if (db)
544+ then $Tuple2(nil, $Tuple2((dm ++ [BooleanEntry(o, db), IntegerEntry(p, (ak + (am * al)))]), nil))
545+ else $Tuple2(nil, $Tuple2(dm, nil))
540546 }
541547 else throw("Strict value is not equal to itself.")
542548 }
547553
548554
549555 @Callable(az)
550-func initWithInitRatio (cC,cD,cE,cF) = {
551- let bD = Address(cC)
552- let dl = $Tuple5(parseIntValue(cD[0]), parseIntValue(cD[1]), cD[2], cD[3], (cD[4] == "true"))
553- let dm = dl._1
554- let dn = dl._2
555- let do = dl._3
556- let dp = dl._4
557- let cZ = dl._5
556+func initWithInitRatio (cE,cF,cG,cH) = {
557+ let bD = Address(cE)
558+ let dn = $Tuple5(parseIntValue(cF[0]), parseIntValue(cF[1]), cF[2], cF[3], (cF[4] == "true"))
559+ let do = dn._1
560+ let dp = dn._2
561+ let dq = dn._3
562+ let dr = dn._4
563+ let db = dn._5
558564 if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
559565 then throw("Only admin can call this function")
560- else if ((size(cD) != 5))
566+ else if ((size(cF) != 5))
561567 then throw("Wrong args size")
562568 else if (isDefined(getBoolean(bD, c)))
563569 then throw("DApp is already active")
564- else if ((do == dp))
570+ else if ((dq == dr))
565571 then throw("Assets must be different")
566572 else {
567- let dq = aA(do)
568- let bQ = dq._1
569- let bR = dq._2
570- let bS = dq._3
571- let dr = aA(dp)
572- let bU = dr._1
573- let bV = dr._2
574- let bW = dr._3
575- let da = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
576- let db = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
573+ let ds = aA(dq)
574+ let bQ = ds._1
575+ let bR = ds._2
576+ let bS = ds._3
577+ let dt = aA(dr)
578+ let bU = dt._1
579+ let bV = dt._2
580+ let bW = dt._3
581+ let dc = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
582+ let dd = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
577583 let ci = ((bS + bW) / 2)
578- let df = 0
579- let dg = Issue(da, db, df, ci, true)
580- let dh = calculateAssetId(dg)
581- let dk = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(i, dm), IntegerEntry(j, dn), IntegerEntry(g, 0), IntegerEntry(h, 0), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), dg, StringEntry(k, toBase58String(dh)), IntegerEntry(l, df)]
582- if (cZ)
583- then $Tuple2(nil, $Tuple2((dk ++ [BooleanEntry(o, cZ), IntegerEntry(p, (ak + (am * al)))]), nil))
584- else $Tuple2(nil, $Tuple2(dk, nil))
584+ let dh = 0
585+ let di = Issue(dc, dd, dh, ci, true)
586+ let dj = calculateAssetId(di)
587+ let dm = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(i, do), IntegerEntry(j, dp), IntegerEntry(g, 0), IntegerEntry(h, 0), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), di, StringEntry(k, toBase58String(dj)), IntegerEntry(l, dh)]
588+ if (db)
589+ then $Tuple2(nil, $Tuple2((dm ++ [BooleanEntry(o, db), IntegerEntry(p, (ak + (am * al)))]), nil))
590+ else $Tuple2(nil, $Tuple2(dm, nil))
585591 }
586592 }
587593
588594
589595
590596 @Callable(az)
591-func keepLimitForFirstHarvest (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
597+func keepLimitForFirstHarvest (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
592598 then throw("Only admin can call this function")
593- else if ((size(cD) != 1))
599+ else if ((size(cF) != 1))
594600 then throw("Wrong args size")
595601 else {
596- let ds = parseIntValue(cD[0])
597- $Tuple2(nil, $Tuple2([IntegerEntry(q, ds)], nil))
602+ let du = parseIntValue(cF[0])
603+ $Tuple2(nil, $Tuple2([IntegerEntry(q, du)], nil))
598604 }))
599605
600606
601607
602608 @Callable(az)
603-func exchange (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
604- let bD = Address(cC)
605- let dt = $Tuple2(cE[0], bi(cF[0]))
606- let aP = dt._1
607- let ck = dt._2
608- let aQ = parseIntValue(cD[0])
609- let du = by(az.caller)
610- let bz = du._1
611- let bA = du._2
612- let bo = du._3
613- let bp = du._4
614- let dv = bu(az.caller, bo, bp)
615- let bm = dv._1
616- let bn = dv._2
617- let bk = dv._3
618- let bl = dv._4
619- if ((size(cD) != 1))
609+func exchange (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
610+ let bD = Address(cE)
611+ let dv = $Tuple2(cG[0], bi(cH[0]))
612+ let aP = dv._1
613+ let ck = dv._2
614+ let aQ = parseIntValue(cF[0])
615+ let dw = by(az.caller)
616+ let bz = dw._1
617+ let bA = dw._2
618+ let bo = dw._3
619+ let bp = dw._4
620+ let dx = bu(az.caller, bo, bp)
621+ let bm = dx._1
622+ let bn = dx._2
623+ let bk = dx._3
624+ let bl = dx._4
625+ if ((size(cF) != 1))
620626 then throw("Wrong args size")
621627 else if (if ((bm == 0))
622628 then true
624630 then throw("Can't exchange with zero balance")
625631 else if ((0 >= aQ))
626632 then throw(("Minimal amount to receive must be positive. Actual: " + toString(aQ)))
627- else if ((size(cE) != 1))
633+ else if ((size(cG) != 1))
628634 then throw("One attached payment expected")
629635 else if (!(containsElement([bo, bp], ck)))
630636 then throw(((("Incorrect asset attached. Expected: " + bz) + " or ") + bA))
633639 else (bn > bl))
634640 then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ bj(bk, bl, bm, bn, bz, bA)))
635641 else {
636- let dw = bC(az.caller, az.originCaller)
637- let aT = dw._1
638- let bF = dw._2
639- let bG = dw._3
640- let dx = if ((ck == bo))
642+ let dy = bC(az.caller, az.originCaller)
643+ let aT = dy._1
644+ let bF = dy._2
645+ let bG = dy._3
646+ let dz = if ((ck == bo))
641647 then aO(aP, aQ, bm, bn, aT, bF, bG)
642648 else aO(aP, aQ, bn, bm, aT, bF, bG)
643- let aW = dx._1
644- let aX = dx._2
645- let aY = dx._3
646- let aZ = dx._4
647- let dy = if ((ck == bo))
649+ let aW = dz._1
650+ let aX = dz._2
651+ let aY = dz._3
652+ let aZ = dz._4
653+ let dA = if ((ck == bo))
648654 then $Tuple3((bm + aP), (((bn - aX) - aY) - aZ), bp)
649655 else $Tuple3((((bm - aX) - aY) - aZ), (bn + aP), bo)
650- let ct = dy._1
651- let cu = dy._2
652- let dz = dy._3
653- let dA = if ((ck == bo))
656+ let ct = dA._1
657+ let cu = dA._2
658+ let dB = dA._3
659+ let dC = if ((ck == bo))
654660 then $Tuple2(aP, ((aX + aY) + aZ))
655661 else $Tuple2(((aX + aY) + aZ), aP)
656- let dB = dA._1
657- let dC = dA._2
658- let di = if (contains(ag, bz))
659- then invoke(az.caller, "stakeUnstake", [(ck == bo), dB, bz], nil)
662+ let dD = dC._1
663+ let dE = dC._2
664+ let dk = if (contains(ag, bz))
665+ then invoke(az.caller, "stakeUnstake", [(ck == bo), dD, bz], nil)
660666 else 0
661- if ((di == di))
667+ if ((dk == dk))
662668 then {
663- let dj = if (contains(ag, bA))
664- then invoke(az.caller, "stakeUnstake", [(ck == bp), dC, bA], nil)
669+ let dl = if (contains(ag, bA))
670+ then invoke(az.caller, "stakeUnstake", [(ck == bp), dE, bA], nil)
665671 else 0
666- if ((dj == dj))
667- then $Tuple2(nil, $Tuple2([IntegerEntry(g, ct), IntegerEntry(h, cu), ScriptTransfer(bD, aX, dz), ScriptTransfer(Z, aY, dz), ScriptTransfer(aa, aZ, dz)], [aX, dz]))
672+ if ((dl == dl))
673+ then $Tuple2(nil, $Tuple2([IntegerEntry(g, ct), IntegerEntry(h, cu), ScriptTransfer(bD, aX, dB), ScriptTransfer(Z, aY, dB), ScriptTransfer(aa, aZ, dB)], [aX, dB]))
668674 else throw("Strict value is not equal to itself.")
669675 }
670676 else throw("Strict value is not equal to itself.")
674680
675681
676682 @Callable(az)
677-func replenishWithTwoTokens (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
678- let bD = Address(cC)
679- let cU = bi(cF[0])
680- let cW = bi(cF[1])
681- let dD = (cD[0] == "true")
682- let dE = parseIntValue(cD[1])
683- let dF = by(az.caller)
684- let bz = dF._1
685- let bA = dF._2
686- let bo = dF._3
687- let bp = dF._4
688- let bB = dF._5
689- let dG = bu(az.caller, bo, bp)
690- let bm = dG._1
691- let bn = dG._2
692- let bk = dG._3
693- let bl = dG._4
694- let bO = dG._5
695- if ((size(cD) != 2))
683+func replenishWithTwoTokens (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
684+ let bD = Address(cE)
685+ let cW = bi(cH[0])
686+ let cY = bi(cH[1])
687+ let dF = (cF[0] == "true")
688+ let dG = parseIntValue(cF[1])
689+ let dH = by(az.caller)
690+ let bz = dH._1
691+ let bA = dH._2
692+ let bo = dH._3
693+ let bp = dH._4
694+ let bB = dH._5
695+ let dI = bu(az.caller, bo, bp)
696+ let bm = dI._1
697+ let bn = dI._2
698+ let bk = dI._3
699+ let bl = dI._4
700+ let bO = dI._5
701+ if ((size(cF) != 2))
696702 then throw("Wrong args size")
697- else if (if ((size(cE) != 2))
698- then (size(cE) != 3)
703+ else if (if ((size(cG) != 2))
704+ then (size(cG) != 3)
699705 else false)
700706 then throw("Two or three payments expected")
701- else if (if ((cU != bo))
707+ else if (if ((cW != bo))
702708 then true
703- else (cW != bp))
709+ else (cY != bp))
704710 then throw(((("Incorrect assets attached. Expected: " + bz) + " and ") + bA))
705711 else if (if ((bm > bk))
706712 then true
707713 else (bn > bl))
708- then $Tuple2(nil, ([ScriptTransfer(bD, cE[0], cU), ScriptTransfer(bD, cE[1], cW)] ++ (if ((size(cE) == 3))
709- then [AttachedPayment(if ((cF[2] == base58''))
714+ then $Tuple2(nil, ([ScriptTransfer(bD, cG[0], cW), ScriptTransfer(bD, cG[1], cY)] ++ (if ((size(cG) == 3))
715+ then [AttachedPayment(if ((cH[2] == base58''))
710716 then unit
711- else cF[2], cE[2])]
717+ else cH[2], cG[2])]
712718 else (nil ++ bj(bk, bl, bm, bn, bz, bA)))))
713719 else {
714- let dH = bH(cE[0], cE[1], cU, cW, bm, bn, bO)
715- let ch = dH._1
716- let ce = dH._2
717- let cf = dH._3
718- let cc = dH._4
719- let cd = dH._5
720+ let dJ = bH(cG[0], cG[1], cW, cY, bm, bn, bO)
721+ let ch = dJ._1
722+ let ce = dJ._2
723+ let cf = dJ._3
724+ let cc = dJ._4
725+ let cd = dJ._5
720726 if ((ch == 0))
721727 then throw("Too small amount to replenish")
722728 else if ((0 > ce))
723729 then throw("Change < 0")
724730 else {
725- let di = if (contains(ag, bz))
731+ let dk = if (contains(ag, bz))
726732 then invoke(az.caller, "stakeUnstake", [true, cc, bz], nil)
727733 else 0
728- if ((di == di))
734+ if ((dk == dk))
729735 then {
730- let dj = if (contains(ag, bA))
736+ let dl = if (contains(ag, bA))
731737 then invoke(az.caller, "stakeUnstake", [true, cd, bA], nil)
732738 else 0
733- if ((dj == dj))
739+ if ((dl == dl))
734740 then {
735- let dI = if (dD)
741+ let dK = if (dF)
736742 then {
737- let dJ = ([AttachedPayment(bB, ch)] ++ (if ((size(cE) == 3))
738- then [AttachedPayment(if ((cF[2] == base58''))
743+ let dL = ([AttachedPayment(bB, ch)] ++ (if ((size(cG) == 3))
744+ then [AttachedPayment(if ((cH[2] == base58''))
739745 then unit
740- else cF[2], cE[2])]
746+ else cH[2], cG[2])]
741747 else nil))
742- let dK = invoke(az.caller, "reissueShareToken", [ch], nil)
743- if ((dK == dK))
748+ let dM = invoke(az.caller, "reissueShareToken", [ch], nil)
749+ if ((dM == dM))
744750 then {
745- let dL = invoke(ad, "lockShareTokensFromPool", [cC, toString(az.caller), dE], dJ)
746- if ((dL == dL))
751+ let dN = invoke(ad, "lockShareTokensFromPool", [cE, toString(az.caller), dG], dL)
752+ if ((dN == dN))
747753 then nil
748754 else throw("Strict value is not equal to itself.")
749755 }
750756 else throw("Strict value is not equal to itself.")
751757 }
752758 else [Reissue(bB, ch, true), ScriptTransfer(bD, ch, bB)]
753- $Tuple2(nil, $Tuple2(([IntegerEntry(g, (bm + cc)), IntegerEntry(h, (bn + cd)), IntegerEntry(l, (bO + ch)), ScriptTransfer(bD, ce, cf)] ++ dI), nil))
759+ $Tuple2(nil, $Tuple2(([IntegerEntry(g, (bm + cc)), IntegerEntry(h, (bn + cd)), IntegerEntry(l, (bO + ch)), ScriptTransfer(bD, ce, cf)] ++ dK), nil))
754760 }
755761 else throw("Strict value is not equal to itself.")
756762 }
762768
763769
764770 @Callable(az)
765-func replenishWithOneToken (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
766- let bD = Address(cC)
767- let ck = bi(cF[0])
768- let aP = cE[0]
769- let cn = parseIntValue(cD[0])
770- let dD = (cD[1] == "true")
771- let dE = parseIntValue(cD[2])
772- let dM = by(az.caller)
773- let bz = dM._1
774- let bA = dM._2
775- let bo = dM._3
776- let bp = dM._4
777- let bB = dM._5
778- let dN = bu(az.caller, bo, bp)
779- let bm = dN._1
780- let bn = dN._2
781- let bk = dN._3
782- let bl = dN._4
783- let bO = dN._5
771+func replenishWithOneToken (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
772+ let bD = Address(cE)
773+ let ck = bi(cH[0])
774+ let aP = cG[0]
775+ let cn = parseIntValue(cF[0])
776+ let dF = (cF[1] == "true")
777+ let dG = parseIntValue(cF[2])
778+ let dO = by(az.caller)
779+ let bz = dO._1
780+ let bA = dO._2
781+ let bo = dO._3
782+ let bp = dO._4
783+ let bB = dO._5
784+ let dP = bu(az.caller, bo, bp)
785+ let bm = dP._1
786+ let bn = dP._2
787+ let bk = dP._3
788+ let bl = dP._4
789+ let bO = dP._5
784790 let bX = ((bm + bn) == 0)
785- if ((size(cD) != 3))
791+ if ((size(cF) != 3))
786792 then throw("Wrong args size")
787- else if (if ((size(cE) != 1))
788- then (size(cE) != 2)
793+ else if (if ((size(cG) != 1))
794+ then (size(cG) != 2)
789795 else false)
790796 then throw("Two or one attached assets expected")
791797 else if (if ((ck != bo))
797803 else if (if ((bm > bk))
798804 then true
799805 else (bn > bl))
800- then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ (if ((size(cE) == 2))
801- then [AttachedPayment(if ((cF[2] == base58''))
806+ then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ (if ((size(cG) == 2))
807+ then [AttachedPayment(if ((cH[2] == base58''))
802808 then unit
803- else cF[2], cE[2])]
809+ else cH[2], cG[2])]
804810 else (nil ++ bj(bk, bl, bm, bn, bz, bA)))))
805811 else {
806- let dO = bC(az.caller, az.originCaller)
807- let aT = dO._1
808- let bF = dO._2
809- let bG = dO._3
810- let dP = aA(ck)
811- let dQ = dP._1
812- let dR = dP._2
813- let dS = cj(aP, ck, bo, bp, bm, bn, bO, aT, bF, bG, cn)
814- let ch = dS._1
815- let ct = dS._2
816- let cu = dS._3
817- let dT = dS._4
818- let aZ = dS._5
819- let dU = dS._6
820- let dV = if ((dU == bo))
812+ let dQ = bC(az.caller, az.originCaller)
813+ let aT = dQ._1
814+ let bF = dQ._2
815+ let bG = dQ._3
816+ let dR = aA(ck)
817+ let dS = dR._1
818+ let dT = dR._2
819+ let dU = cj(aP, ck, bo, bp, bm, bn, bO, aT, bF, bG, cn)
820+ let ch = dU._1
821+ let ct = dU._2
822+ let cu = dU._3
823+ let dV = dU._4
824+ let aZ = dU._5
825+ let dW = dU._6
826+ let dX = if ((dW == bo))
821827 then bz
822828 else bA
823829 if ((ch == 0))
824830 then throw("Too small amount to replenish")
825831 else {
826- let di = if (contains(ag, dQ))
827- then invoke(az.caller, "stakeUnstake", [true, aP, dQ], nil)
832+ let dk = if (contains(ag, dS))
833+ then invoke(az.caller, "stakeUnstake", [true, aP, dS], nil)
828834 else 0
829- if ((di == di))
835+ if ((dk == dk))
830836 then {
831- let dj = if (contains(ag, dV))
832- then invoke(az.caller, "stakeUnstake", [false, (dT + aZ), dV], nil)
837+ let dl = if (contains(ag, dX))
838+ then invoke(az.caller, "stakeUnstake", [false, (dV + aZ), dX], nil)
833839 else 0
834- if ((dj == dj))
840+ if ((dl == dl))
835841 then {
836- let dI = if (dD)
842+ let dK = if (dF)
837843 then {
838- let dJ = ([AttachedPayment(bB, ch)] ++ (if ((size(cE) == 2))
839- then [AttachedPayment(if ((cF[1] == base58''))
844+ let dL = ([AttachedPayment(bB, ch)] ++ (if ((size(cG) == 2))
845+ then [AttachedPayment(if ((cH[1] == base58''))
840846 then unit
841- else cF[1], cE[1])]
847+ else cH[1], cG[1])]
842848 else nil))
843- let dK = invoke(az.caller, "reissueShareToken", [ch], nil)
844- if ((dK == dK))
849+ let dM = invoke(az.caller, "reissueShareToken", [ch], nil)
850+ if ((dM == dM))
845851 then {
846- let dL = invoke(ad, "lockShareTokensFromPool", [cC, toString(az.caller), dE], dJ)
847- if ((dL == dL))
852+ let dN = invoke(ad, "lockShareTokensFromPool", [cE, toString(az.caller), dG], dL)
853+ if ((dN == dN))
848854 then nil
849855 else throw("Strict value is not equal to itself.")
850856 }
851857 else throw("Strict value is not equal to itself.")
852858 }
853859 else [Reissue(bB, ch, true), ScriptTransfer(bD, ch, bB)]
854- $Tuple2(nil, $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO + ch)), ScriptTransfer(Z, dT, dU), ScriptTransfer(aa, aZ, dU)] ++ dI), nil))
860+ $Tuple2(nil, $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO + ch)), ScriptTransfer(Z, dV, dW), ScriptTransfer(aa, aZ, dW)] ++ dK), nil))
855861 }
856862 else throw("Strict value is not equal to itself.")
857863 }
863869
864870
865871 @Callable(az)
866-func withdraw (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
867- let bD = Address(cC)
868- let dW = by(az.caller)
869- let bz = dW._1
870- let bA = dW._2
871- let bo = dW._3
872- let bp = dW._4
873- let bB = dW._5
874- let dX = bu(az.caller, bo, bp)
875- let bm = dX._1
876- let bn = dX._2
877- let bk = dX._3
878- let bl = dX._4
879- let bO = dX._5
880- let dY = if ((size(cE) == 1))
872+func withdraw (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
873+ let bD = Address(cE)
874+ let dY = by(az.caller)
875+ let bz = dY._1
876+ let bA = dY._2
877+ let bo = dY._3
878+ let bp = dY._4
879+ let bB = dY._5
880+ let dZ = bu(az.caller, bo, bp)
881+ let bm = dZ._1
882+ let bn = dZ._2
883+ let bk = dZ._3
884+ let bl = dZ._4
885+ let bO = dZ._5
886+ let ea = if ((size(cG) == 1))
881887 then {
882- let dZ = bi(cF[0])
883- if ((dZ != bB))
888+ let eb = bi(cH[0])
889+ if ((eb != bB))
884890 then throw(("Incorrect asset attached. Expected: " + toBase58String(bB)))
885- else $Tuple2(cE[0], dZ)
891+ else $Tuple2(cG[0], eb)
886892 }
887893 else $Tuple2(0, bB)
888- let aP = dY._1
889- let ck = dY._2
890- if ((size(cD) != 1))
894+ let aP = ea._1
895+ let ck = ea._2
896+ if ((size(cF) != 1))
891897 then throw("Wrong args size")
892- else if ((size(cE) > 1))
898+ else if ((size(cG) > 1))
893899 then throw("One attached payment expected")
894900 else if (if ((bm > bk))
895901 then true
896902 else (bn > bl))
897903 then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ bj(bk, bl, bm, bn, bz, bA)))
898904 else {
899- let ea = parseIntValue(valueOrElse(cD[0], "0"))
900- let eb = if ((ea > 0))
901- then invoke(ad, "withdrawShareTokensFromPool", [cC, toString(az.caller), ea], nil)
905+ let ec = parseIntValue(valueOrElse(cF[0], "0"))
906+ let ed = if ((ec > 0))
907+ then invoke(ad, "withdrawShareTokensFromPool", [cE, toString(az.caller), ec], nil)
902908 else 0
903- if ((eb == eb))
909+ if ((ed == ed))
904910 then {
905- let cP = (aP + ea)
906- let cR = fraction(cP, bm, bO)
907- let cS = fraction(cP, bn, bO)
908- let di = if (contains(ag, bz))
909- then invoke(az.caller, "stakeUnstake", [false, cR, bz], nil)
911+ let cR = (aP + ec)
912+ let cT = fraction(cR, bm, bO)
913+ let cU = fraction(cR, bn, bO)
914+ let dk = if (contains(ag, bz))
915+ then invoke(az.caller, "stakeUnstake", [false, cT, bz], nil)
910916 else 0
911- if ((di == di))
917+ if ((dk == dk))
912918 then {
913- let dj = if (contains(ag, bA))
914- then invoke(az.caller, "stakeUnstake", [false, cS, bA], nil)
919+ let dl = if (contains(ag, bA))
920+ then invoke(az.caller, "stakeUnstake", [false, cU, bA], nil)
915921 else 0
916- if ((dj == dj))
917- then $Tuple2([ScriptTransfer(az.caller, ea, bB)], $Tuple2([IntegerEntry(g, (bm - cR)), IntegerEntry(h, (bn - cS)), IntegerEntry(l, (bO - cP)), Burn(bB, cP), ScriptTransfer(bD, cR, bo), ScriptTransfer(bD, cS, bp)], nil))
922+ if ((dl == dl))
923+ then $Tuple2([ScriptTransfer(az.caller, ec, bB)], $Tuple2([IntegerEntry(g, (bm - cT)), IntegerEntry(h, (bn - cU)), IntegerEntry(l, (bO - cR)), Burn(bB, cR), ScriptTransfer(bD, cT, bo), ScriptTransfer(bD, cU, bp)], nil))
918924 else throw("Strict value is not equal to itself.")
919925 }
920926 else throw("Strict value is not equal to itself.")
926932
927933
928934 @Callable(az)
929-func withdrawOneToken (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
930- let bD = Address(cC)
931- let ec = if ((cD[0] == ""))
935+func withdrawOneToken (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
936+ let bD = Address(cE)
937+ let ee = if ((cF[0] == ""))
932938 then unit
933- else fromBase58String(cD[0])
934- let ed = by(az.caller)
935- let bz = ed._1
936- let bA = ed._2
937- let bo = ed._3
938- let bp = ed._4
939- let bB = ed._5
940- let ee = bu(az.caller, bo, bp)
941- let bm = ee._1
942- let bn = ee._2
943- let bk = ee._3
944- let bl = ee._4
945- let bO = ee._5
946- let ef = if ((size(cE) == 1))
939+ else fromBase58String(cF[0])
940+ let ef = by(az.caller)
941+ let bz = ef._1
942+ let bA = ef._2
943+ let bo = ef._3
944+ let bp = ef._4
945+ let bB = ef._5
946+ let eg = bu(az.caller, bo, bp)
947+ let bm = eg._1
948+ let bn = eg._2
949+ let bk = eg._3
950+ let bl = eg._4
951+ let bO = eg._5
952+ let eh = if ((size(cG) == 1))
947953 then {
948- let dZ = bi(cF[0])
949- if ((dZ != bB))
954+ let eb = bi(cH[0])
955+ if ((eb != bB))
950956 then throw(("Incorrect asset attached. Expected: " + toBase58String(bB)))
951- else $Tuple2(cE[0], dZ)
957+ else $Tuple2(cG[0], eb)
952958 }
953959 else $Tuple2(0, bB)
954- let aP = ef._1
955- let ck = ef._2
956- let eg = parseIntValue(cD[1])
957- if ((size(cD) != 3))
960+ let aP = eh._1
961+ let ck = eh._2
962+ let ei = parseIntValue(cF[1])
963+ if ((size(cF) != 3))
958964 then throw("Wrong args size")
959- else if ((size(cE) > 1))
965+ else if ((size(cG) > 1))
960966 then throw("One attached payment expected")
961967 else if ((ck != bB))
962968 then throw(("Incorrect asset attached. Expected: " + toBase58String(bB)))
963- else if (!(containsElement([bo, bp], ec)))
969+ else if (!(containsElement([bo, bp], ee)))
964970 then throw("Incorrect withdraw asset.")
965971 else if (if ((bm > bk))
966972 then true
967973 else (bn > bl))
968974 then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ bj(bk, bl, bm, bn, bz, bA)))
969975 else {
970- let ea = parseIntValue(valueOrElse(cD[2], "0"))
971- let eb = if ((ea > 0))
972- then invoke(ad, "withdrawShareTokensFromPool", [cC, toString(az.caller), ea], nil)
976+ let ec = parseIntValue(valueOrElse(cF[2], "0"))
977+ let ed = if ((ec > 0))
978+ then invoke(ad, "withdrawShareTokensFromPool", [cE, toString(az.caller), ec], nil)
973979 else 0
974- if ((eb == eb))
980+ if ((ed == ed))
975981 then {
976- let cP = (aP + ea)
977- let cR = fraction(cP, bm, bO)
978- let cS = fraction(cP, bn, bO)
979- let eh = bC(az.caller, az.originCaller)
980- let aT = eh._1
981- let bF = eh._2
982- let bG = eh._3
983- let ei = if ((ec == bo))
984- then aO(cS, eg, (bn - cS), (bm - cR), aT, bF, bG)
985- else aO(cR, eg, (bm - cR), (bn - cS), aT, bF, bG)
986- let aW = ei._1
987- let aX = ei._2
988- let aY = ei._3
989- let aZ = ei._4
990- let ej = if ((ec == bo))
982+ let cR = (aP + ec)
983+ let cT = fraction(cR, bm, bO)
984+ let cU = fraction(cR, bn, bO)
985+ let ej = bC(az.caller, az.originCaller)
986+ let aT = ej._1
987+ let bF = ej._2
988+ let bG = ej._3
989+ let ek = if ((ee == bo))
990+ then aO(cU, ei, (bn - cU), (bm - cT), aT, bF, bG)
991+ else aO(cT, ei, (bm - cT), (bn - cU), aT, bF, bG)
992+ let aW = ek._1
993+ let aX = ek._2
994+ let aY = ek._3
995+ let aZ = ek._4
996+ let el = if ((ee == bo))
991997 then {
992- let ek = if (contains(ag, bz))
993- then invoke(az.caller, "stakeUnstake", [false, (((cR + aX) + aY) + aZ), bz], nil)
998+ let em = if (contains(ag, bz))
999+ then invoke(az.caller, "stakeUnstake", [false, (((cT + aX) + aY) + aZ), bz], nil)
9941000 else 0
995- if ((ek == ek))
996- then $Tuple4(((((bm - cR) - aX) - aY) - aZ), bn, bo, [ScriptTransfer(bD, (cR + aX), bo)])
1001+ if ((em == em))
1002+ then $Tuple4(((((bm - cT) - aX) - aY) - aZ), bn, bo, [ScriptTransfer(bD, (cT + aX), bo)])
9971003 else throw("Strict value is not equal to itself.")
9981004 }
9991005 else {
1000- let ek = if (contains(ag, bA))
1001- then invoke(az.caller, "stakeUnstake", [false, (((cS + aX) + aY) + aZ), bA], nil)
1006+ let em = if (contains(ag, bA))
1007+ then invoke(az.caller, "stakeUnstake", [false, (((cU + aX) + aY) + aZ), bA], nil)
10021008 else 0
1003- if ((ek == ek))
1004- then $Tuple4(bm, ((((bn - cS) - aX) - aY) - aZ), bp, [ScriptTransfer(bD, (cS + aX), bp)])
1009+ if ((em == em))
1010+ then $Tuple4(bm, ((((bn - cU) - aX) - aY) - aZ), bp, [ScriptTransfer(bD, (cU + aX), bp)])
10051011 else throw("Strict value is not equal to itself.")
10061012 }
1007- let ct = ej._1
1008- let cu = ej._2
1009- let el = ej._3
1010- let em = ej._4
1011- $Tuple2([ScriptTransfer(az.caller, ea, bB)], $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO - cP)), Burn(bB, cP), ScriptTransfer(Z, aY, el), ScriptTransfer(aa, aZ, el)] ++ em), nil))
1013+ let ct = el._1
1014+ let cu = el._2
1015+ let en = el._3
1016+ let eo = el._4
1017+ $Tuple2([ScriptTransfer(az.caller, ec, bB)], $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO - cR)), Burn(bB, cR), ScriptTransfer(Z, aY, en), ScriptTransfer(aa, aZ, en)] ++ eo), nil))
10121018 }
10131019 else throw("Strict value is not equal to itself.")
10141020 }
10171023
10181024
10191025 @Callable(az)
1020-func takeIntoAccountExtraFunds (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
1021- let en = by(az.caller)
1022- let bz = en._1
1023- let bA = en._2
1024- let bo = en._3
1025- let bp = en._4
1026- let eo = if (if ((bo == ae))
1026+func takeIntoAccountExtraFunds (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
1027+ let ep = by(az.caller)
1028+ let bz = ep._1
1029+ let bA = ep._2
1030+ let bo = ep._3
1031+ let bp = ep._4
1032+ let eq = if (if ((bo == ae))
10271033 then true
10281034 else (bp == ae))
10291035 then invoke(az.caller, "claimNetrinoRewards", nil, nil)
10301036 else 0
1031- if ((eo == eo))
1037+ if ((eq == eq))
10321038 then {
1033- let ep = bu(az.caller, bo, bp)
1034- let bm = ep._1
1035- let bn = ep._2
1036- let bk = ep._3
1037- let bl = ep._4
1038- let eq = (bk - bm)
1039- let er = (bl - bn)
1040- if ((size(cD) != 0))
1039+ let er = bu(az.caller, bo, bp)
1040+ let bm = er._1
1041+ let bn = er._2
1042+ let bk = er._3
1043+ let bl = er._4
1044+ let es = (bk - bm)
1045+ let et = (bl - bn)
1046+ if ((size(cF) != 0))
10411047 then throw("Wrong args size")
10421048 else if ((Z != az.originCaller))
10431049 then throw("Only the wallet can call this function")
1044- else if (if ((0 > eq))
1050+ else if (if ((0 > es))
10451051 then true
1046- else (0 > er))
1052+ else (0 > et))
10471053 then aG("Enroll amount negative")
1048- else if (if ((eq == 0))
1049- then (er == 0)
1054+ else if (if ((es == 0))
1055+ then (et == 0)
10501056 else false)
10511057 then throw("No money to take")
10521058 else {
1053- let di = if (if (contains(ag, bz))
1054- then (eq > 0)
1059+ let dk = if (if (contains(ag, bz))
1060+ then (es > 0)
10551061 else false)
1056- then invoke(az.caller, "stakeUnstake", [true, eq, bz], nil)
1062+ then invoke(az.caller, "stakeUnstake", [true, es, bz], nil)
10571063 else 0
1058- if ((di == di))
1064+ if ((dk == dk))
10591065 then {
1060- let dj = if (if (contains(ag, bA))
1061- then (er > 0)
1066+ let dl = if (if (contains(ag, bA))
1067+ then (et > 0)
10621068 else false)
1063- then invoke(az.caller, "stakeUnstake", [true, er, bA], nil)
1069+ then invoke(az.caller, "stakeUnstake", [true, et, bA], nil)
10641070 else 0
1065- if ((dj == dj))
1066- then $Tuple2(nil, $Tuple2([IntegerEntry(g, (bm + eq)), IntegerEntry(h, (bn + er))], nil))
1071+ if ((dl == dl))
1072+ then $Tuple2(nil, $Tuple2([IntegerEntry(g, (bm + es)), IntegerEntry(h, (bn + et))], nil))
10671073 else throw("Strict value is not equal to itself.")
10681074 }
10691075 else throw("Strict value is not equal to itself.")
10731079 }))
10741080
10751081
1076-@Verifier(es)
1077-func et () = {
1078- let eu = {
1079- let ev = if (sigVerify(es.bodyBytes, es.proofs[0], V))
1082+@Verifier(eu)
1083+func ev () = {
1084+ let ew = {
1085+ let ex = if (sigVerify(eu.bodyBytes, eu.proofs[0], V))
10801086 then 1
10811087 else 0
1082- let ew = if (sigVerify(es.bodyBytes, es.proofs[1], W))
1088+ let ey = if (sigVerify(eu.bodyBytes, eu.proofs[1], W))
10831089 then 1
10841090 else 0
1085- let ex = if (sigVerify(es.bodyBytes, es.proofs[2], X))
1091+ let ez = if (sigVerify(eu.bodyBytes, eu.proofs[2], X))
10861092 then 1
10871093 else 0
1088- (((ev + ew) + ex) >= 2)
1094+ (((ex + ey) + ez) >= 2)
10891095 }
1090- eu
1096+ ew
10911097 }
10921098
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "1.0.0"
55
66 let b = "version"
77
88 let c = "active"
99
1010 let d = "deprecated_"
1111
1212 let e = "A_asset_id"
1313
1414 let f = "B_asset_id"
1515
1616 let g = "A_asset_balance"
1717
1818 let h = "B_asset_balance"
1919
2020 let i = "A_asset_init"
2121
2222 let j = "B_asset_init"
2323
2424 let k = "share_asset_id"
2525
2626 let l = "share_asset_supply"
2727
2828 let m = "commission"
2929
3030 let n = "shutdown_cause"
3131
3232 let o = "first_harvest"
3333
3434 let p = "first_harvest_height"
3535
3636 let q = "share_limit_on_first_harvest"
3737
3838 let r = "base_period"
3939
4040 let s = "period_length"
4141
4242 let t = "start_height"
4343
4444 let u = "staking_usdnnsbt_address"
4545
4646 let v = "staking_eurn_address"
4747
4848 let w = "leasing_amount"
4949
5050 let x = "usdn_asset_id"
5151
5252 let y = "eurn_asset_id"
5353
5454 let z = "staking_assets"
5555
5656 let A = "active_all_contracts"
5757
5858 let B = "discounts"
5959
6060 let C = "discount_values"
6161
6262 let D = "_GSwop_amount"
6363
6464 let E = "_SWOP_amount"
6565
6666 let F = "pool_"
6767
6868 let G = "admin_pub_1"
6969
7070 let H = "admin_pub_2"
7171
7272 let I = "admin_pub_3"
7373
7474 let J = "admin_invoke_pub"
7575
7676 let K = "money_box_address"
7777
7878 let L = "team_box_address"
7979
8080 let M = "voting_address"
8181
8282 let N = "governance_address"
8383
8484 let O = "farming_address"
8585
86-let P = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
86+let P = Address(base58'3PEbqViERCoKnmcSULh6n2aiMvUdSQdCsom')
8787
8888 func Q (R) = {
8989 let S = getString(P, R)
9090 if ($isInstanceOf(S, "String"))
9191 then {
9292 let T = S
9393 fromBase58String(T)
9494 }
9595 else {
9696 let U = S
9797 throw((R + "is empty"))
9898 }
9999 }
100100
101101
102102 let V = Q(G)
103103
104104 let W = Q(H)
105105
106106 let X = Q(I)
107107
108108 let Y = Q(J)
109109
110110 let Z = Address(Q(K))
111111
112112 let aa = Address(Q(L))
113113
114114 let ab = Address(Q(M))
115115
116116 let ac = Address(Q(N))
117117
118118 let ad = Address(Q(O))
119119
120120 let ae = Q(x)
121121
122122 let af = Q(y)
123123
124124 let ag = getStringValue(P, z)
125125
126126 let ah = Address(Q(u))
127127
128128 let ai = Address(Q(v))
129129
130130 let aj = valueOrErrorMessage(getInteger(ab, r), "Empty kBasePeriod")
131131
132132 let ak = valueOrErrorMessage(getInteger(ab, t), "Empty kStartHeight")
133133
134134 let al = valueOrErrorMessage(getInteger(ab, s), "Empty kPeriodLength")
135135
136136 let am = ((aj + ((height - ak) / al)) + 3)
137137
138138 let an = getBooleanValue(P, A)
139139
140140 let ao = 1000000
141141
142142 let ap = 100000000
143143
144144 let aq = toBigInt(10000000000000000)
145145
146146 func ar (as,at) = {
147147 let S = as
148148 if ($isInstanceOf(S, "ByteVector"))
149149 then {
150150 let au = S
151151 assetBalance(at, au)
152152 }
153153 else if ($isInstanceOf(S, "Unit"))
154154 then {
155155 let av = S
156156 wavesBalance(at).available
157157 }
158158 else throw("Match error")
159159 }
160160
161161
162162 func aw (as,at) = {
163163 let ax = {
164164 let S = as
165165 if ($isInstanceOf(S, "ByteVector"))
166166 then {
167167 let ay = S
168168 if ((ay == ae))
169169 then getInteger(ah, ((("rpd_balance_" + toBase58String(ay)) + "_") + toString(at)))
170170 else if ((ay == af))
171171 then getInteger(ai, ((("%s%s%s__stakingBalance__" + toBase58String(ay)) + "__") + toString(at)))
172172 else 0
173173 }
174174 else if ($isInstanceOf(S, "Unit"))
175175 then valueOrElse(getInteger(at, w), 0)
176176 else throw("Match error")
177177 }
178178 let S = ax
179179 if ($isInstanceOf(S, "Int"))
180180 then {
181181 let az = S
182182 az
183183 }
184184 else 0
185185 }
186186
187187
188188 func aA (as) = {
189189 let S = as
190190 if (if ($isInstanceOf(S, "String"))
191191 then true
192192 else $isInstanceOf(S, "ByteVector"))
193193 then {
194194 let au = S
195195 let aB = {
196196 let aC = au
197197 if ($isInstanceOf(aC, "ByteVector"))
198198 then {
199199 let ay = aC
200200 $Tuple2(toBase58String(ay), ay)
201201 }
202202 else if ($isInstanceOf(aC, "String"))
203203 then {
204204 let ay = aC
205205 $Tuple2(ay, fromBase58String(ay))
206206 }
207207 else throw("Match error")
208208 }
209209 let aD = aB._1
210210 let aE = aB._2
211211 let aF = valueOrErrorMessage(assetInfo(aE), (("Asset " + aD) + " doesn't exist"))
212212 $Tuple3(aD, aF.name, aF.decimals)
213213 }
214214 else if ($isInstanceOf(S, "Unit"))
215215 then {
216216 let av = S
217217 $Tuple3("WAVES", "WAVES", 8)
218218 }
219219 else throw("Match error")
220220 }
221221
222222
223223 func aG (aH) = [BooleanEntry(c, false), StringEntry(n, aH)]
224224
225225
226226 func aI (aJ) = {
227227 let aK = valueOrElse(getInteger(ac, (toString(aJ) + E)), 0)
228228 let aL = valueOrElse(getInteger(ac, (toString(aJ) + D)), aK)
229229 let aM = split(getStringValue(P, C), ",")
230230 let aN = split(getStringValue(P, B), ",")
231231 if (if ((aL >= parseIntValue(aM[0])))
232232 then (parseIntValue(aM[1]) > aL)
233233 else false)
234234 then (ao - parseIntValue(aN[0]))
235235 else if (if ((aL >= parseIntValue(aM[1])))
236236 then (parseIntValue(aM[2]) > aL)
237237 else false)
238238 then (ao - parseIntValue(aN[1]))
239239 else if (if ((aL >= parseIntValue(aM[2])))
240240 then (parseIntValue(aM[3]) > aL)
241241 else false)
242242 then (ao - parseIntValue(aN[2]))
243243 else if (if ((aL >= parseIntValue(aM[3])))
244244 then (parseIntValue(aM[4]) > aL)
245245 else false)
246246 then (ao - parseIntValue(aN[3]))
247247 else if ((aL >= parseIntValue(aM[4])))
248248 then (ao - parseIntValue(aN[4]))
249249 else ao
250250 }
251251
252252
253253 func aO (aP,aQ,aR,aS,aT,aU,aV) = {
254254 let aW = fraction(aS, aP, (aP + aR))
255255 let aX = fraction(aW, (ao - aT), ao)
256256 let aY = fraction(aW, aU, ao)
257257 let aZ = fraction(aW, aV, ao)
258258 if ((aQ > aX))
259259 then throw(((("Calculated amount to receive " + toString(aX)) + " is less than specified minimum ") + toString(aQ)))
260260 else $Tuple4(aW, aX, aY, aZ)
261261 }
262262
263263
264264 func ba (aP,bb,aT) = {
265265 let bc = (ao - aT)
266266 let bd = fraction(aT, 55, 100)
267267 let be = (ap + fraction((bc * bd), ap, (ao * ao)))
268268 let bf = ((((bb + fraction(bb, bc, ao)) + fraction(aP, bc, ao)) - aP) - fraction(aP, (bc * bd), (ao * ao)))
269269 let bg = (-(toBigInt(bb)) * toBigInt(aP))
270270 let bh = ((toBigInt(bf) * toBigInt(bf)) - fraction((toBigInt(4) * bg), toBigInt(be), toBigInt(ap)))
271271 toInt(fraction((-(toBigInt(bf)) + sqrtBigInt(bh, 0, 0, DOWN)), toBigInt(ap), toBigInt((2 * be))))
272272 }
273273
274274
275275 func bi (as) = if ((as == base58''))
276276 then unit
277277 else as
278278
279279
280280 func bj (bk,bl,bm,bn,bo,bp) = aG(((((((((((((((("Suspicious state. Actual balances: " + toString(bk)) + " ") + bo) + ", ") + toString(bl)) + " ") + bp) + ". State: ") + toString(bm)) + " ") + bo) + ", ") + toString(bn)) + " ") + bp))
281281
282282
283283 func bq () = if (an)
284284 then unit
285285 else throw("DApp is inactive at this moment")
286286
287287
288288 func br (bs) = if (isDefined(getString(P, (F + bs))))
289289 then unit
290290 else throw("DApp is not registered pool")
291291
292292
293293 func bt (bs) = if (!(valueOrElse(getBoolean(P, (d + bs)), false)))
294294 then unit
295295 else throw("Pool is deprecated. Only withdraw action allowed.")
296296
297297
298298 func bu (at,bo,bp) = {
299299 let bm = getIntegerValue(at, g)
300300 let bn = getIntegerValue(at, h)
301301 let bv = aw(bo, at)
302302 let bw = aw(bp, at)
303303 let bk = (ar(bo, at) + bv)
304304 let bl = (ar(bp, at) + bw)
305305 let bx = getIntegerValue(at, l)
306306 $Tuple5(bm, bn, bk, bl, bx)
307307 }
308308
309309
310310 func by (at) = {
311311 let bz = getStringValue(at, e)
312312 let bA = getStringValue(at, f)
313313 let bo = if ((bz == "WAVES"))
314314 then unit
315315 else fromBase58String(bz)
316316 let bp = if ((bA == "WAVES"))
317317 then unit
318318 else fromBase58String(bA)
319319 let bB = fromBase58String(getStringValue(at, k))
320320 $Tuple5(bz, bA, bo, bp, bB)
321321 }
322322
323323
324324 func bC (at,bD) = {
325325 let bE = aI(bD)
326326 let aT = fraction(getIntegerValue(at, m), bE, ao, CEILING)
327327 let bF = fraction(aT, 35, 100)
328328 let bG = fraction(aT, 10, 100)
329329 $Tuple3(aT, bF, bG)
330330 }
331331
332332
333333 func bH (bI,bJ,bK,bL,bM,bN,bO) = {
334334 let bP = aA(bK)
335335 let bQ = bP._1
336336 let bR = bP._2
337337 let bS = bP._3
338338 let bT = aA(bL)
339339 let bU = bT._1
340340 let bV = bT._2
341341 let bW = bT._3
342342 let bX = ((bM + bN) == 0)
343343 let bY = if (bX)
344344 then $Tuple5(bI, bJ, 0, bK, toBigInt(1))
345345 else {
346346 let bZ = fraction(aq, toBigInt(bI), toBigInt(bM))
347347 let ca = fraction(aq, toBigInt(bJ), toBigInt(bN))
348348 if ((ca > bZ))
349349 then {
350350 let cb = fraction(bI, bN, bM)
351351 $Tuple5(bI, cb, (bJ - cb), bL, bZ)
352352 }
353353 else {
354354 let cb = fraction(bJ, bM, bN)
355355 $Tuple5(cb, bJ, (bI - cb), bK, ca)
356356 }
357357 }
358358 let cc = bY._1
359359 let cd = bY._2
360360 let ce = bY._3
361361 let cf = bY._4
362362 let cg = bY._5
363363 let ch = if (bX)
364364 then {
365365 let ci = ((bS + bW) / 2)
366366 fraction(pow(cc, bS, 5, 1, bS, DOWN), pow(cd, bW, 5, 1, bW, DOWN), pow(10, 0, ci, 0, 0, DOWN))
367367 }
368368 else toInt(fraction(cg, toBigInt(bO), aq))
369369 $Tuple5(ch, ce, cf, cc, cd)
370370 }
371371
372372
373373 func cj (aP,ck,ay,cl,bM,bN,cm,aT,bF,bG,cn) = if ((ck == ay))
374374 then {
375375 let co = ba(aP, bM, aT)
376376 let cp = aO(co, cn, bM, bN, aT, bF, bG)
377377 let aW = cp._1
378378 let aX = cp._2
379379 let aY = cp._3
380380 let cq = cp._4
381381 let cr = (bM + co)
382382 let cs = (((bN + aW) - aY) - cq)
383383 let ct = (bM + aP)
384384 let cu = ((bN - aY) - cq)
385385 let bZ = fraction(toBigInt((aP - co)), aq, toBigInt(cr))
386386 let ca = fraction(toBigInt(aX), aq, toBigInt(cs))
387387 let ch = toInt(fraction(min([bZ, ca]), toBigInt(cm), aq))
388- $Tuple6(ch, ct, cu, aY, cq, cl)
388+ let cv = toInt(fraction(fraction(toBigInt(aP), aq, toBigInt(bM)), toBigInt(cm), aq))
389+ let cw = fraction((ch - cv), ap, cv)
390+ $Tuple7(ch, ct, cu, aY, cq, cl, cw)
389391 }
390392 else {
391393 let co = ba(aP, bN, aT)
392- let cv = aO(co, cn, bN, bM, aT, bF, bG)
393- let aW = cv._1
394- let aX = cv._2
395- let aY = cv._3
396- let cq = cv._4
394+ let cx = aO(co, cn, bN, bM, aT, bF, bG)
395+ let aW = cx._1
396+ let aX = cx._2
397+ let aY = cx._3
398+ let cq = cx._4
397399 let cr = (((bM + aW) - aY) - cq)
398400 let cs = (bN + co)
399401 let ct = ((bM - aY) - cq)
400402 let cu = (bN + aP)
401403 let bZ = fraction(toBigInt(aX), aq, toBigInt(cr))
402404 let ca = fraction(toBigInt((aP - co)), aq, toBigInt(cs))
403405 let ch = toInt(fraction(min([bZ, ca]), toBigInt(cm), aq))
404- $Tuple6(ch, ct, cu, aY, cq, ay)
406+ let cv = toInt(fraction(fraction(toBigInt(aP), aq, toBigInt(bN)), toBigInt(cm), aq))
407+ let cw = fraction((ch - cv), ap, cv)
408+ $Tuple7(ch, ct, cu, aY, cq, ay, cw)
405409 }
406410
407411
408-func cw (bI,bJ,bK,bL,bM,bN,cm,aT,bF,bG,cn) = {
409- let cx = bH(bI, bJ, bK, bL, bM, bN, cm)
410- let cy = cx._1
411- let ce = cx._2
412- let cf = cx._3
413- let cc = cx._4
414- let cd = cx._5
412+func cy (bI,bJ,bK,bL,bM,bN,cm,aT,bF,bG,cn) = {
413+ let cz = bH(bI, bJ, bK, bL, bM, bN, cm)
414+ let cA = cz._1
415+ let ce = cz._2
416+ let cf = cz._3
417+ let cc = cz._4
418+ let cd = cz._5
415419 if ((ce > 0))
416420 then {
417- let cz = cj(ce, cf, bK, bL, (bM + cc), (bN + cd), cm, aT, bF, bG, cn)
418- let cA = cz._1
419- let ct = cz._2
420- let cu = cz._3
421- let aY = cz._4
422- let cq = cz._5
423- let cB = cz._6
424- $Tuple6((cy + cA), ct, cu, aY, cq, cB)
421+ let cB = cj(ce, cf, bK, bL, (bM + cc), (bN + cd), cm, aT, bF, bG, cn)
422+ let cC = cB._1
423+ let ct = cB._2
424+ let cu = cB._3
425+ let aY = cB._4
426+ let cq = cB._5
427+ let cD = cB._6
428+ let cw = cB._7
429+ $Tuple7((cA + cC), cw, ct, cu, aY, cq, cD)
425430 }
426- else $Tuple6(cy, (bM + cc), (bN + cd), 0, 0, unit)
431+ else $Tuple7(cA, 0, (bM + cc), (bN + cd), 0, 0, unit)
427432 }
428433
429434
430435 @Callable(az)
431-func calcLPReplenishDiffPropREADONLY (cC,cD,cE,cF) = {
432- let cG = by(az.caller)
433- let bz = cG._1
434- let bA = cG._2
435- let bo = cG._3
436- let bp = cG._4
437- let bB = cG._5
438- let cH = bu(az.caller, bo, bp)
439- let bM = cH._1
440- let bN = cH._2
441- let cI = cH._3
442- let cJ = cH._4
443- let cm = cH._5
444- let bI = parseIntValue(cD[0])
445- let bJ = parseIntValue(cD[1])
446- let cn = parseIntValue(cD[2])
447- let cK = bC(az.caller, az.originCaller)
448- let aT = cK._1
449- let bF = cK._2
450- let bG = cK._3
451- let cL = cw(bI, bJ, bo, bp, bM, bN, cm, aT, bF, bG, cn)
452- let cM = cL._1
453- let ct = cL._2
454- let cu = cL._3
455- let aY = cL._4
456- let cq = cL._5
457- let ay = cL._6
458- $Tuple2(nil, $Tuple2(nil, [cM, ct, cu, aY, cq, ay]))
436+func calcLPReplenishDiffPropREADONLY (cE,cF,cG,cH) = {
437+ let cI = by(az.caller)
438+ let bz = cI._1
439+ let bA = cI._2
440+ let bo = cI._3
441+ let bp = cI._4
442+ let bB = cI._5
443+ let cJ = bu(az.caller, bo, bp)
444+ let bM = cJ._1
445+ let bN = cJ._2
446+ let cK = cJ._3
447+ let cL = cJ._4
448+ let cm = cJ._5
449+ let bI = parseIntValue(cF[0])
450+ let bJ = parseIntValue(cF[1])
451+ let cn = parseIntValue(cF[2])
452+ let cM = bC(az.caller, az.originCaller)
453+ let aT = cM._1
454+ let bF = cM._2
455+ let bG = cM._3
456+ let cN = cy(bI, bJ, bo, bp, bM, bN, cm, aT, bF, bG, cn)
457+ let cO = cN._1
458+ let cw = cN._2
459+ let ct = cN._3
460+ let cu = cN._4
461+ let aY = cN._5
462+ let cq = cN._6
463+ let ay = cN._7
464+ $Tuple2(nil, $Tuple2(nil, [cO, cw, ct, cu, aY, cq, ay]))
459465 }
460466
461467
462468
463469 @Callable(az)
464-func withdrawREADONLY (cC,cD,cE,cF) = {
465- let cN = by(az.caller)
466- let bz = cN._1
467- let bA = cN._2
468- let bo = cN._3
469- let bp = cN._4
470- let bB = cN._5
471- let cO = bu(az.caller, bo, bp)
472- let bm = cO._1
473- let bn = cO._2
474- let bk = cO._3
475- let bl = cO._4
476- let bO = cO._5
477- let cP = parseIntValue(cD[0])
478- let cQ = if ((size(cD) == 3))
479- then $Tuple2(parseIntValue(cD[1]), parseIntValue(cD[2]))
470+func withdrawREADONLY (cE,cF,cG,cH) = {
471+ let cP = by(az.caller)
472+ let bz = cP._1
473+ let bA = cP._2
474+ let bo = cP._3
475+ let bp = cP._4
476+ let bB = cP._5
477+ let cQ = bu(az.caller, bo, bp)
478+ let bm = cQ._1
479+ let bn = cQ._2
480+ let bk = cQ._3
481+ let bl = cQ._4
482+ let bO = cQ._5
483+ let cR = parseIntValue(cF[0])
484+ let cS = if ((size(cF) == 3))
485+ then $Tuple2(parseIntValue(cF[1]), parseIntValue(cF[2]))
480486 else $Tuple2(bm, bn)
481- let bM = cQ._1
482- let bN = cQ._2
483- let cR = fraction(cP, bM, bO)
484- let cS = fraction(cP, bN, bO)
485- $Tuple2(nil, $Tuple2(nil, [cR, cS]))
487+ let bM = cS._1
488+ let bN = cS._2
489+ let cT = fraction(cR, bM, bO)
490+ let cU = fraction(cR, bN, bO)
491+ $Tuple2(nil, $Tuple2(nil, [cT, cU]))
486492 }
487493
488494
489495
490496 @Callable(az)
491-func init (cC,cD,cE,cF) = {
492- let bD = Address(cC)
493- let cT = $Tuple2(cE[0], bi(cF[0]))
494- let cc = cT._1
495- let cU = cT._2
496- let cV = $Tuple2(cE[1], bi(cF[1]))
497- let cd = cV._1
497+func init (cE,cF,cG,cH) = {
498+ let bD = Address(cE)
499+ let cV = $Tuple2(cG[0], bi(cH[0]))
500+ let cc = cV._1
498501 let cW = cV._2
502+ let cX = $Tuple2(cG[1], bi(cH[1]))
503+ let cd = cX._1
504+ let cY = cX._2
499505 if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
500506 then throw("Only admin can call this function")
501- else if ((size(cD) != 1))
507+ else if ((size(cF) != 1))
502508 then throw("Wrong args size")
503509 else if (isDefined(getBoolean(bD, c)))
504510 then throw("DApp is already active")
505- else if ((cU == cW))
511+ else if ((cW == cY))
506512 then throw("Assets must be different")
507513 else {
508- let cX = aA(cU)
509- let bQ = cX._1
510- let bR = cX._2
511- let bS = cX._3
512- let cY = aA(cW)
513- let bU = cY._1
514- let bV = cY._2
515- let bW = cY._3
516- let cZ = (cD[0] == "true")
517- let da = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
518- let db = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
514+ let cZ = aA(cW)
515+ let bQ = cZ._1
516+ let bR = cZ._2
517+ let bS = cZ._3
518+ let da = aA(cY)
519+ let bU = da._1
520+ let bV = da._2
521+ let bW = da._3
522+ let db = (cF[0] == "true")
523+ let dc = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
524+ let dd = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
519525 let ci = ((bS + bW) / 2)
520- let dc = pow(cc, bS, 5, 1, bS, DOWN)
521- let dd = pow(cd, bW, 5, 1, bW, DOWN)
522- let de = pow(10, 0, ci, 0, 0, DOWN)
523- let df = fraction(dc, dd, de)
524- let dg = Issue(da, db, df, ci, true)
525- let dh = calculateAssetId(dg)
526- let di = if (contains(ag, bQ))
526+ let de = pow(cc, bS, 5, 1, bS, DOWN)
527+ let df = pow(cd, bW, 5, 1, bW, DOWN)
528+ let dg = pow(10, 0, ci, 0, 0, DOWN)
529+ let dh = fraction(de, df, dg)
530+ let di = Issue(dc, dd, dh, ci, true)
531+ let dj = calculateAssetId(di)
532+ let dk = if (contains(ag, bQ))
527533 then invoke(az.caller, "stakeUnstake", [true, cc, bQ], nil)
528534 else 0
529- if ((di == di))
535+ if ((dk == dk))
530536 then {
531- let dj = if (contains(ag, bU))
537+ let dl = if (contains(ag, bU))
532538 then invoke(az.caller, "stakeUnstake", [true, cd, bU], nil)
533539 else 0
534- if ((dj == dj))
540+ if ((dl == dl))
535541 then {
536- let dk = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(g, cc), IntegerEntry(h, cd), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), dg, StringEntry(k, toBase58String(dh)), IntegerEntry(l, df), ScriptTransfer(bD, df, dh)]
537- if (cZ)
538- then $Tuple2(nil, $Tuple2((dk ++ [BooleanEntry(o, cZ), IntegerEntry(p, (ak + (am * al)))]), nil))
539- else $Tuple2(nil, $Tuple2(dk, nil))
542+ let dm = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(g, cc), IntegerEntry(h, cd), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), di, StringEntry(k, toBase58String(dj)), IntegerEntry(l, dh), ScriptTransfer(bD, dh, dj)]
543+ if (db)
544+ then $Tuple2(nil, $Tuple2((dm ++ [BooleanEntry(o, db), IntegerEntry(p, (ak + (am * al)))]), nil))
545+ else $Tuple2(nil, $Tuple2(dm, nil))
540546 }
541547 else throw("Strict value is not equal to itself.")
542548 }
543549 else throw("Strict value is not equal to itself.")
544550 }
545551 }
546552
547553
548554
549555 @Callable(az)
550-func initWithInitRatio (cC,cD,cE,cF) = {
551- let bD = Address(cC)
552- let dl = $Tuple5(parseIntValue(cD[0]), parseIntValue(cD[1]), cD[2], cD[3], (cD[4] == "true"))
553- let dm = dl._1
554- let dn = dl._2
555- let do = dl._3
556- let dp = dl._4
557- let cZ = dl._5
556+func initWithInitRatio (cE,cF,cG,cH) = {
557+ let bD = Address(cE)
558+ let dn = $Tuple5(parseIntValue(cF[0]), parseIntValue(cF[1]), cF[2], cF[3], (cF[4] == "true"))
559+ let do = dn._1
560+ let dp = dn._2
561+ let dq = dn._3
562+ let dr = dn._4
563+ let db = dn._5
558564 if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
559565 then throw("Only admin can call this function")
560- else if ((size(cD) != 5))
566+ else if ((size(cF) != 5))
561567 then throw("Wrong args size")
562568 else if (isDefined(getBoolean(bD, c)))
563569 then throw("DApp is already active")
564- else if ((do == dp))
570+ else if ((dq == dr))
565571 then throw("Assets must be different")
566572 else {
567- let dq = aA(do)
568- let bQ = dq._1
569- let bR = dq._2
570- let bS = dq._3
571- let dr = aA(dp)
572- let bU = dr._1
573- let bV = dr._2
574- let bW = dr._3
575- let da = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
576- let db = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
573+ let ds = aA(dq)
574+ let bQ = ds._1
575+ let bR = ds._2
576+ let bS = ds._3
577+ let dt = aA(dr)
578+ let bU = dt._1
579+ let bV = dt._2
580+ let bW = dt._3
581+ let dc = ((("s" + take(bR, 7)) + "_") + take(bV, 7))
582+ let dd = ((((("ShareToken of SwopFi protocol for " + bR) + " and ") + bV) + " at address ") + toString(this))
577583 let ci = ((bS + bW) / 2)
578- let df = 0
579- let dg = Issue(da, db, df, ci, true)
580- let dh = calculateAssetId(dg)
581- let dk = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(i, dm), IntegerEntry(j, dn), IntegerEntry(g, 0), IntegerEntry(h, 0), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), dg, StringEntry(k, toBase58String(dh)), IntegerEntry(l, df)]
582- if (cZ)
583- then $Tuple2(nil, $Tuple2((dk ++ [BooleanEntry(o, cZ), IntegerEntry(p, (ak + (am * al)))]), nil))
584- else $Tuple2(nil, $Tuple2(dk, nil))
584+ let dh = 0
585+ let di = Issue(dc, dd, dh, ci, true)
586+ let dj = calculateAssetId(di)
587+ let dm = [StringEntry(b, a), BooleanEntry(c, true), StringEntry(e, bQ), StringEntry(f, bU), IntegerEntry(i, do), IntegerEntry(j, dp), IntegerEntry(g, 0), IntegerEntry(h, 0), IntegerEntry(m, getIntegerValue(P, "base_fee_cpmm")), di, StringEntry(k, toBase58String(dj)), IntegerEntry(l, dh)]
588+ if (db)
589+ then $Tuple2(nil, $Tuple2((dm ++ [BooleanEntry(o, db), IntegerEntry(p, (ak + (am * al)))]), nil))
590+ else $Tuple2(nil, $Tuple2(dm, nil))
585591 }
586592 }
587593
588594
589595
590596 @Callable(az)
591-func keepLimitForFirstHarvest (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
597+func keepLimitForFirstHarvest (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), if (!(containsElement([V, W, X, Y], az.originCallerPublicKey)))
592598 then throw("Only admin can call this function")
593- else if ((size(cD) != 1))
599+ else if ((size(cF) != 1))
594600 then throw("Wrong args size")
595601 else {
596- let ds = parseIntValue(cD[0])
597- $Tuple2(nil, $Tuple2([IntegerEntry(q, ds)], nil))
602+ let du = parseIntValue(cF[0])
603+ $Tuple2(nil, $Tuple2([IntegerEntry(q, du)], nil))
598604 }))
599605
600606
601607
602608 @Callable(az)
603-func exchange (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
604- let bD = Address(cC)
605- let dt = $Tuple2(cE[0], bi(cF[0]))
606- let aP = dt._1
607- let ck = dt._2
608- let aQ = parseIntValue(cD[0])
609- let du = by(az.caller)
610- let bz = du._1
611- let bA = du._2
612- let bo = du._3
613- let bp = du._4
614- let dv = bu(az.caller, bo, bp)
615- let bm = dv._1
616- let bn = dv._2
617- let bk = dv._3
618- let bl = dv._4
619- if ((size(cD) != 1))
609+func exchange (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
610+ let bD = Address(cE)
611+ let dv = $Tuple2(cG[0], bi(cH[0]))
612+ let aP = dv._1
613+ let ck = dv._2
614+ let aQ = parseIntValue(cF[0])
615+ let dw = by(az.caller)
616+ let bz = dw._1
617+ let bA = dw._2
618+ let bo = dw._3
619+ let bp = dw._4
620+ let dx = bu(az.caller, bo, bp)
621+ let bm = dx._1
622+ let bn = dx._2
623+ let bk = dx._3
624+ let bl = dx._4
625+ if ((size(cF) != 1))
620626 then throw("Wrong args size")
621627 else if (if ((bm == 0))
622628 then true
623629 else (bn == 0))
624630 then throw("Can't exchange with zero balance")
625631 else if ((0 >= aQ))
626632 then throw(("Minimal amount to receive must be positive. Actual: " + toString(aQ)))
627- else if ((size(cE) != 1))
633+ else if ((size(cG) != 1))
628634 then throw("One attached payment expected")
629635 else if (!(containsElement([bo, bp], ck)))
630636 then throw(((("Incorrect asset attached. Expected: " + bz) + " or ") + bA))
631637 else if (if ((bm > bk))
632638 then true
633639 else (bn > bl))
634640 then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ bj(bk, bl, bm, bn, bz, bA)))
635641 else {
636- let dw = bC(az.caller, az.originCaller)
637- let aT = dw._1
638- let bF = dw._2
639- let bG = dw._3
640- let dx = if ((ck == bo))
642+ let dy = bC(az.caller, az.originCaller)
643+ let aT = dy._1
644+ let bF = dy._2
645+ let bG = dy._3
646+ let dz = if ((ck == bo))
641647 then aO(aP, aQ, bm, bn, aT, bF, bG)
642648 else aO(aP, aQ, bn, bm, aT, bF, bG)
643- let aW = dx._1
644- let aX = dx._2
645- let aY = dx._3
646- let aZ = dx._4
647- let dy = if ((ck == bo))
649+ let aW = dz._1
650+ let aX = dz._2
651+ let aY = dz._3
652+ let aZ = dz._4
653+ let dA = if ((ck == bo))
648654 then $Tuple3((bm + aP), (((bn - aX) - aY) - aZ), bp)
649655 else $Tuple3((((bm - aX) - aY) - aZ), (bn + aP), bo)
650- let ct = dy._1
651- let cu = dy._2
652- let dz = dy._3
653- let dA = if ((ck == bo))
656+ let ct = dA._1
657+ let cu = dA._2
658+ let dB = dA._3
659+ let dC = if ((ck == bo))
654660 then $Tuple2(aP, ((aX + aY) + aZ))
655661 else $Tuple2(((aX + aY) + aZ), aP)
656- let dB = dA._1
657- let dC = dA._2
658- let di = if (contains(ag, bz))
659- then invoke(az.caller, "stakeUnstake", [(ck == bo), dB, bz], nil)
662+ let dD = dC._1
663+ let dE = dC._2
664+ let dk = if (contains(ag, bz))
665+ then invoke(az.caller, "stakeUnstake", [(ck == bo), dD, bz], nil)
660666 else 0
661- if ((di == di))
667+ if ((dk == dk))
662668 then {
663- let dj = if (contains(ag, bA))
664- then invoke(az.caller, "stakeUnstake", [(ck == bp), dC, bA], nil)
669+ let dl = if (contains(ag, bA))
670+ then invoke(az.caller, "stakeUnstake", [(ck == bp), dE, bA], nil)
665671 else 0
666- if ((dj == dj))
667- then $Tuple2(nil, $Tuple2([IntegerEntry(g, ct), IntegerEntry(h, cu), ScriptTransfer(bD, aX, dz), ScriptTransfer(Z, aY, dz), ScriptTransfer(aa, aZ, dz)], [aX, dz]))
672+ if ((dl == dl))
673+ then $Tuple2(nil, $Tuple2([IntegerEntry(g, ct), IntegerEntry(h, cu), ScriptTransfer(bD, aX, dB), ScriptTransfer(Z, aY, dB), ScriptTransfer(aa, aZ, dB)], [aX, dB]))
668674 else throw("Strict value is not equal to itself.")
669675 }
670676 else throw("Strict value is not equal to itself.")
671677 }
672678 })))
673679
674680
675681
676682 @Callable(az)
677-func replenishWithTwoTokens (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
678- let bD = Address(cC)
679- let cU = bi(cF[0])
680- let cW = bi(cF[1])
681- let dD = (cD[0] == "true")
682- let dE = parseIntValue(cD[1])
683- let dF = by(az.caller)
684- let bz = dF._1
685- let bA = dF._2
686- let bo = dF._3
687- let bp = dF._4
688- let bB = dF._5
689- let dG = bu(az.caller, bo, bp)
690- let bm = dG._1
691- let bn = dG._2
692- let bk = dG._3
693- let bl = dG._4
694- let bO = dG._5
695- if ((size(cD) != 2))
683+func replenishWithTwoTokens (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
684+ let bD = Address(cE)
685+ let cW = bi(cH[0])
686+ let cY = bi(cH[1])
687+ let dF = (cF[0] == "true")
688+ let dG = parseIntValue(cF[1])
689+ let dH = by(az.caller)
690+ let bz = dH._1
691+ let bA = dH._2
692+ let bo = dH._3
693+ let bp = dH._4
694+ let bB = dH._5
695+ let dI = bu(az.caller, bo, bp)
696+ let bm = dI._1
697+ let bn = dI._2
698+ let bk = dI._3
699+ let bl = dI._4
700+ let bO = dI._5
701+ if ((size(cF) != 2))
696702 then throw("Wrong args size")
697- else if (if ((size(cE) != 2))
698- then (size(cE) != 3)
703+ else if (if ((size(cG) != 2))
704+ then (size(cG) != 3)
699705 else false)
700706 then throw("Two or three payments expected")
701- else if (if ((cU != bo))
707+ else if (if ((cW != bo))
702708 then true
703- else (cW != bp))
709+ else (cY != bp))
704710 then throw(((("Incorrect assets attached. Expected: " + bz) + " and ") + bA))
705711 else if (if ((bm > bk))
706712 then true
707713 else (bn > bl))
708- then $Tuple2(nil, ([ScriptTransfer(bD, cE[0], cU), ScriptTransfer(bD, cE[1], cW)] ++ (if ((size(cE) == 3))
709- then [AttachedPayment(if ((cF[2] == base58''))
714+ then $Tuple2(nil, ([ScriptTransfer(bD, cG[0], cW), ScriptTransfer(bD, cG[1], cY)] ++ (if ((size(cG) == 3))
715+ then [AttachedPayment(if ((cH[2] == base58''))
710716 then unit
711- else cF[2], cE[2])]
717+ else cH[2], cG[2])]
712718 else (nil ++ bj(bk, bl, bm, bn, bz, bA)))))
713719 else {
714- let dH = bH(cE[0], cE[1], cU, cW, bm, bn, bO)
715- let ch = dH._1
716- let ce = dH._2
717- let cf = dH._3
718- let cc = dH._4
719- let cd = dH._5
720+ let dJ = bH(cG[0], cG[1], cW, cY, bm, bn, bO)
721+ let ch = dJ._1
722+ let ce = dJ._2
723+ let cf = dJ._3
724+ let cc = dJ._4
725+ let cd = dJ._5
720726 if ((ch == 0))
721727 then throw("Too small amount to replenish")
722728 else if ((0 > ce))
723729 then throw("Change < 0")
724730 else {
725- let di = if (contains(ag, bz))
731+ let dk = if (contains(ag, bz))
726732 then invoke(az.caller, "stakeUnstake", [true, cc, bz], nil)
727733 else 0
728- if ((di == di))
734+ if ((dk == dk))
729735 then {
730- let dj = if (contains(ag, bA))
736+ let dl = if (contains(ag, bA))
731737 then invoke(az.caller, "stakeUnstake", [true, cd, bA], nil)
732738 else 0
733- if ((dj == dj))
739+ if ((dl == dl))
734740 then {
735- let dI = if (dD)
741+ let dK = if (dF)
736742 then {
737- let dJ = ([AttachedPayment(bB, ch)] ++ (if ((size(cE) == 3))
738- then [AttachedPayment(if ((cF[2] == base58''))
743+ let dL = ([AttachedPayment(bB, ch)] ++ (if ((size(cG) == 3))
744+ then [AttachedPayment(if ((cH[2] == base58''))
739745 then unit
740- else cF[2], cE[2])]
746+ else cH[2], cG[2])]
741747 else nil))
742- let dK = invoke(az.caller, "reissueShareToken", [ch], nil)
743- if ((dK == dK))
748+ let dM = invoke(az.caller, "reissueShareToken", [ch], nil)
749+ if ((dM == dM))
744750 then {
745- let dL = invoke(ad, "lockShareTokensFromPool", [cC, toString(az.caller), dE], dJ)
746- if ((dL == dL))
751+ let dN = invoke(ad, "lockShareTokensFromPool", [cE, toString(az.caller), dG], dL)
752+ if ((dN == dN))
747753 then nil
748754 else throw("Strict value is not equal to itself.")
749755 }
750756 else throw("Strict value is not equal to itself.")
751757 }
752758 else [Reissue(bB, ch, true), ScriptTransfer(bD, ch, bB)]
753- $Tuple2(nil, $Tuple2(([IntegerEntry(g, (bm + cc)), IntegerEntry(h, (bn + cd)), IntegerEntry(l, (bO + ch)), ScriptTransfer(bD, ce, cf)] ++ dI), nil))
759+ $Tuple2(nil, $Tuple2(([IntegerEntry(g, (bm + cc)), IntegerEntry(h, (bn + cd)), IntegerEntry(l, (bO + ch)), ScriptTransfer(bD, ce, cf)] ++ dK), nil))
754760 }
755761 else throw("Strict value is not equal to itself.")
756762 }
757763 else throw("Strict value is not equal to itself.")
758764 }
759765 }
760766 })))
761767
762768
763769
764770 @Callable(az)
765-func replenishWithOneToken (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
766- let bD = Address(cC)
767- let ck = bi(cF[0])
768- let aP = cE[0]
769- let cn = parseIntValue(cD[0])
770- let dD = (cD[1] == "true")
771- let dE = parseIntValue(cD[2])
772- let dM = by(az.caller)
773- let bz = dM._1
774- let bA = dM._2
775- let bo = dM._3
776- let bp = dM._4
777- let bB = dM._5
778- let dN = bu(az.caller, bo, bp)
779- let bm = dN._1
780- let bn = dN._2
781- let bk = dN._3
782- let bl = dN._4
783- let bO = dN._5
771+func replenishWithOneToken (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
772+ let bD = Address(cE)
773+ let ck = bi(cH[0])
774+ let aP = cG[0]
775+ let cn = parseIntValue(cF[0])
776+ let dF = (cF[1] == "true")
777+ let dG = parseIntValue(cF[2])
778+ let dO = by(az.caller)
779+ let bz = dO._1
780+ let bA = dO._2
781+ let bo = dO._3
782+ let bp = dO._4
783+ let bB = dO._5
784+ let dP = bu(az.caller, bo, bp)
785+ let bm = dP._1
786+ let bn = dP._2
787+ let bk = dP._3
788+ let bl = dP._4
789+ let bO = dP._5
784790 let bX = ((bm + bn) == 0)
785- if ((size(cD) != 3))
791+ if ((size(cF) != 3))
786792 then throw("Wrong args size")
787- else if (if ((size(cE) != 1))
788- then (size(cE) != 2)
793+ else if (if ((size(cG) != 1))
794+ then (size(cG) != 2)
789795 else false)
790796 then throw("Two or one attached assets expected")
791797 else if (if ((ck != bo))
792798 then (ck != bp)
793799 else false)
794800 then throw(((("Incorrect asset attached. Expected: " + bz) + " or ") + bA))
795801 else if (bX)
796802 then throw("For initial exchanger you need to use two tokens")
797803 else if (if ((bm > bk))
798804 then true
799805 else (bn > bl))
800- then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ (if ((size(cE) == 2))
801- then [AttachedPayment(if ((cF[2] == base58''))
806+ then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ (if ((size(cG) == 2))
807+ then [AttachedPayment(if ((cH[2] == base58''))
802808 then unit
803- else cF[2], cE[2])]
809+ else cH[2], cG[2])]
804810 else (nil ++ bj(bk, bl, bm, bn, bz, bA)))))
805811 else {
806- let dO = bC(az.caller, az.originCaller)
807- let aT = dO._1
808- let bF = dO._2
809- let bG = dO._3
810- let dP = aA(ck)
811- let dQ = dP._1
812- let dR = dP._2
813- let dS = cj(aP, ck, bo, bp, bm, bn, bO, aT, bF, bG, cn)
814- let ch = dS._1
815- let ct = dS._2
816- let cu = dS._3
817- let dT = dS._4
818- let aZ = dS._5
819- let dU = dS._6
820- let dV = if ((dU == bo))
812+ let dQ = bC(az.caller, az.originCaller)
813+ let aT = dQ._1
814+ let bF = dQ._2
815+ let bG = dQ._3
816+ let dR = aA(ck)
817+ let dS = dR._1
818+ let dT = dR._2
819+ let dU = cj(aP, ck, bo, bp, bm, bn, bO, aT, bF, bG, cn)
820+ let ch = dU._1
821+ let ct = dU._2
822+ let cu = dU._3
823+ let dV = dU._4
824+ let aZ = dU._5
825+ let dW = dU._6
826+ let dX = if ((dW == bo))
821827 then bz
822828 else bA
823829 if ((ch == 0))
824830 then throw("Too small amount to replenish")
825831 else {
826- let di = if (contains(ag, dQ))
827- then invoke(az.caller, "stakeUnstake", [true, aP, dQ], nil)
832+ let dk = if (contains(ag, dS))
833+ then invoke(az.caller, "stakeUnstake", [true, aP, dS], nil)
828834 else 0
829- if ((di == di))
835+ if ((dk == dk))
830836 then {
831- let dj = if (contains(ag, dV))
832- then invoke(az.caller, "stakeUnstake", [false, (dT + aZ), dV], nil)
837+ let dl = if (contains(ag, dX))
838+ then invoke(az.caller, "stakeUnstake", [false, (dV + aZ), dX], nil)
833839 else 0
834- if ((dj == dj))
840+ if ((dl == dl))
835841 then {
836- let dI = if (dD)
842+ let dK = if (dF)
837843 then {
838- let dJ = ([AttachedPayment(bB, ch)] ++ (if ((size(cE) == 2))
839- then [AttachedPayment(if ((cF[1] == base58''))
844+ let dL = ([AttachedPayment(bB, ch)] ++ (if ((size(cG) == 2))
845+ then [AttachedPayment(if ((cH[1] == base58''))
840846 then unit
841- else cF[1], cE[1])]
847+ else cH[1], cG[1])]
842848 else nil))
843- let dK = invoke(az.caller, "reissueShareToken", [ch], nil)
844- if ((dK == dK))
849+ let dM = invoke(az.caller, "reissueShareToken", [ch], nil)
850+ if ((dM == dM))
845851 then {
846- let dL = invoke(ad, "lockShareTokensFromPool", [cC, toString(az.caller), dE], dJ)
847- if ((dL == dL))
852+ let dN = invoke(ad, "lockShareTokensFromPool", [cE, toString(az.caller), dG], dL)
853+ if ((dN == dN))
848854 then nil
849855 else throw("Strict value is not equal to itself.")
850856 }
851857 else throw("Strict value is not equal to itself.")
852858 }
853859 else [Reissue(bB, ch, true), ScriptTransfer(bD, ch, bB)]
854- $Tuple2(nil, $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO + ch)), ScriptTransfer(Z, dT, dU), ScriptTransfer(aa, aZ, dU)] ++ dI), nil))
860+ $Tuple2(nil, $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO + ch)), ScriptTransfer(Z, dV, dW), ScriptTransfer(aa, aZ, dW)] ++ dK), nil))
855861 }
856862 else throw("Strict value is not equal to itself.")
857863 }
858864 else throw("Strict value is not equal to itself.")
859865 }
860866 }
861867 })))
862868
863869
864870
865871 @Callable(az)
866-func withdraw (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
867- let bD = Address(cC)
868- let dW = by(az.caller)
869- let bz = dW._1
870- let bA = dW._2
871- let bo = dW._3
872- let bp = dW._4
873- let bB = dW._5
874- let dX = bu(az.caller, bo, bp)
875- let bm = dX._1
876- let bn = dX._2
877- let bk = dX._3
878- let bl = dX._4
879- let bO = dX._5
880- let dY = if ((size(cE) == 1))
872+func withdraw (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
873+ let bD = Address(cE)
874+ let dY = by(az.caller)
875+ let bz = dY._1
876+ let bA = dY._2
877+ let bo = dY._3
878+ let bp = dY._4
879+ let bB = dY._5
880+ let dZ = bu(az.caller, bo, bp)
881+ let bm = dZ._1
882+ let bn = dZ._2
883+ let bk = dZ._3
884+ let bl = dZ._4
885+ let bO = dZ._5
886+ let ea = if ((size(cG) == 1))
881887 then {
882- let dZ = bi(cF[0])
883- if ((dZ != bB))
888+ let eb = bi(cH[0])
889+ if ((eb != bB))
884890 then throw(("Incorrect asset attached. Expected: " + toBase58String(bB)))
885- else $Tuple2(cE[0], dZ)
891+ else $Tuple2(cG[0], eb)
886892 }
887893 else $Tuple2(0, bB)
888- let aP = dY._1
889- let ck = dY._2
890- if ((size(cD) != 1))
894+ let aP = ea._1
895+ let ck = ea._2
896+ if ((size(cF) != 1))
891897 then throw("Wrong args size")
892- else if ((size(cE) > 1))
898+ else if ((size(cG) > 1))
893899 then throw("One attached payment expected")
894900 else if (if ((bm > bk))
895901 then true
896902 else (bn > bl))
897903 then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ bj(bk, bl, bm, bn, bz, bA)))
898904 else {
899- let ea = parseIntValue(valueOrElse(cD[0], "0"))
900- let eb = if ((ea > 0))
901- then invoke(ad, "withdrawShareTokensFromPool", [cC, toString(az.caller), ea], nil)
905+ let ec = parseIntValue(valueOrElse(cF[0], "0"))
906+ let ed = if ((ec > 0))
907+ then invoke(ad, "withdrawShareTokensFromPool", [cE, toString(az.caller), ec], nil)
902908 else 0
903- if ((eb == eb))
909+ if ((ed == ed))
904910 then {
905- let cP = (aP + ea)
906- let cR = fraction(cP, bm, bO)
907- let cS = fraction(cP, bn, bO)
908- let di = if (contains(ag, bz))
909- then invoke(az.caller, "stakeUnstake", [false, cR, bz], nil)
911+ let cR = (aP + ec)
912+ let cT = fraction(cR, bm, bO)
913+ let cU = fraction(cR, bn, bO)
914+ let dk = if (contains(ag, bz))
915+ then invoke(az.caller, "stakeUnstake", [false, cT, bz], nil)
910916 else 0
911- if ((di == di))
917+ if ((dk == dk))
912918 then {
913- let dj = if (contains(ag, bA))
914- then invoke(az.caller, "stakeUnstake", [false, cS, bA], nil)
919+ let dl = if (contains(ag, bA))
920+ then invoke(az.caller, "stakeUnstake", [false, cU, bA], nil)
915921 else 0
916- if ((dj == dj))
917- then $Tuple2([ScriptTransfer(az.caller, ea, bB)], $Tuple2([IntegerEntry(g, (bm - cR)), IntegerEntry(h, (bn - cS)), IntegerEntry(l, (bO - cP)), Burn(bB, cP), ScriptTransfer(bD, cR, bo), ScriptTransfer(bD, cS, bp)], nil))
922+ if ((dl == dl))
923+ then $Tuple2([ScriptTransfer(az.caller, ec, bB)], $Tuple2([IntegerEntry(g, (bm - cT)), IntegerEntry(h, (bn - cU)), IntegerEntry(l, (bO - cR)), Burn(bB, cR), ScriptTransfer(bD, cT, bo), ScriptTransfer(bD, cU, bp)], nil))
918924 else throw("Strict value is not equal to itself.")
919925 }
920926 else throw("Strict value is not equal to itself.")
921927 }
922928 else throw("Strict value is not equal to itself.")
923929 }
924930 }))
925931
926932
927933
928934 @Callable(az)
929-func withdrawOneToken (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
930- let bD = Address(cC)
931- let ec = if ((cD[0] == ""))
935+func withdrawOneToken (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bt(toString(az.caller)), valueOrElse(bq(), {
936+ let bD = Address(cE)
937+ let ee = if ((cF[0] == ""))
932938 then unit
933- else fromBase58String(cD[0])
934- let ed = by(az.caller)
935- let bz = ed._1
936- let bA = ed._2
937- let bo = ed._3
938- let bp = ed._4
939- let bB = ed._5
940- let ee = bu(az.caller, bo, bp)
941- let bm = ee._1
942- let bn = ee._2
943- let bk = ee._3
944- let bl = ee._4
945- let bO = ee._5
946- let ef = if ((size(cE) == 1))
939+ else fromBase58String(cF[0])
940+ let ef = by(az.caller)
941+ let bz = ef._1
942+ let bA = ef._2
943+ let bo = ef._3
944+ let bp = ef._4
945+ let bB = ef._5
946+ let eg = bu(az.caller, bo, bp)
947+ let bm = eg._1
948+ let bn = eg._2
949+ let bk = eg._3
950+ let bl = eg._4
951+ let bO = eg._5
952+ let eh = if ((size(cG) == 1))
947953 then {
948- let dZ = bi(cF[0])
949- if ((dZ != bB))
954+ let eb = bi(cH[0])
955+ if ((eb != bB))
950956 then throw(("Incorrect asset attached. Expected: " + toBase58String(bB)))
951- else $Tuple2(cE[0], dZ)
957+ else $Tuple2(cG[0], eb)
952958 }
953959 else $Tuple2(0, bB)
954- let aP = ef._1
955- let ck = ef._2
956- let eg = parseIntValue(cD[1])
957- if ((size(cD) != 3))
960+ let aP = eh._1
961+ let ck = eh._2
962+ let ei = parseIntValue(cF[1])
963+ if ((size(cF) != 3))
958964 then throw("Wrong args size")
959- else if ((size(cE) > 1))
965+ else if ((size(cG) > 1))
960966 then throw("One attached payment expected")
961967 else if ((ck != bB))
962968 then throw(("Incorrect asset attached. Expected: " + toBase58String(bB)))
963- else if (!(containsElement([bo, bp], ec)))
969+ else if (!(containsElement([bo, bp], ee)))
964970 then throw("Incorrect withdraw asset.")
965971 else if (if ((bm > bk))
966972 then true
967973 else (bn > bl))
968974 then $Tuple2(nil, ([ScriptTransfer(bD, aP, ck)] ++ bj(bk, bl, bm, bn, bz, bA)))
969975 else {
970- let ea = parseIntValue(valueOrElse(cD[2], "0"))
971- let eb = if ((ea > 0))
972- then invoke(ad, "withdrawShareTokensFromPool", [cC, toString(az.caller), ea], nil)
976+ let ec = parseIntValue(valueOrElse(cF[2], "0"))
977+ let ed = if ((ec > 0))
978+ then invoke(ad, "withdrawShareTokensFromPool", [cE, toString(az.caller), ec], nil)
973979 else 0
974- if ((eb == eb))
980+ if ((ed == ed))
975981 then {
976- let cP = (aP + ea)
977- let cR = fraction(cP, bm, bO)
978- let cS = fraction(cP, bn, bO)
979- let eh = bC(az.caller, az.originCaller)
980- let aT = eh._1
981- let bF = eh._2
982- let bG = eh._3
983- let ei = if ((ec == bo))
984- then aO(cS, eg, (bn - cS), (bm - cR), aT, bF, bG)
985- else aO(cR, eg, (bm - cR), (bn - cS), aT, bF, bG)
986- let aW = ei._1
987- let aX = ei._2
988- let aY = ei._3
989- let aZ = ei._4
990- let ej = if ((ec == bo))
982+ let cR = (aP + ec)
983+ let cT = fraction(cR, bm, bO)
984+ let cU = fraction(cR, bn, bO)
985+ let ej = bC(az.caller, az.originCaller)
986+ let aT = ej._1
987+ let bF = ej._2
988+ let bG = ej._3
989+ let ek = if ((ee == bo))
990+ then aO(cU, ei, (bn - cU), (bm - cT), aT, bF, bG)
991+ else aO(cT, ei, (bm - cT), (bn - cU), aT, bF, bG)
992+ let aW = ek._1
993+ let aX = ek._2
994+ let aY = ek._3
995+ let aZ = ek._4
996+ let el = if ((ee == bo))
991997 then {
992- let ek = if (contains(ag, bz))
993- then invoke(az.caller, "stakeUnstake", [false, (((cR + aX) + aY) + aZ), bz], nil)
998+ let em = if (contains(ag, bz))
999+ then invoke(az.caller, "stakeUnstake", [false, (((cT + aX) + aY) + aZ), bz], nil)
9941000 else 0
995- if ((ek == ek))
996- then $Tuple4(((((bm - cR) - aX) - aY) - aZ), bn, bo, [ScriptTransfer(bD, (cR + aX), bo)])
1001+ if ((em == em))
1002+ then $Tuple4(((((bm - cT) - aX) - aY) - aZ), bn, bo, [ScriptTransfer(bD, (cT + aX), bo)])
9971003 else throw("Strict value is not equal to itself.")
9981004 }
9991005 else {
1000- let ek = if (contains(ag, bA))
1001- then invoke(az.caller, "stakeUnstake", [false, (((cS + aX) + aY) + aZ), bA], nil)
1006+ let em = if (contains(ag, bA))
1007+ then invoke(az.caller, "stakeUnstake", [false, (((cU + aX) + aY) + aZ), bA], nil)
10021008 else 0
1003- if ((ek == ek))
1004- then $Tuple4(bm, ((((bn - cS) - aX) - aY) - aZ), bp, [ScriptTransfer(bD, (cS + aX), bp)])
1009+ if ((em == em))
1010+ then $Tuple4(bm, ((((bn - cU) - aX) - aY) - aZ), bp, [ScriptTransfer(bD, (cU + aX), bp)])
10051011 else throw("Strict value is not equal to itself.")
10061012 }
1007- let ct = ej._1
1008- let cu = ej._2
1009- let el = ej._3
1010- let em = ej._4
1011- $Tuple2([ScriptTransfer(az.caller, ea, bB)], $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO - cP)), Burn(bB, cP), ScriptTransfer(Z, aY, el), ScriptTransfer(aa, aZ, el)] ++ em), nil))
1013+ let ct = el._1
1014+ let cu = el._2
1015+ let en = el._3
1016+ let eo = el._4
1017+ $Tuple2([ScriptTransfer(az.caller, ec, bB)], $Tuple2(([IntegerEntry(g, ct), IntegerEntry(h, cu), IntegerEntry(l, (bO - cR)), Burn(bB, cR), ScriptTransfer(Z, aY, en), ScriptTransfer(aa, aZ, en)] ++ eo), nil))
10121018 }
10131019 else throw("Strict value is not equal to itself.")
10141020 }
10151021 })))
10161022
10171023
10181024
10191025 @Callable(az)
1020-func takeIntoAccountExtraFunds (cC,cD,cE,cF) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
1021- let en = by(az.caller)
1022- let bz = en._1
1023- let bA = en._2
1024- let bo = en._3
1025- let bp = en._4
1026- let eo = if (if ((bo == ae))
1026+func takeIntoAccountExtraFunds (cE,cF,cG,cH) = valueOrElse(br(toString(az.caller)), valueOrElse(bq(), {
1027+ let ep = by(az.caller)
1028+ let bz = ep._1
1029+ let bA = ep._2
1030+ let bo = ep._3
1031+ let bp = ep._4
1032+ let eq = if (if ((bo == ae))
10271033 then true
10281034 else (bp == ae))
10291035 then invoke(az.caller, "claimNetrinoRewards", nil, nil)
10301036 else 0
1031- if ((eo == eo))
1037+ if ((eq == eq))
10321038 then {
1033- let ep = bu(az.caller, bo, bp)
1034- let bm = ep._1
1035- let bn = ep._2
1036- let bk = ep._3
1037- let bl = ep._4
1038- let eq = (bk - bm)
1039- let er = (bl - bn)
1040- if ((size(cD) != 0))
1039+ let er = bu(az.caller, bo, bp)
1040+ let bm = er._1
1041+ let bn = er._2
1042+ let bk = er._3
1043+ let bl = er._4
1044+ let es = (bk - bm)
1045+ let et = (bl - bn)
1046+ if ((size(cF) != 0))
10411047 then throw("Wrong args size")
10421048 else if ((Z != az.originCaller))
10431049 then throw("Only the wallet can call this function")
1044- else if (if ((0 > eq))
1050+ else if (if ((0 > es))
10451051 then true
1046- else (0 > er))
1052+ else (0 > et))
10471053 then aG("Enroll amount negative")
1048- else if (if ((eq == 0))
1049- then (er == 0)
1054+ else if (if ((es == 0))
1055+ then (et == 0)
10501056 else false)
10511057 then throw("No money to take")
10521058 else {
1053- let di = if (if (contains(ag, bz))
1054- then (eq > 0)
1059+ let dk = if (if (contains(ag, bz))
1060+ then (es > 0)
10551061 else false)
1056- then invoke(az.caller, "stakeUnstake", [true, eq, bz], nil)
1062+ then invoke(az.caller, "stakeUnstake", [true, es, bz], nil)
10571063 else 0
1058- if ((di == di))
1064+ if ((dk == dk))
10591065 then {
1060- let dj = if (if (contains(ag, bA))
1061- then (er > 0)
1066+ let dl = if (if (contains(ag, bA))
1067+ then (et > 0)
10621068 else false)
1063- then invoke(az.caller, "stakeUnstake", [true, er, bA], nil)
1069+ then invoke(az.caller, "stakeUnstake", [true, et, bA], nil)
10641070 else 0
1065- if ((dj == dj))
1066- then $Tuple2(nil, $Tuple2([IntegerEntry(g, (bm + eq)), IntegerEntry(h, (bn + er))], nil))
1071+ if ((dl == dl))
1072+ then $Tuple2(nil, $Tuple2([IntegerEntry(g, (bm + es)), IntegerEntry(h, (bn + et))], nil))
10671073 else throw("Strict value is not equal to itself.")
10681074 }
10691075 else throw("Strict value is not equal to itself.")
10701076 }
10711077 }
10721078 else throw("Strict value is not equal to itself.")
10731079 }))
10741080
10751081
1076-@Verifier(es)
1077-func et () = {
1078- let eu = {
1079- let ev = if (sigVerify(es.bodyBytes, es.proofs[0], V))
1082+@Verifier(eu)
1083+func ev () = {
1084+ let ew = {
1085+ let ex = if (sigVerify(eu.bodyBytes, eu.proofs[0], V))
10801086 then 1
10811087 else 0
1082- let ew = if (sigVerify(es.bodyBytes, es.proofs[1], W))
1088+ let ey = if (sigVerify(eu.bodyBytes, eu.proofs[1], W))
10831089 then 1
10841090 else 0
1085- let ex = if (sigVerify(es.bodyBytes, es.proofs[2], X))
1091+ let ez = if (sigVerify(eu.bodyBytes, eu.proofs[2], X))
10861092 then 1
10871093 else 0
1088- (((ev + ew) + ex) >= 2)
1094+ (((ex + ey) + ez) >= 2)
10891095 }
1090- eu
1096+ ew
10911097 }
10921098

github/deemru/w8io/873ac7e 
377.73 ms