tx · GSTt7Z228WrMXnJgjAsmhPN3H9DTj2vrnW34G31kWnj5

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.10300000 Waves

2023.09.22 21:26 [2766947] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "GSTt7Z228WrMXnJgjAsmhPN3H9DTj2vrnW34G31kWnj5", "fee": 10300000, "feeAssetId": null, "timestamp": 1695407246378, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "3PboT87FfUaFGMfipuvY9d93DUdsc7GFtD2BhwHhtYWabHkdQo164XidQUHp3pAJhfFPYCp657nWUSCYm8DwCdRn" ], "script": "base64:BgLbAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASAwoBCBIAEgQKAgICEgASAwoBCBIECgIICBIDCgEYEgQKAggIEgQKAggIEgMKAQgSAwoBGBIDCgEIEgUKAwgICBIECgIICBIHCgUBAQEBARIDCgEBEgUKAwEBCBIDCgEIEgMKAQgSABIECgIIARIECgIIARIDCgEIEgQKAggIEgMKAQgSABIDCgEIEgMKAQgSBAoCAgISBAoCAgISAJMCAAlEQVlNSUxMSVMAgLiZKQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAOcm9iYmVyeUNvc3RNaW4AgMLXLwAUcm9iYmVyeUNvb2xkb3duQ29lZmYAkAMADHJlcXVpcmVtZW50cwkAzAgCAghTdHJlbmd0aAkAzAgCAghBY2N1cmFjeQkAzAgCAglJbnRlbGxlY3QJAMwIAgIJRW5kdXJhbmNlCQDMCAICCURleHRlcml0eQkAzAgCAgVMZXZlbAkAzAgCAgZIZWFsdGgFA25pbAAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtzZWdCYWNrcGFjawAAAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIADU1BWFBST0RJTlNMT1QAHgAQbGFuZFJvYkNvb2xkb3ducwkAzAgCAAAJAMwIAgDAzyQJAMwIAgCg9zYJAMwIAgCA3MwUCQDMCAIAgK6mCgUDbmlsAA5NSU5fUkVTX1RPX1JPQgCA2sQJAAxyb2JJZHhMb2NrZWQAAQALZHVja0lkeEZyZWUAAAAQZHVja0lkeFByZXBhcmluZwABAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAQ5rZXlTYXZlZEhlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgIMc2F2ZWRIZWFsdGhfBQtkdWNrQXNzZXRJZAEQa2V5U2F2ZWRMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgIOc2F2ZWRMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQnVmZnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tCdWZmc18FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5VGltZV8FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeUNvc3RCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5Q29zdF8FC2R1Y2tBc3NldElkARNrZXlMYW5kUm9iYmVyeVN0YXRlAQtsYW5kQXNzZXRJZAkArAICAhFsYW5kUm9iYmVyeVN0YXRlXwULbGFuZEFzc2V0SWQBEmtleUxhbmRDb29sZG93bkVUQQELbGFuZEFzc2V0SWQJAKwCAgIQbGFuZENvb2xkb3duRVRBXwULbGFuZEFzc2V0SWQBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBC2R1Y2tBc3NldElkCQCsAgICEWR1Y2tSb2JiZXJ5U3RhdGVfBQtkdWNrQXNzZXRJZAETa2V5TG9ja2VkTGFuZEJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIRbG9ja2VkTGFuZEJ5RHVja18FC2R1Y2tBc3NldElkARZrZXlEZWxpdmVyeURlbGF5QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhRkZWxpdmVyeURlbGF5QnlEdWNrXwULZHVja0Fzc2V0SWQAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzBA9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQKYnVmZkVmZmVjdApmb3JjZUJ1ZmZzBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsBApzdGF0ZUJ1ZmZzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwkAzggCCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAMFCmZvcmNlQnVmZnMJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0BQNuaWwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRGV4dGVyaXR5BQNuaWwBDmdldFJvYmJlcnlEYXRhAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEC2xhc3RSb2JDb3N0CQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawEFC2R1Y2tBc3NldElkAAAEC2xhc3RSb2JUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3JvYkNvc3QJAJYDAQkAzAgCBQ5yb2JiZXJ5Q29zdE1pbgkAzAgCCQBlAgULbGFzdFJvYkNvc3QJAGgCBRRyb2JiZXJ5Q29vbGRvd25Db2VmZgkAZQIFA25vdwULbGFzdFJvYlRpbWUFA25pbAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAkAlwoFBQdyb2JDb3N0BQtsYXN0Um9iVGltZQUJZHVja1N0YXRlBQpsb2NrZWRMYW5kBQdsYW5kRVRBAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSABkAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAxXSE1VTFRJUExJRVIAgMivoCUAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKRVNTRUxMQ09FRgAKABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMJAMwIAgIHTWluZSBMMQkAzAgCAgdNaW5lIEwyCQDMCAICB01pbmUgTDMJAMwIAgIHVHJhcCBMMQkAzAgCAgdUcmFwIEwyCQDMCAICB1RyYXAgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsAAlDT0VGRjJNQVQAgK3iBAAQZm9ydEFsbG93ZWRQcm9kcwkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAUDbmlsABBwcm9kdWN0aW9uTWF0cml4CQDMCAICJThfOF84XzE3XzE3XzQyXzEyXzBfMzBfMCwwLDAsMCwwLDAsMF8JAMwIAgIlOF84XzhfMTdfMTdfNDJfMjRfMF82MF8wLDAsNSwyLDAsMCwwXwkAzAgCAic4XzhfOF8xN18xN180Ml8zNl8wXzEyMF8wLDAsMTAsNCwwLDAsMF8JAMwIAgIpOF8xOV8xOV84XzI3XzE5XzI2XzFfMjBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5XzUyXzFfNDBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5Xzc4XzFfODBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIlOF84XzhfOF84XzYwXzEzXzJfMl8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMjZfMl80XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8zOV8yXzhfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzMwXzNfMzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzYwXzNfNTBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzkwXzNfNzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMTFfNF8xMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8yMl80XzIwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzMzXzRfMzBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIqNF8xM18yMl80XzM1XzIyXzIzXzBfNTAsMSwwXzAsMCwwLDAsMCwwLDBfCQDMCAICKjRfMTNfMjJfNF8zNV8yMl80Nl8wXzUwLDEsMV8wLDIsNSwwLDAsMCwwXwkAzAgCAis0XzEzXzIyXzRfMzVfMjJfNjlfMF81MCwyLDFfMCw1LDEwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV8yMF8xXzMwLDEsMV8wLDAsMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNDBfMV8zMCwxLDJfMiwxLDMsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzYwXzFfMzAsMSwzXzUsMiw4LDAsMCwwLDBfBQNuaWwACXJJZHhDb2VmZgAGAApySWR4RWZmZWN0AAgAEHJJZHhSZXF1aXJlbWVudHMACQAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICA25vXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIFbGNuYV8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgIDc3RfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgIDbGFzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIGc3R0YW9fBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIDd2hfBQtsYW5kQXNzZXRJZAEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtpbmZyYUxldmVsXwUHYXNzZXRJZAEXa2V5Rm9ydGlmaWNhdGlvbnNCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICD2ZvcnRpZmljYXRpb25zXwULbGFuZEFzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAANbGFzdFRvdXJJZEtleQIOJXNfX2xhc3RUb3VySWQBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEDdElkCQCsAgICFiVzJWRfX3RvdXJTdGF0aWNEYXRhX18JAKQDAQUDdElkARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQN0SWQJAKwCAgIXJXMlZF9fdG91ckR5bmFtaWNEYXRhX18JAKQDAQUDdElkARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIDdElkC2R1Y2tBc3NldElkCQC5CQIJAMwIAgIfJXMlZCVzX19iZXN0UmVzdWx0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQAKdFN0YXRpY0VuZAAGAA50RHluYW1pY1N0YXR1cwABAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUABZLU19TRVBBUkFURV9QVUJMSUNfS0VZBwAYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFBwARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIC4mSkDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQAFElkeENmZ1RvdXJuYW1lbnREYXBwAAcAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwABJ0b3VybmFtZW50Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdUb3VybmFtZW50RGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0AA9hY3Jlc0Fzc2V0SWRLZXkCDGFjcmVzQXNzZXRJZAAMYWNyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUNYWNyZXNDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAALcmFuZG9tRGVsYXkAAgEJa2V5Q29tbWl0AQdhZGRyZXNzCQCsAgICE2ZpbmlzaEJsb2NrRm9yQWRkcl8FB2FkZHJlc3MBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJY29udGluZW50CQCsAgICFHJlc1R5cGVzQnlDb250aW5lbnRfBQljb250aW5lbnQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBB2lzRGlnaXQBAXMJAQlpc0RlZmluZWQBCQC2CQEFAXMBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQ9nZXRSYW5kb21OdW1iZXIDCG1heFZhbHVlDGZpbmlzaEhlaWdodAphdXhFbnRyb3B5BA9yYW5kb21TZWVkQmxvY2sJAQV2YWx1ZQEJAO0HAQUMZmluaXNoSGVpZ2h0BApyYW5kb21IYXNoCQD3AwEJAMsBAgkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYFCmF1eEVudHJvcHkJAGoCCQCxCQEFCnJhbmRvbUhhc2gFCG1heFZhbHVlAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDADBRZLU19TRVBBUkFURV9QVUJMSUNfS0VZASCrF1ePFWfjWVRBsNZy62abxKPTZl7VmYZQ35g3H7IJCAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgDCQAAAgEBVAUHJG1hdGNoMAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgJAAIBAg1Vbmtub3duIGNoYWluAAxFTVBUWV9QUk9ENTABkAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFGSVZFTUlOVVRFU01JTExJUwDgpxIAElRFTl9NSU5VVEVTX01JTExJUwDAzyQADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAMU19DT1NUX0FDUkVTAIDyi6gJAAVGSVZFWAkAtgIBAAUAB1RXRU5UWVgJALYCAQAUAAhUV0VOVFkyWAkAtgIBCQBoAgAUABQACFRXRU5UWTNYCQC2AgEJAGgCCQBoAgAUABQAFAAIVFdFTlRZNFgJALYCAQkAaAIJAGgCCQBoAgAUABQAFAAUAAhUV0VOVFk1WAkAtgIBCQBoAgkAaAIJAGgCCQBoAgAUABQAFAAUABQAD1BSRVNBTEVOVU1MQU5EUwD0AwESa2V5TmV4dEZyZWVMYW5kTnVtAAILbmV4dExhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICBGxjbl8FBG5hbWUBEGtleUxhbmRUb0Fzc2V0SWQBB2xhbmROdW0JAKwCAgIDbGFfBQdsYW5kTnVtAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAgVpbGFvXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgNsb18FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgAIZmxIZWFsdGgAAAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAAtmbFByb2RzVXNlZAAHAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4ARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIACQCUCgIFBW9sZEVxBwoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCCAUDYWNjAl8xCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAMIBQNhY2MCXzIGAwMJAGcCBQNpZHgABgkAZwIACAUDaWR4BwkAAAIFBm5ld0FtdAAABwoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQVvbGRFcQcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1YlVzZWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBl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DXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFEGZvcnRBbGxvd2VkUHJvZHMFCnByb2R1Y3RJZHgJAAIBCQCsAgIJAKwCAgIJUHJvZHVjdCAnCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAIhJyBjYW5ub3QgYmUgdXNlZCBmb3IgbGFuZCBkZWZlbnNlAwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJUKAwUFcExpc3QFCG9jY3VwaWVkBQRmcmVlBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQEBm5ld0FtdAMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHCQBlAgUEY3VycgUFY291bnQJAGQCBQRjdXJyBQVjb3VudAQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCBQZuZXdBbXQFDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQRjdXJyBQ5QUk9EVUNUUEtHU0laRQkAlQoDCQDLAQIJAMsBAgUEaGVhZAkAmgMBBQZuZXdBbXQFBHRhaWwJAGQCBQhvY2N1cGllZAUIZGVsdGFWb2wJAGUCBQRmcmVlBQhkZWx0YVZvbAEIYWRkUHJvZEIHBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eARzbG90CWR1Y2tTdGF0cwQFcGFydHMJALUJAgUGaWR4Q250AgE6AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4OmFtb3VudAMDCQEBIQEFCmlzUG9zaXRpdmUJAQIhPQIJALECAQkAkQMCBQVwYXJ0cwAAAAIHCQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMDCQBmAgAABQpwcm9kdWN0SWR4BgkAZwIFCnByb2R1Y3RJZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQJaXNCaWdJdGVtAwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcEBmNvbXBhdAkAkQMCBQZyZWNpcGUFCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1cHkgc2xvdCAwCQBmAgUJY051bVNsb3RzAAEHCQCUCgIJAMsBAgkAywECBQRoZWFkCQCaAwEJAGQCBQRjdXJyAwUKaXNQb3NpdGl2ZQUFY291bnQJAQEtAQUFY291bnQFBHRhaWwFCWlzQmlnSXRlbQELc2xvdHNHcm91cEIGAWcEYnBJbgppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eAVzdGF0cwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkA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cQULc2VnQmFja3BhY2sCATsAAQQKYnVmZkVmZmVjdAMJAAACBQhzZWdCcEF1eAIAAAAEBGF1eDAJAJEDAgkAtQkCBQhzZWdCcEF1eAIBLAAAAwkAAAIFBGF1eDACAAAABAZpZHhDbnQJALUJAgUEYXV4MAIBOgQDaWR4CQCRAwIFBmlkeENudAAABANjbnQJAJEDAgUGaWR4Q250AAEDAwMDAwkAAAIFA2lkeAICMDYGCQAAAgUDaWR4AgIwNwYJAAACBQNpZHgCAjA4CQECIT0CBQNjbnQCAAcJAGYCCQENcGFyc2VJbnRWYWx1ZQEFA2NudAAABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4CQENcGFyc2VJbnRWYWx1ZQEFA2lkeAIBXwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQZjdXJyRXEFCXRlbXBQcm9kQgcFBXN0YXRzCQAAAgUIbmV3UHJvZEIFCG5ld1Byb2RCARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CEywgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24CAV8BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDWRpc3RyaWJ1dGVSZXMEDGN1cnJlbnRXaFJlcw5jdXJyZW50UGFja1JlcwpyZXNUb0NsYWltC3doU3BhY2VMZWZ0BA5yZXNMaXN0VG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzEEDHJlc0FtVG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUMcmVzQW1Ub0NsYWltAAAJAJQKAgkAuQkCBQxjdXJyZW50V2hSZXMCAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8DCQBnAgULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQoBCGFkZExpc3RzAgNhY2MBaQkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGFkZExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAgUBcgIBXwkAuQkCBQ5jdXJyZW50UGFja1JlcwIBXwoBDGFkZFBhcnRMaXN0cwIDYWNjAWkEBndoUGFydAkAawMJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0JAJQKAgkAzQgCCAUDYWNjAl8xCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpBQZ3aFBhcnQJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQUGd2hQYXJ0BAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWRkUGFydExpc3Rz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dGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2Fj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QUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQduZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50AQxmbGlnaHRDb21tb24DCHVzZXJBZGRyB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAvAkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAvAkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEFDG9sZEZyb21TdGF0ZQIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAQEhAQkBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZFcXVpcG1lbnQgaW5jb21wYXRpYmxlBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzMzc4NDM0MzIzAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDMzNzg0MzQzMjMCXzEEBmR1Y2tJZAgFDSR0MDMzNzg0MzQzMjMCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzY2OTczNzU2OAMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzY2OTczNzU2OAJfMQQFYnBSZXMIBQ0kdDAzNjY5NzM3NTY4Al8yBAVsb2Z0TwgFDSR0MDM2Njk3Mzc1NjgCXzMEBWxvZnRGCAUNJHQwMzY2OTczNzU2OAJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADAwkBASEBBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGcCBQhjdXJMZXZlbAADBwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhtYXhJbmZyYQkAZAIJAGkCCQEEc3FydAQFBnBpZWNlcwAAAAAFBERPV04ABQACBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEDAwUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBmAgUIbmV3TGV2ZWwFCG1heEluZnJhBwkAAgEJAKwCAgIlQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IAkApAMBBQhtYXhJbmZyYQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAEBmx2bEtleQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkBAV4cEtleQkBCWtleUR1Y2tYUAEFC2R1Y2tBc3NldElkBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAEBmx2bEtleQkBDGtleVVzZXJMZXZlbAEFBGFkZHIEBXhwS2V5CQEJa2V5VXNlclhQAQUEYWRkcgQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENY2hlY2tEZWxpdmVyeQELZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFEBwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQDAwkAZgIFA25vdwkAZAIFCXN0YXJ0VGltZQUSVEVOX01JTlVURVNfTUlMTElTCQBmAgADBQhkaXN0YW5jZQcJAAIBAiBZb3VyIGR1Y2sgaXMgb24gZGVsaXZlcnkgbWlzc2lvbgkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIUZXhpdERlbGl2ZXJ5SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAQ1tZXJnZUludGVybmFsBgtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECHW1lcmdlSW50ZXJuYWxfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECG21lcmdlSW50ZXJuYWxfY2hlY2tEZWxpdmVyeQoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfNgUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEBmNQcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjA18xMAUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEC3N1bVRlcnJhaW5zCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzkFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCcCgoFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDOCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABAwkBAiE9AgUKY3VzdG9tTmFtZQIACQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUFA25pbAUDbmlsBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBQtzdW1UZXJyYWlucwUGY1Byb3BzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAVjb250MAkAkQMCCQC1CQIICQEFdmFsdWUBCQDsBwEJANkEAQkAkQMCBQxsYW5kQXNzZXRJZHMAAAtkZXNjcmlwdGlvbgIBXwUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFBWNvbnQwAgswXzBfMF8wXzBfMAIBXwQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQhwcm9wTGlzdAUHbGFuZHNJbgAACQC1CQICCzBfMF8wXzBfMF8wAgFfBQljb250UHJvcHMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmNoZWNrTWVyZ2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBAljb250aW5lbnQIBQFyAl8zBAxjb250aW5lbnRJZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQpjb250aW5lbnRzBQljb250aW5lbnQJAKwCAgITVW5rbm93biBjb250aW5lbnQ6IAUJY29udGluZW50BAh0ZXJyYWlucwkBE2dlblRlcnJhaW5zRm9yTWVyZ2UCCAUBcgJfOQkAaQIJAQ9udW1QaWVjZXNCeVNpemUBBQtuZXdMYW5kU2l6ZQUFU1NJWkUEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFDm5ld0xhbmRBc3NldElkBQhuZXdMZXZlbAkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgUIbmV3TGV2ZWwJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUBcgJfNAkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAJALkJAggFAXICXzYCAV8JAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUJY29udGluZW50CQC5CQIIBQFyA18xMAIBXwkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwAAAQNtMmwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgIEYWRkcgxsYW5kQXNzZXRJZHMEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAMFByRtYXRjaDAJAQNtMmwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgAFBQckbWF0Y2gwCQEEbDJ4bAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMJAAIBAg1Vbmtub3duIG1lcmdlAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkLAFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAECAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAMJAGcCCQCQAwEFBWxhbmRzBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIJAAIBCQCsAgIJAKwCAgIZWW91ciBhbHJlYWR5IHN0YWtlZCBtYXggKAkApAMBBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVICBykgbGFuZHMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCBQxyZXNCeUNvbnRLZXkFEHVwZGF0ZWRDb250UHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMDCQEPY2hlY2tUb3VybmFtZW50AQUKYXNzZXRJZFN0cgkAAgECG3Vuc3Rha2VEdWNrX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQUKYXNzZXRJZFN0cgkAAgECGXVuc3Rha2VEdWNrX2NoZWNrRGVsaXZlcnkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAVuZXdIUAgFAWYCXzEEC2R1Y2tBc3NldElkCAUBZgJfMgQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAtuZXdMb2NhdGlvbggFAWYCXzQDCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQGbmV3TG9jCQC1CQIFC25ld0xvY2F0aW9uAgFfBAZpc1RvdXIJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBVAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDY2ODEzNjY5MTAJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNjY4MTM2NjkxMAJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNjY4MTM2NjkxMAJfMgQJbG9jVG9TYXZlAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwUGaXNUb3VyCQACAQkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQULY3VyTG9jYXRpb24CCSwgbmV3TG9jPQULbmV3TG9jYXRpb24DCQBmAgUFbmV3SFAAAAULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC25ld0xvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQEBmN1ckxvYwkAtQkCBQtjdXJMb2NhdGlvbgIBXwQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAAAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQACAQkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQULY3VyTG9jYXRpb24CCSwgbmV3TG9jPQULbmV3TG9jYXRpb24DCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAULbmV3TG9jYXRpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FC2N1ckxvY2F0aW9uCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFCWxvY1RvU2F2ZQkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFBW5ld0hQCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwJAM4IAgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAgUFbmV3SFAAAAUPeHBTdWNjZXNzRmxpZ2h0BQx4cEZhaWxGbGlnaHQCXzEIBQFmAl8zAWkBBGhlYWwDCnF1YW50aXR5TDEKcXVhbnRpdHlMMgpxdWFudGl0eUwzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwMDCQBmAgAABQpxdWFudGl0eUwxBgkAZgIAAAUKcXVhbnRpdHlMMgYJAGYCAAAFCnF1YW50aXR5TDMJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhRoZWFsX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhJoZWFsX2NoZWNrRGVsaXZlcnkEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjBnJlY2lwZQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUGcmVjaXBlAgFfBQpySWR4RWZmZWN0BQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAggFBnJlc3VsdAJfMQIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFmhlYWxFU19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIUaGVhbEVTX2NoZWNrRGVsaXZlcnkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwUKcklkeEVmZmVjdAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCBQVNVUxUOAUOUFJPRFVDVFBLR1NJWkUDCQECIT0CCAUDcG10BmFtb3VudAUJc2VsbFByaWNlCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUJc2VsbFByaWNlBAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPZWNvbm9teUNvbnRyYWN0Ag91cGRhdGVFc1N0b3JhZ2UJAMwIAgUFbmV3RVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkdEFzc2V0SWQFCXNlbGxQcmljZQUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUIeHBDYWxsRVMCXzEFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawUDbmlsBQduZXdQYWNrAWkBD2NvbW1pdEZvclJhbmRvbQAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzQgCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUMcHJvbG9nQWN0aW9uBQtmaW5pc2hCbG9jawFpAQphd2FyZFNMYW5kAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAggFBnJlc3VsdAJfMQgIBQZyZXN1bHQCXzICXzEBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24JAJQKAggIBQZyZXN1bHQCXzICXzEFC2FjcmVzUmVzdWx0AWkBCmV4cGVkaXRpb24CB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDc1ODM4NzU5MzUJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNzU4Mzg3NTkzNQJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNzU4Mzg3NTkzNQJfMgQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQCaWQICAUBZQJfMgJfMQQGcmVzdWx0AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAACQCVCgMJAM4IAggFAWUCXzEDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzQgCCQDNCAIJAM0IAgkAzQgCBQNuaWwJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGmV4cGVkaXRpb25fY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECGGV4cGVkaXRpb25fY2hlY2tEZWxpdmVyeQQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCQCVCgMIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMFC2FjcmVzUmVzdWx0AWkBEGJ1eVNMYW5kRm9yQWNyZXMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUMU19DT1NUX0FDUkVTCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUMU19DT1NUX0FDUkVTBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMYWNyZXNBc3NldElkBQNhbXQFA25pbAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQ5sYW5kQXNzZXRJZE9wdAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uAgkApQgBCAUBaQZjYWxsZXIFDGxhbmRBc3NldElkcwkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUHeHBNZXJnZQJfMQgFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQEXZml4Q29udGluZW50UHJvcG9ydGlvbnMBDGxhbmRBc3NldElkcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAoBCGdldFByb3BzAgNhY2MEY29udAkAzQgCBQNhY2MJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQRjb250AgswXzBfMF8wXzBfMAQBcAoAAiRsBQpjb250aW5lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhnZXRQcm9wcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUKAQlwcm9jZXNzb3ICA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBQVTU0laRQQEY29udAkAkQMCBQFkBQxyZWNDb250aW5lbnQEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQMY29udGluZW50SWR4CQEFdmFsdWUBCQDPCAIFCmNvbnRpbmVudHMFBGNvbnQECWNvbnRQcm9wcwkAtQkCCQCRAwIFA2FjYwUMY29udGluZW50SWR4AgFfBAd1cGRhdGVkCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUJY29udFByb3BzBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQIBXwQHJG1hdGNoMAUEY29udAMJAAACAghBbWVyaWNhcwUHJG1hdGNoMAkAzAgCBQd1cGRhdGVkCQDMCAIJAJEDAgUDYWNjAAEJAMwIAgkAkQMCBQNhY2MAAgkAzAgCCQCRAwIFA2FjYwADCQDMCAIJAJEDAgUDYWNjAAQFA25pbAMJAAACAgZFdXJvcGUFByRtYXRjaDAJAMwIAgkAkQMCBQNhY2MAAAkAzAgCBQd1cGRhdGVkCQDMCAIJAJEDAgUDYWNjAAIJAMwIAgkAkQMCBQNhY2MAAwkAzAgCCQCRAwIFA2FjYwAEBQNuaWwDCQAAAgIEQXNpYQUHJG1hdGNoMAkAzAgCCQCRAwIFA2FjYwAACQDMCAIJAJEDAgUDYWNjAAEJAMwIAgUHdXBkYXRlZAkAzAgCCQCRAwIFA2FjYwADCQDMCAIJAJEDAgUDYWNjAAQFA25pbAMJAAACAgZBZnJpY2EFByRtYXRjaDAJAMwIAgkAkQMCBQNhY2MAAAkAzAgCCQCRAwIFA2FjYwABCQDMCAIJAJEDAgUDYWNjAAIJAMwIAgUHdXBkYXRlZAkAzAgCCQCRAwIFA2FjYwAEBQNuaWwDCQAAAgIHT2NlYW5pYQUHJG1hdGNoMAkAzAgCCQCR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cGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUMUkVOQU1JTkdDT1NUCQACAQkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAQGY2FsbGVyCAUBaQZjYWxsZXIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFD2Vjb25vbXlDb250cmFjdAkAzAgCBRJ0b3VybmFtZW50Q29udHJhY3QJAMwIAgUNYWNyZXNDb250cmFjdAUDbmlsBQZjYWxsZXIJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhllcXVpcER1Y2tfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECF2VxdWlwRHVja19jaGVja0RlbGl2ZXJ5BAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQLY3VycmVudFNlZ3MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVuZXdFcQkAtQkCBQllcXVpcG1lbnQCAV8DCQECIT0CCQCQAwEFBW5ld0VxBQtOVU1TRUdNRU5UUwkAAgECFldyb25nIGVxdWlwbWVudCBzdHJpbmcECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQNuaWwECHNlZ0JwQXV4CQCRAwIJALUJAgkAkQMCBQVuZXdFcQULc2VnQmFja3BhY2sCATsAAQQKYnVmZkVmZmVjdAMJAAACBQhzZWdCcEF1eAIAAAAEBGF1eDAJAJEDAgkAtQkCBQhzZWdCcEF1eAIBLAAAAwkAAAIFBGF1eDACAAAABAZpZHhDbnQJALUJAgUEYXV4MAIBOgQDaWR4CQCRAwIFBmlkeENudAAABANjbnQJAJEDAgUGaWR4Q250AAEDAwMDAwkAAAIFA2lkeAICMDYGCQAAAgUDaWR4AgIwNwYJAAACBQNpZHgCAjA4CQECIT0CBQNjbnQCAAcJAGYCCQENcGFyc2VJbnRWYWx1ZQEFA2NudAAABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4CQENcGFyc2VJbnRWYWx1ZQEFA2lkeAIBXwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQVuZXdFcQUJdGVtcFByb2RCBwUFc3RhdHMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpAQ9mb3J0aWZpY2F0ZUxhbmQCC2xhbmRBc3NldElkBHBsYW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQJZHVja1N0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQAAAcEB2ZvcnRLZXkJARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAEFC2xhbmRBc3NldElkBAxjdXJyZW50Rm9ydHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQdmb3J0S2V5Agw6MF8xNTowXzE4OjACAV8EBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEB2N1ckxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBARjdXJPCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAULdm9sT2NjdXBpZWQEBGN1ckYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQd2b2xGcmVlBAhuZXdGb3J0cwkAtQkCBQRwbGFuAgFfBA0kdDA5Nzk5Mzk4MTA4CQEFZm9ydEIGBQxjdXJyZW50Rm9ydHMJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgUCd2gFCXdoSWR4UHJvZAUEY3VyTwUEY3VyRgYFA25pbAQJdGVtcFByb2RCCAUNJHQwOTc5OTM5ODEwOAJfMQQFdGVtcE8IBQ0kdDA5Nzk5Mzk4MTA4Al8yBAV0ZW1wRggFDSR0MDk3OTkzOTgxMDgCXzMEDSR0MDk4MTExOTgyMDcJAQVmb3J0QgYFCG5ld0ZvcnRzBQl0ZW1wUHJvZEIFBXRlbXBPBQV0ZW1wRgcFCWR1Y2tTdGF0cwQIbmV3UHJvZEIIBQ0kdDA5ODExMTk4MjA3Al8xBARuZXdPCAUNJHQwOTgxMTE5ODIwNwJfMgQEbmV3RggFDSR0MDk4MTExOTgyMDcCXzMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQdjdXJMb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQRuZXdPCQDMCAIJAKQDAQUEbmV3RgkAzAgCCQCRAwIFB2N1ckxvZnQFCHZvbFRvdGFsBQNuaWwCAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQdmb3J0S2V5BQRwbGFuCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARNpbml0RHVja1RvdXJBdHRlbXB0AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQMdG91ckxvY2F0aW9uCQCsAgIJAKQDAQUGbGFzdElkAgRfVF8wCQCUCgIJAMwIAgUMcHJvbG9nQWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUMdG91ckxvY2F0aW9uBQNuaWwFDHRvdXJMb2NhdGlvbgFpAQxicmVha0F0dGVtcHQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQECIT0CCQCRAwIJALUJAgULY3VyTG9jYXRpb24CAV8FCmxvY0lkeFR5cGUCAVQJAAIBAiJZb3VyIGR1Y2sgaXMgbm90IGluIHRoZSB0b3VybmFtZW50BAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCBQxwcm9sb2dBY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUNc2F2ZWRMb2NhdGlvbgUDbmlsBQtjdXJMb2NhdGlvbgFpARZleGl0VG91cm5hbWVudEludGVybmFsAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24FA25pbAcBaQEUZXhpdERlbGl2ZXJ5SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQtkdWNrQXNzZXRJZAIUTkZUIGR1Y2sgaXMgb3JwaGFuZWQECWhlYWx0aEtleQkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJY3VySGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBBQloZWFsdGhLZXkEDm91dGNvbWVBY3Rpb25zAwkAZwIFCGRpc3RhbmNlAAMEBnJld2FyZAkA/AcEBQ9lY29ub215Q29udHJhY3QCEnNlbmREZWxpdmVyeVJld2FyZAkAzAgCBQVvd25lcgUDbmlsBQNuaWwDCQAAAgUGcmV3YXJkBQZyZXdhcmQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQLbG9ja2VkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BRFkZWxpdmVyeUxvY2tlZEtleQAABAZ1bmxvY2sJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhR1cGRhdGVEZWxpdmVyeUxvY2tlZAkAzAgCCQBlAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sDCQBnAgAABQljdXJIZWFsdGgFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleURlbGl2ZXJ5RGVsYXlCeUR1Y2sBBQtkdWNrQXNzZXRJZAkAZAIFCXN0YXJ0VGltZQUJREFZTUlMTElTBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDNCAIJAM0IAgUOb3V0Y29tZUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQloZWFsdGhLZXkFC3NhdmVkSGVhbHRoCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24HAWkBDnByZXBhcmVSb2JiZXJ5AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUKd2xnQXNzZXRJZAkAAgECFVdMR09MRCBwYXltZW50cyBvbmx5IQQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgF8AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIUV3JvbmcgbWVzc2FnZSBmb3JtYXQEC2R1Y2tBc3NldElkCQCRAwIFBXBhcnRzAAAEB3JvYkNvc3QICQEOZ2V0Um9iYmVyeURhdGECBQR0aGlzBQtkdWNrQXNzZXRJZAJfMQMJAGYCBQdyb2JDb3N0BQZ3bGdBbXQJAAIBCQCsAgIJAKwCAgkArAICAghQYXltZW50IAkApAMBBQZ3bGdBbXQCDCA8IHJlcXVpcmVkIAkApAMBBQdyb2JDb3N0BApjYW5kaWRhdGVzCQC1CQIJAJEDAgUFcGFydHMAAQIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQAAAQKbG9ja2VkTGFuZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAMDCQECIT0CBQlkdWNrU3RhdGUFC2R1Y2tJZHhGcmVlCQBmAgUHbGFuZEVUQQUDbm93BwkAAgEJAKwCAgInWW91IGFscmVhZHkgc3RhcnRlZCByb2JiaW5nLCB3YWl0IHRpbGwgCQCkAwEFB2xhbmRFVEEKAQdjaGVja2VyAgNhY2MLbGFuZEFzc2V0SWQEBXN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQAAAQLY29vbGRvd25FVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkAAADCQBmAgUFc3RhdGUJAJADAQUQbGFuZFJvYkNvb2xkb3ducwkAAgECDUludmFsaWQgc3RhdGUDCQBmAgUDbm93BQtjb29sZG93bkVUQQQKc3Rha2VkVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAADCQBnAgAABQpzdGFrZWRUaW1lBQNhY2MEAWEJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQBZAkAtQkCCAUBYQtkZXNjcmlwdGlvbgIBXwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQMcHJvZHVjdGl2aXR5CQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJZGVsdGFUaW1lCQBlAgUDbm93BQpzdGFrZWRUaW1lBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFDHByb2R1Y3Rpdml0eQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUOTUlOX1JFU19UT19ST0IFCGF2YWlsUmVzBQNhY2MJAM0IAgUDYWNjBQtsYW5kQXNzZXRJZAUDYWNjBAhmaWx0ZXJlZAoAAiRsBQpjYW5kaWRhdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIJAJADAQUIZmlsdGVyZWQAAAkAAgECGU5vIGNhbmRpZGF0ZXMgZm9yIHJvYmJlcnkEBnJuZElkeAkBD2dldFJhbmRvbU51bWJlcgMJAJADAQUIZmlsdGVyZWQFBmhlaWdodAkAywECBQNzaWcIBQFpDXRyYW5zYWN0aW9uSWQEC2xhbmRBc3NldElkCQCRAwIFCGZpbHRlcmVkBQZybmRJZHgJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleUxhbmRSb2JiZXJ5U3RhdGUBBQtsYW5kQXNzZXRJZAUMcm9iSWR4TG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TGFuZENvb2xkb3duRVRBAQULbGFuZEFzc2V0SWQJAGQCBQNub3cJAJEDAgUQbGFuZFJvYkNvb2xkb3ducwUMcm9iSWR4TG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkBRBkdWNrSWR4UHJlcGFyaW5nCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlMb2NrZWRMYW5kQnlEdWNrAQULZHVja0Fzc2V0SWQFC2xhbmRBc3NldElkCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQtsYW5kQXNzZXRJZAFpAQdyb2JMYW5kAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQCUCgIJAMwIAgUMcHJvbG9nQWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQFA25vdwUDbmlsAAABaQEOYWNjZXB0RGVsaXZlcnkAAwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAURZGVsaXZlcnlMb2NrZWRLZXkAAAMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkJAGUCBQlmdW5kVG90YWwFC2xvY2tlZFRvdGFsCQACAQkArAICCQCsAgIJAKwCAgIgRGVsaXZlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZD0JAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAYCCSwgbG9ja2VkPQkBCmZpeGVkUG9pbnQCBQtsb2NrZWRUb3RhbAAGBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhkZWxheUVUQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkAAADCQBmAgUIZGVsYXlFVEEFA25vdwkAAgEJAKwCAgIqRGVsaXZlcnkgaXMgZm9yYmlkZGVuIGZvciB5b3VyIGR1Y2sgdW50aWwgCQCkAwEFCGRlbGF5RVRBAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIeYWNjZXB0RGVsaXZlcnlfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECHGFjY2VwdERlbGl2ZXJ5X2NoZWNrRGVsaXZlcnkEDm5ld0xvY2tlZFRvdGFsCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIUdXBkYXRlRGVsaXZlcnlMb2NrZWQJAMwIAgkAZAIFC2xvY2tlZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQQZGVsaXZlcnlMb2NhdGlvbgkArAICCQCkAwEFA25vdwIEX0RfMAkAlAoCCQDMCAIFDHByb2xvZ0FjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQFCWN1ckhlYWx0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVtYXhIUAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFEGRlbGl2ZXJ5TG9jYXRpb24FA25pbAkAlAoCBRBkZWxpdmVyeUxvY2F0aW9uBQ5uZXdMb2NrZWRUb3RhbADfahVG", "height": 2766947, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HtbEAwFirdhETNzJKDa2ujMfb3udqtbRryyuY5Pv1bzR Next: 7j34EtuKEvVTLxQkXEdxVXzBS6knWJGGToPdzcTbUEZ3 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func a (b) = ("lastArbTimeUser_" + b)
5-
6-
7-let c = 100000000
8-
9-let d = 3200
10-
11-let e = 4000
12-
13-let f = 3
14-
15-let g = 100000000
16-
17-let h = 400
18-
19-let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
20-
21-let j = 0
22-
23-let k = 1
24-
25-let l = 2
26-
27-let m = 3
28-
29-let n = 4
30-
31-let o = 0
32-
33-let p = 6
34-
35-let q = 2
4+let a = 86400000
5+
6+func b (c) = ("lastArbTimeUser_" + c)
7+
8+
9+let d = 100000000
10+
11+let e = 3200
12+
13+let f = 4000
14+
15+let g = 3
16+
17+let h = 100000000
18+
19+let i = 400
20+
21+let j = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
22+
23+let k = 0
24+
25+let l = 1
26+
27+let m = 2
28+
29+let n = 3
30+
31+let o = 4
32+
33+let p = 0
34+
35+let q = 6
3636
3737 let r = 2
3838
39-let s = 30
40-
41-let t = [0, 600000, 900000, 43200000, 21600000]
42-
43-let u = 20000000
44-
45-let v = 1
46-
47-let w = 0
48-
49-let x = 1
50-
51-func y (z) = ("duckHealth_" + z)
52-
53-
54-func A (z) = ("duckChars_" + z)
55-
56-
57-func B (z) = ("duckXP_" + z)
58-
59-
60-func C (z) = ("duckLevel_" + z)
61-
62-
63-func D (z) = ("duckFreePoints_" + z)
64-
65-
66-func E (z) = ("duckEquipment_" + z)
67-
68-
69-func F (b) = ("userXP_" + b)
70-
71-
72-func G (b) = ("userLevel_" + b)
73-
74-
75-func H (b) = ("userFreePoints_" + b)
76-
77-
78-func I (z) = ("savedHealth_" + z)
79-
80-
81-func J (z) = ("savedLocation_" + z)
82-
83-
84-func K (z) = ("duckBuffs_" + z)
85-
86-
87-func L (z) = ("lastRobberyTime_" + z)
88-
89-
90-func M (z) = ("lastRobberyCost_" + z)
91-
92-
93-func N (O) = ("landRobberyState_" + O)
94-
95-
96-func P (O) = ("landCooldownETA_" + O)
97-
98-
99-func Q (z) = ("duckRobberyState_" + z)
100-
101-
102-func R (z) = ("lockedLandByDuck_" + z)
103-
104-
105-let S = 10000
106-
107-let T = 10000
108-
109-let U = 2000
110-
111-let V = 100000
112-
113-let W = 1000000
114-
115-let X = 5000000
116-
117-let Y = 10000
118-
119-let Z = 1000000
120-
121-let aa = 1000000
122-
123-let ab = 10000
124-
125-func ac (ad) = fraction(d, pow(ad, 4, e, 4, 4, DOWN), c)
126-
127-
128-func ae (af) = (100 + af)
129-
130-
131-func ag (ah,ai) = {
132- let aj = ac(ai)
133-[aj, (f * (aj - ah))]
134- }
135-
136-
137-func ak (al,z,am,an) = {
138- let ao = split(valueOrElse(getString(al, A(z)), "0_0_0_0_0"), "_")
139- let ap = valueOrElse(getInteger(al, C(z)), 0)
140- let aq = valueOrElse(getInteger(al, y(z)), ae(ap))
141- let ar = split(valueOrElse(getString(al, K(z)), "0_0_0_0_0"), "_")
142- ([parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n]), ap, aq] ++ (if (an)
143- then [am, am, am, am, am]
144- else [parseIntValue(ar[j]), parseIntValue(ar[k]), parseIntValue(ar[l]), parseIntValue(ar[m]), parseIntValue(ar[n])]))
145- }
146-
147-
148-func as (al,z) = {
149- let at = valueOrElse(getInteger(al, M(z)), 0)
150- let au = valueOrElse(getInteger(al, L(z)), 0)
151- let av = lastBlock.timestamp
152- let aw = max([g, (at - (h * (av - au)))])
153- let ax = valueOrElse(getInteger(al, Q(z)), 0)
154- let ay = valueOrElse(getString(al, R(z)), "")
155- let az = valueOrElse(getInteger(al, P(ay)), 0)
156- $Tuple5(aw, au, ax, ay, az)
157- }
158-
159-
160-let aA = "LAND"
161-
162-let aB = "DUCK"
163-
164-let aC = "PRESALE"
165-
166-let aD = 6
167-
168-let aE = 25
169-
170-let aF = 3456000
171-
172-let aG = 86400000
173-
174-let aH = 10000000000
175-
176-let aI = "Africa_F_Africa"
177-
178-let aJ = 39637
179-
180-let aK = 10
181-
182-let aL = 50000
183-
184-let aM = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
185-
186-let aN = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
187-
188-let aO = 10000000
189-
190-let aP = [15, 16, 17, 18, 19, 20]
191-
192-let aQ = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
193-
194-let aR = 6
195-
196-let aS = 8
197-
198-let aT = 9
199-
200-let aU = 10
39+let s = 2
40+
41+let t = 30
42+
43+let u = [0, 600000, 900000, 43200000, 21600000]
44+
45+let v = 20000000
46+
47+let w = 1
48+
49+let x = 0
50+
51+let y = 1
52+
53+func z (A) = ("duckHealth_" + A)
54+
55+
56+func B (A) = ("duckChars_" + A)
57+
58+
59+func C (A) = ("duckXP_" + A)
60+
61+
62+func D (A) = ("duckLevel_" + A)
63+
64+
65+func E (A) = ("duckFreePoints_" + A)
66+
67+
68+func F (A) = ("duckEquipment_" + A)
69+
70+
71+func G (c) = ("userXP_" + c)
72+
73+
74+func H (c) = ("userLevel_" + c)
75+
76+
77+func I (c) = ("userFreePoints_" + c)
78+
79+
80+func J (A) = ("savedHealth_" + A)
81+
82+
83+func K (A) = ("savedLocation_" + A)
84+
85+
86+func L (A) = ("duckBuffs_" + A)
87+
88+
89+func M (A) = ("lastRobberyTime_" + A)
90+
91+
92+func N (A) = ("lastRobberyCost_" + A)
93+
94+
95+func O (P) = ("landRobberyState_" + P)
96+
97+
98+func Q (P) = ("landCooldownETA_" + P)
99+
100+
101+func R (A) = ("duckRobberyState_" + A)
102+
103+
104+func S (A) = ("lockedLandByDuck_" + A)
105+
106+
107+func T (A) = ("deliveryDelayByDuck_" + A)
108+
109+
110+let U = 10000
111+
112+let V = 10000
113+
114+let W = 2000
115+
116+let X = 100000
117+
118+let Y = 1000000
119+
120+let Z = 5000000
121+
122+let aa = 10000
123+
124+let ab = 1000000
125+
126+let ac = 1000000
127+
128+let ad = 10000
129+
130+func ae (af) = fraction(e, pow(af, 4, f, 4, 4, DOWN), d)
131+
132+
133+func ag (ah) = (100 + ah)
134+
135+
136+func ai (aj,ak) = {
137+ let al = ae(ak)
138+[al, (g * (al - aj))]
139+ }
140+
141+
142+func am (an,A,ao,ap) = {
143+ let aq = split(valueOrElse(getString(an, B(A)), "0_0_0_0_0"), "_")
144+ let ar = valueOrElse(getInteger(an, D(A)), 0)
145+ let as = valueOrElse(getInteger(an, z(A)), ag(ar))
146+ let at = split(valueOrElse(getString(an, L(A)), "0_0_0_0_0"), "_")
147+ ([parseIntValue(aq[k]), parseIntValue(aq[l]), parseIntValue(aq[m]), parseIntValue(aq[n]), parseIntValue(aq[o]), ar, as] ++ (if (ap)
148+ then [ao, ao, ao, ao, ao]
149+ else [parseIntValue(at[k]), parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o])]))
150+ }
151+
152+
153+func au (an,A) = {
154+ let av = valueOrElse(getInteger(an, N(A)), 0)
155+ let aw = valueOrElse(getInteger(an, M(A)), 0)
156+ let ax = lastBlock.timestamp
157+ let ay = max([h, (av - (i * (ax - aw)))])
158+ let az = valueOrElse(getInteger(an, R(A)), 0)
159+ let aA = valueOrElse(getString(an, S(A)), "")
160+ let aB = valueOrElse(getInteger(an, Q(aA)), 0)
161+ $Tuple5(ay, aw, az, aA, aB)
162+ }
163+
164+
165+let aC = "LAND"
166+
167+let aD = "DUCK"
168+
169+let aE = "PRESALE"
170+
171+let aF = 6
172+
173+let aG = 25
174+
175+let aH = 3456000
176+
177+let aI = 10000000000
178+
179+let aJ = "Africa_F_Africa"
180+
181+let aK = 39637
182+
183+let aL = 10
184+
185+let aM = 50000
186+
187+let aN = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
188+
189+let aO = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
190+
191+let aP = 10000000
192+
193+let aQ = [15, 16, 17, 18, 19, 20]
194+
195+let aR = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
196+
197+let aS = 6
198+
199+let aT = 8
200+
201+let aU = 9
201202
202203 let aV = 10
203204
204-let aW = 0
205-
206-let aX = 1
207-
208-let aY = 2
209-
210-let aZ = 3
211-
212-let ba = 4
213-
214-let bb = 0
215-
216-let bc = 1
217-
218-let bd = 2
219-
220-let be = 3
221-
222-let bf = 0
223-
224-let bg = 1
225-
226-let bh = 2
227-
228-let bi = 3
229-
230-let bj = 0
231-
232-let bk = 1
233-
234-let bl = 2
235-
236-func bm (bn) = ("no_" + bn)
237-
238-
239-func bo (bn) = ("lcna_" + bn)
240-
241-
242-func bp (bn) = ("st_" + bn)
243-
244-
245-func bq (br,bn) = makeString(["las", br, bn], "_")
246-
247-
248-func bs (bt,bn,bu) = ((((("sttao_" + bt) + "_") + bn) + "_") + bu)
249-
250-
251-func bv (O) = ("wh_" + O)
252-
253-
254-func bw (bn) = ("infraLevel_" + bn)
255-
256-
257-func bx (O) = ("fortifications_" + O)
258-
259-
260-func by (bn) = ("duckCustomNameByAssetId_" + bn)
261-
262-
263-func bz (b) = ("accountCustomNameByAddr_" + b)
264-
265-
266-func bA (b) = ("accRefBy_" + b)
267-
268-
269-func bB (z) = ("onboardArtActivatedOnDuck_" + z)
270-
271-
272-func bC (b) = ("onboardArtActivatedDuckBy_" + b)
273-
274-
275-func bD (b) = ("accReferrals_" + b)
276-
277-
278-func bE (bn) = ("duckOwner_" + bn)
279-
280-
281-func bF (bu) = ("stakedDuckByOwner_" + bu)
282-
283-
284-func bG (z) = ("backPack_" + z)
285-
286-
287-func bH (z) = ("duckLocation_" + z)
288-
289-
290-func bI (bJ) = ("%s%s__userGwlReleaseTime__" + bJ)
291-
292-
293-func bK () = "emergencyWarehouseProducts"
294-
295-
296-let bL = "deliveryFund"
297-
298-let bM = "%s__lastTourId"
299-
300-func bN (bO) = ("%s%d__tourStaticData__" + toString(bO))
301-
302-
303-func bP (bO) = ("%s%d__tourDynamicData__" + toString(bO))
304-
305-
306-func bQ (bO,z) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bO), z], "__")
307-
308-
309-let bR = 0
310-
311-let bS = 1
312-
313-let bT = 6
205+let aW = 10
206+
207+let aX = 0
208+
209+let aY = 1
210+
211+let aZ = 2
212+
213+let ba = 3
214+
215+let bb = 4
216+
217+let bc = 0
218+
219+let bd = 1
220+
221+let be = 2
222+
223+let bf = 3
224+
225+let bg = 0
226+
227+let bh = 1
228+
229+let bi = 2
230+
231+let bj = 3
232+
233+let bk = 0
234+
235+let bl = 1
236+
237+let bm = 2
238+
239+func bn (bo) = ("no_" + bo)
240+
241+
242+func bp (bo) = ("lcna_" + bo)
243+
244+
245+func bq (bo) = ("st_" + bo)
246+
247+
248+func br (bs,bo) = makeString(["las", bs, bo], "_")
249+
250+
251+func bt (bu,bo,bv) = ((((("sttao_" + bu) + "_") + bo) + "_") + bv)
252+
253+
254+func bw (P) = ("wh_" + P)
255+
256+
257+func bx (bo) = ("infraLevel_" + bo)
258+
259+
260+func by (P) = ("fortifications_" + P)
261+
262+
263+func bz (bo) = ("duckCustomNameByAssetId_" + bo)
264+
265+
266+func bA (c) = ("accountCustomNameByAddr_" + c)
267+
268+
269+func bB (c) = ("accRefBy_" + c)
270+
271+
272+func bC (A) = ("onboardArtActivatedOnDuck_" + A)
273+
274+
275+func bD (c) = ("onboardArtActivatedDuckBy_" + c)
276+
277+
278+func bE (c) = ("accReferrals_" + c)
279+
280+
281+func bF (bo) = ("duckOwner_" + bo)
282+
283+
284+func bG (bv) = ("stakedDuckByOwner_" + bv)
285+
286+
287+func bH (A) = ("backPack_" + A)
288+
289+
290+func bI (A) = ("duckLocation_" + A)
291+
292+
293+func bJ (bK) = ("%s%s__userGwlReleaseTime__" + bK)
294+
295+
296+func bL () = "emergencyWarehouseProducts"
297+
298+
299+let bM = "deliveryFund"
300+
301+let bN = "deliveryLocked"
302+
303+let bO = "%s__lastTourId"
304+
305+func bP (bQ) = ("%s%d__tourStaticData__" + toString(bQ))
306+
307+
308+func bR (bQ) = ("%s%d__tourDynamicData__" + toString(bQ))
309+
310+
311+func bS (bQ,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bQ), A], "__")
312+
313+
314+let bT = 0
314315
315316 let bU = 1
316317
317-func bV (bW,bO) = {
318- let bX = split(valueOrErrorMessage(getString(bW, bN(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__")
319- let bY = split_4C(valueOrErrorMessage(getString(bW, bP(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__")
320-[bX, bY]
321- }
322-
323-
324-func bZ (bW,ca) = {
325- let cb = valueOrElse(getInteger(bW, bM), 0)
326- let cc = split(ca, "_")
327- let av = lastBlock.timestamp
328- let cd = bV(bW, cb)
329- let bX = cd[bR]
330- let bY = cd[bS]
331- if (if (if ((cc[bk] == "T"))
332- then (parseIntValue(cc[bj]) == cb)
318+let bV = 6
319+
320+let bW = 1
321+
322+func bX (bY,bQ) = {
323+ let bZ = split(valueOrErrorMessage(getString(bY, bP(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
324+ let ca = split_4C(valueOrErrorMessage(getString(bY, bR(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
325+[bZ, ca]
326+ }
327+
328+
329+func cb (bY,cc) = {
330+ let cd = valueOrElse(getInteger(bY, bO), 0)
331+ let ce = split(cc, "_")
332+ let ax = lastBlock.timestamp
333+ let cf = bX(bY, cd)
334+ let bZ = cf[bT]
335+ let ca = cf[bU]
336+ if (if (if ((ce[bl] == "T"))
337+ then (parseIntValue(ce[bk]) == cd)
333338 else false)
334- then (bY[bU] == "INPROGRESS")
339+ then (ca[bW] == "INPROGRESS")
335340 else false)
336- then (parseIntValue(bX[bT]) > av)
341+ then (parseIntValue(bZ[bV]) > ax)
337342 else false
338343 }
339344
340345
341-func ce (cf) = (parseIntValue(cf[aR]) * aO)
342-
343-
344-let cg = false
345-
346-let ch = false
347-
348-let ci = true
349-
350-let cj = take(drop(this.bytes, 1), 1)
351-
352-let ck = {
353- let cl = cj
354- if ((base58'2W' == cl))
346+func cg (ch) = (parseIntValue(ch[aS]) * aP)
347+
348+
349+let ci = false
350+
351+let cj = false
352+
353+let ck = true
354+
355+let cl = take(drop(this.bytes, 1), 1)
356+
357+let cm = {
358+ let cn = cl
359+ if ((base58'2W' == cn))
355360 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
356- else if ((base58'2T' == cl))
361+ else if ((base58'2T' == cn))
357362 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
358363 else throw("Unknown chain")
359364 }
360365
361-let cm = {
362- let cl = cj
363- if ((base58'2W' == cl))
366+let co = {
367+ let cn = cl
368+ if ((base58'2W' == cn))
364369 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
365- else if ((base58'2T' == cl))
370+ else if ((base58'2T' == cn))
366371 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
367372 else throw("Unknown chain")
368373 }
369374
370-let cn = {
371- let cl = cj
372- if ((base58'2W' == cl))
375+let cp = {
376+ let cn = cl
377+ if ((base58'2W' == cn))
373378 then 10000000000
374- else if ((base58'2T' == cl))
379+ else if ((base58'2T' == cn))
375380 then 100000000
376381 else throw("Unknown chain")
377382 }
378383
379-let co = {
380- let cl = cj
381- if ((base58'2W' == cl))
384+let cq = {
385+ let cn = cl
386+ if ((base58'2W' == cn))
382387 then 86400000
383- else if ((base58'2T' == cl))
388+ else if ((base58'2T' == cn))
384389 then 60000
385390 else throw("Unknown chain")
386391 }
387392
388-let cp = "__"
389-
390-let cq = 1000000
391-
392-let cr = 100000000
393-
394-let cs = 25
395-
396-let ct = 100
397-
398-let cu = 225
399-
400-let cv = 400
401-
402-let cw = 625
403-
404-let cx = [0, 1, 2, 3, 4, 5]
405-
406-func cy (cz,cA) = valueOrErrorMessage(getString(cz, cA), makeString(["mandatory ", toString(cz), ".", cA, " is not defined"], ""))
407-
408-
409-let cB = 1
410-
411-let cC = 2
412-
413-let cD = 3
414-
415-let cE = 4
416-
417-let cF = 7
418-
419-let cG = 8
420-
421-func cH () = "%s__restConfig"
422-
423-
424-func cI () = "%s__restAddr"
425-
426-
427-func cJ (cK) = split_4C(cy(cK, cH()), cp)
428-
429-
430-func cL (cM,cN) = valueOrErrorMessage(addressFromString(cM[cN]), ("Rest cfg doesn't contain address at index " + toString(cN)))
431-
432-
433-let cO = addressFromStringValue(valueOrElse(getString(this, cI()), cm))
434-
435-let cM = cJ(cO)
436-
437-let al = cL(cM, cB)
438-
439-let cP = cL(cM, cC)
440-
441-let cQ = cL(cM, cD)
442-
443-let cR = cL(cM, cE)
444-
445-let cS = cL(cM, cF)
446-
447-let cT = cL(cM, cG)
448-
449-let cU = 0
450-
451-let cV = 1
452-
453-let cW = 2
454-
455-let cX = 3
456-
457-let cY = "wlg_assetId"
458-
459-let cZ = valueOrErrorMessage(getBinary(cR, cY), "WLGOLD is not issued yet")
460-
461-let da = "acresAssetId"
462-
463-let db = valueOrErrorMessage(getBinary(cT, da), "ACRES is not issued yet")
464-
465-let dc = 2
466-
467-func dd (cz) = ("finishBlockForAddr_" + cz)
468-
469-
470-func de () = "resTypesProportions"
471-
472-
473-func df (dg) = ("resTypesByContinent_" + dg)
474-
475-
476-func dh (bu) = ("stakedLandsByOwner_" + bu)
477-
478-
479-func di (bu) = ("stakedPiecesByOwner_" + bu)
480-
481-
482-func dj (dk) = {
483- let cl = dk
484- if ($isInstanceOf(cl, "String"))
393+let cr = "__"
394+
395+let cs = 1000000
396+
397+let ct = 100000000
398+
399+let cu = 25
400+
401+let cv = 100
402+
403+let cw = 225
404+
405+let cx = 400
406+
407+let cy = 625
408+
409+let cz = [0, 1, 2, 3, 4, 5]
410+
411+func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
412+
413+
414+let cD = 1
415+
416+let cE = 2
417+
418+let cF = 3
419+
420+let cG = 4
421+
422+let cH = 7
423+
424+let cI = 8
425+
426+func cJ () = "%s__restConfig"
427+
428+
429+func cK () = "%s__restAddr"
430+
431+
432+func cL (cM) = split_4C(cA(cM, cJ()), cr)
433+
434+
435+func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
436+
437+
438+let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
439+
440+let cO = cL(cQ)
441+
442+let an = cN(cO, cD)
443+
444+let cR = cN(cO, cE)
445+
446+let cS = cN(cO, cF)
447+
448+let cT = cN(cO, cG)
449+
450+let cU = cN(cO, cH)
451+
452+let cV = cN(cO, cI)
453+
454+let cW = 0
455+
456+let cX = 1
457+
458+let cY = 2
459+
460+let cZ = 3
461+
462+let da = "wlg_assetId"
463+
464+let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
465+
466+let dc = "acresAssetId"
467+
468+let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
469+
470+let de = 2
471+
472+func df (cB) = ("finishBlockForAddr_" + cB)
473+
474+
475+func dg () = "resTypesProportions"
476+
477+
478+func dh (di) = ("resTypesByContinent_" + di)
479+
480+
481+func dj (bv) = ("stakedLandsByOwner_" + bv)
482+
483+
484+func dk (bv) = ("stakedPiecesByOwner_" + bv)
485+
486+
487+func dl (dm) = {
488+ let cn = dm
489+ if ($isInstanceOf(cn, "String"))
485490 then {
486- let dl = cl
487- dl
491+ let dn = cn
492+ dn
488493 }
489494 else throw("fail to cast into String")
490495 }
491496
492497
493-func dm (dk) = {
494- let cl = dk
495- if ($isInstanceOf(cl, "Int"))
498+func do (dm) = {
499+ let cn = dm
500+ if ($isInstanceOf(cn, "Int"))
496501 then {
497- let dn = cl
502+ let dp = cn
503+ dp
504+ }
505+ else throw("fail to cast into Int")
506+ }
507+
508+
509+func dq (dm) = {
510+ let cn = dm
511+ if ($isInstanceOf(cn, "Boolean"))
512+ then {
513+ let dn = cn
498514 dn
499515 }
500- else throw("fail to cast into Int")
501- }
502-
503-
504-func do (dk) = {
505- let cl = dk
506- if ($isInstanceOf(cl, "Boolean"))
507- then {
508- let dl = cl
509- dl
510- }
511516 else throw("fail to cast into Boolean")
512517 }
513518
514519
515-func dp (dq) = {
516- let cl = dq
517- if (("S" == cl))
518- then cs
519- else if (("M" == cl))
520- then ct
521- else if (("L" == cl))
522- then cu
523- else if (("XL" == cl))
524- then cv
525- else if (("XXL" == cl))
526- then cw
520+func dr (ds) = {
521+ let cn = ds
522+ if (("S" == cn))
523+ then cu
524+ else if (("M" == cn))
525+ then cv
526+ else if (("L" == cn))
527+ then cw
528+ else if (("XL" == cn))
529+ then cx
530+ else if (("XXL" == cn))
531+ then cy
527532 else throw("Unknown land size")
528533 }
529534
530535
531-func dr (dl) = isDefined(parseInt(dl))
532-
533-
534-func ds () = "contractsBlocked"
535-
536-
537-func dt (b) = ("lastTxIdByUser_" + b)
538-
539-
540-func du (dv,dw,dx) = {
541- let dy = value(blockInfoByHeight(dw))
542- let dz = sha256((value(dy.vrf) + dx))
543- (toInt(dz) % dv)
544- }
545-
546-
547-let dA = {
548- let cl = cj
549- if ((base58'2W' == cl))
536+func dt (dn) = isDefined(parseInt(dn))
537+
538+
539+func du () = "contractsBlocked"
540+
541+
542+func dv (c) = ("lastTxIdByUser_" + c)
543+
544+
545+func dw (dx,dy) = {
546+ let dz = pow(10, 0, dy, 0, 0, DOWN)
547+ let dA = toString((dx % dz))
548+ let dB = drop(toString(dz), (1 + size(dA)))
549+ (((toString((dx / dz)) + ".") + dB) + dA)
550+ }
551+
552+
553+func dC (dD,dE,dF) = {
554+ let dG = value(blockInfoByHeight(dE))
555+ let dH = sha256((value(dG.vrf) + dF))
556+ (toInt(dH) % dD)
557+ }
558+
559+
560+let dI = {
561+ let cn = cl
562+ if ((base58'2W' == cn))
550563 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
551- else if ((base58'2T' == cl))
564+ else if ((base58'2T' == cn))
552565 then this
553566 else throw("Unknown chain")
554567 }
555568
556-let dB = {
557- let cl = cj
558- if ((base58'2W' == cl))
569+let dJ = {
570+ let cn = cl
571+ if ((base58'2W' == cn))
559572 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
560- else if ((base58'2T' == cl))
573+ else if ((base58'2T' == cn))
561574 then this
562575 else throw("Unknown chain")
563576 }
564577
565-let dC = {
566- let cl = cj
567- if ((base58'2W' == cl))
568- then if (cg)
578+let dK = {
579+ let cn = cl
580+ if ((base58'2W' == cn))
581+ then if (ci)
569582 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
570583 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
571- else if ((base58'2T' == cl))
584+ else if ((base58'2T' == cn))
572585 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
573586 else throw("Unknown chain")
574587 }
575588
576-let dD = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
577-
578-let dE = 300000
579-
580-let dF = 5000000
581-
582-let dG = 50
583-
584-let dH = 10000000
585-
586-let dI = {
587- let cl = cj
588- if ((base58'2W' == cl))
589+let dL = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
590+
591+let dM = 300000
592+
593+let dN = 600000
594+
595+let dO = 5000000
596+
597+let dP = 50
598+
599+let dQ = 10000000
600+
601+let dR = {
602+ let cn = cl
603+ if ((base58'2W' == cn))
589604 then 252289527462
590- else if ((base58'2T' == cl))
605+ else if ((base58'2T' == cn))
591606 then 2522895274
592607 else throw("Unknown chain")
593608 }
594609
595-let dJ = {
596- let cl = cj
597- if ((base58'2W' == cl))
610+let dS = {
611+ let cn = cl
612+ if ((base58'2W' == cn))
598613 then 250000000
599- else if ((base58'2T' == cl))
614+ else if ((base58'2T' == cn))
600615 then 250000000
601616 else throw("Unknown chain")
602617 }
603618
604-let dK = 2500000000
605-
606-let dL = toBigInt(5)
607-
608-let dM = toBigInt(20)
609-
610-let dN = toBigInt((20 * 20))
611-
612-let dO = toBigInt(((20 * 20) * 20))
613-
614-let dP = toBigInt((((20 * 20) * 20) * 20))
615-
616-let dQ = toBigInt(((((20 * 20) * 20) * 20) * 20))
617-
618-let dR = 500
619-
620-func dS () = "nextLandNum"
621-
622-
623-func dT (dU) = ("lcn_" + dU)
624-
625-
626-func dV (dW) = ("la_" + dW)
627-
628-
629-func dX (bn,bu) = ((("ilao_" + bn) + "_") + bu)
630-
631-
632-func dY (dW) = ("lo_" + dW)
633-
634-
635-func dZ (dU) = ("duckByCustomName_" + dU)
636-
637-
638-func ea (dU) = ("accountByCustomName_" + dU)
639-
640-
641-func eb () = "oldiesList"
642-
643-
644-let ec = 0
645-
646-let ed = 1
647-
648-let ee = 2
649-
650-let ef = 0
651-
652-let eg = 5
653-
654-let eh = 6
655-
656-let ei = 7
657-
658-func ej (dW,dq) = ((aA + dW) + dq)
659-
660-
661-func ek (el,em) = {
662- let en = if ((el >= 0))
663- then (((el + em) - 1) / em)
664- else -((((-(el) + em) - 1) / em))
665- (en * cr)
666- }
667-
668-
669-func eo (ep,eq) = {
670- let er = (((((eq[0] + eq[1]) + eq[2]) + eq[3]) + eq[4]) + eq[5])
671- if ((0 >= er))
619+let dT = 2500000000
620+
621+let dU = toBigInt(5)
622+
623+let dV = toBigInt(20)
624+
625+let dW = toBigInt((20 * 20))
626+
627+let dX = toBigInt(((20 * 20) * 20))
628+
629+let dY = toBigInt((((20 * 20) * 20) * 20))
630+
631+let dZ = toBigInt(((((20 * 20) * 20) * 20) * 20))
632+
633+let ea = 500
634+
635+func eb () = "nextLandNum"
636+
637+
638+func ec (ed) = ("lcn_" + ed)
639+
640+
641+func ee (ef) = ("la_" + ef)
642+
643+
644+func eg (bo,bv) = ((("ilao_" + bo) + "_") + bv)
645+
646+
647+func eh (ef) = ("lo_" + ef)
648+
649+
650+func ei (ed) = ("duckByCustomName_" + ed)
651+
652+
653+func ej (ed) = ("accountByCustomName_" + ed)
654+
655+
656+func ek () = "oldiesList"
657+
658+
659+let el = 0
660+
661+let em = 1
662+
663+let en = 2
664+
665+let eo = 0
666+
667+let ep = 5
668+
669+let eq = 6
670+
671+let er = 7
672+
673+func es (ef,ds) = ((aC + ef) + ds)
674+
675+
676+func et (eu,ev) = {
677+ let ew = if ((eu >= 0))
678+ then (((eu + ev) - 1) / ev)
679+ else -((((-(eu) + ev) - 1) / ev))
680+ (ew * ct)
681+ }
682+
683+
684+func ex (ey,ez) = {
685+ let eA = (((((ez[0] + ez[1]) + ez[2]) + ez[3]) + ez[4]) + ez[5])
686+ if ((0 >= eA))
672687 then throw("Zero weights sum")
673688 else {
674- let es = fraction(ep, cq, er)
675- func et (eu,ev) = (eu :+ fraction(ev, es, cq))
676-
677- let ew = eq
678- let ex = size(ew)
679- let ey = nil
680- func ez (eA,eB) = if ((eB >= ex))
681- then eA
682- else et(eA, ew[eB])
683-
684- func eC (eA,eB) = if ((eB >= ex))
685- then eA
689+ let eB = fraction(ey, cs, eA)
690+ func eC (eD,eE) = (eD :+ fraction(eE, eB, cs))
691+
692+ let eF = ez
693+ let eG = size(eF)
694+ let eH = nil
695+ func eI (eJ,eK) = if ((eK >= eG))
696+ then eJ
697+ else eC(eJ, eF[eK])
698+
699+ func eL (eJ,eK) = if ((eK >= eG))
700+ then eJ
686701 else throw("List size exceeds 6")
687702
688- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
689- }
690- }
691-
692-
693-func eD (ep) = {
694- let eE = split(value(getString(de())), "_")
695- if ((size(eE) != aD))
703+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
704+ }
705+ }
706+
707+
708+func eM (ey) = {
709+ let eN = split(value(getString(dg())), "_")
710+ if ((size(eN) != aF))
696711 then throw("Wrong proportions data")
697712 else {
698- let eF = [parseIntValue(eE[0]), parseIntValue(eE[1]), parseIntValue(eE[2]), parseIntValue(eE[3]), parseIntValue(eE[4]), parseIntValue(eE[5])]
699- eo(ep, eF)
700- }
701- }
702-
703-
704-func eG (eH,eI,eJ) = {
705- let eK = eD(eJ)
706- func eL (eu,cN) = {
707- let eM = (parseIntValue(eI[cN]) - eK[cN])
708- if ((0 > eM))
709- then throw(((((("Not enough material idx=" + toString(cN)) + ", you have ") + eI[cN]) + ", but need ") + toString(eK[cN])))
710- else (eu :+ toString(eM))
713+ let eO = [parseIntValue(eN[0]), parseIntValue(eN[1]), parseIntValue(eN[2]), parseIntValue(eN[3]), parseIntValue(eN[4]), parseIntValue(eN[5])]
714+ ex(ey, eO)
715+ }
716+ }
717+
718+
719+func eP (eQ,eR,eS) = {
720+ let eT = eM(eS)
721+ func eU (eD,cP) = {
722+ let eV = (parseIntValue(eR[cP]) - eT[cP])
723+ if ((0 > eV))
724+ then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eR[cP]) + ", but need ") + toString(eT[cP])))
725+ else (eD :+ toString(eV))
711726 }
712727
713- if (eH)
728+ if (eQ)
714729 then {
715- let ew = cx
716- let ex = size(ew)
717- let ey = nil
718- func ez (eA,eB) = if ((eB >= ex))
719- then eA
720- else eL(eA, ew[eB])
721-
722- func eC (eA,eB) = if ((eB >= ex))
723- then eA
730+ let eF = cz
731+ let eG = size(eF)
732+ let eH = nil
733+ func eI (eJ,eK) = if ((eK >= eG))
734+ then eJ
735+ else eU(eJ, eF[eK])
736+
737+ func eL (eJ,eK) = if ((eK >= eG))
738+ then eJ
724739 else throw("List size exceeds 6")
725740
726- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
727- }
728- else eI
729- }
730-
731-
732-func eN (eO,eP) = if ((eP == ""))
733- then $Tuple2(eO, false)
741+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
742+ }
743+ else eR
744+ }
745+
746+
747+func eW (eX,eY) = if ((eY == ""))
748+ then $Tuple2(eX, false)
734749 else {
735- func eQ (eu,eR) = {
736- let eS = split(eR, ",")
737- if ((size(eS) != 2))
750+ func eZ (eD,fa) = {
751+ let fb = split(fa, ",")
752+ if ((size(fb) != 2))
738753 then throw("Incorrect format, should be index,amount")
739754 else {
740- let cN = parseIntValue(eS[0])
741- if (if ((0 > cN))
755+ let cP = parseIntValue(fb[0])
756+ if (if ((0 > cP))
742757 then true
743- else (cN >= size(aQ)))
758+ else (cP >= size(aR)))
744759 then throw("Unknown product idx")
745760 else {
746- let eT = parseIntValue(eS[1])
747- let eU = split(eu._1, (eS[0] + ":"))
748- if ((size(eU) != 2))
749- then throw((("You don't have " + aM[cN]) + " equipped"))
761+ let fc = parseIntValue(fb[1])
762+ let fd = split(eD._1, (fb[0] + ":"))
763+ if ((size(fd) != 2))
764+ then throw((("You don't have " + aN[cP]) + " equipped"))
750765 else {
751- let eV = eU[1]
752- let eW = if (dr(take(drop(eV, 1), 1)))
766+ let fe = fd[1]
767+ let ff = if (dt(take(drop(fe, 1), 1)))
753768 then 2
754769 else 1
755- let eX = parseIntValue(take(eV, eW))
756- let eY = drop(eV, eW)
757- let eZ = if ((eX >= eT))
758- then (eX - eT)
759- else throw(((((("You equipped " + toString(eX)) + " of ") + aM[cN]) + ", but tried to use ") + toString(eT)))
760- $Tuple2(((((eU[0] + eS[0]) + ":") + toString(eZ)) + eY), if (eu._2)
770+ let fg = parseIntValue(take(fe, ff))
771+ let fh = drop(fe, ff)
772+ let fi = if ((fg >= fc))
773+ then (fg - fc)
774+ else throw(((((("You equipped " + toString(fg)) + " of ") + aN[cP]) + ", but tried to use ") + toString(fc)))
775+ $Tuple2(((((fd[0] + fb[0]) + ":") + toString(fi)) + fh), if (eD._2)
761776 then true
762- else if (if ((cN >= 6))
763- then (8 >= cN)
777+ else if (if ((cP >= 6))
778+ then (8 >= cP)
764779 else false)
765- then (eZ == 0)
780+ then (fi == 0)
766781 else false)
767782 }
768783 }
769784 }
770785 }
771786
772- let ew = split(eP, "_")
773- let ex = size(ew)
774- let ey = $Tuple2(eO, false)
775- func ez (eA,eB) = if ((eB >= ex))
776- then eA
777- else eQ(eA, ew[eB])
778-
779- func eC (eA,eB) = if ((eB >= ex))
780- then eA
787+ let eF = split(eY, "_")
788+ let eG = size(eF)
789+ let eH = $Tuple2(eX, false)
790+ func eI (eJ,eK) = if ((eK >= eG))
791+ then eJ
792+ else eZ(eJ, eF[eK])
793+
794+ func eL (eJ,eK) = if ((eK >= eG))
795+ then eJ
781796 else throw("List size exceeds 10")
782797
783- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
798+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
784799 }
785800
786801
787-func fa (fb) = {
788- let fc = if ((fb == ""))
802+func fj (fk) = {
803+ let fl = if ((fk == ""))
789804 then nil
790- else split_4C(fb, "_")
791- func fd (eu,cf) = {
792- let fe = (size(eu) / 8)
793- let eX = if ((size(fc) > fe))
794- then parseIntValue(fc[fe])
805+ else split_4C(fk, "_")
806+ func fm (eD,ch) = {
807+ let fn = (size(eD) / 8)
808+ let fg = if ((size(fl) > fn))
809+ then parseIntValue(fl[fn])
795810 else 0
796- (eu + toBytes(eX))
811+ (eD + toBytes(fg))
797812 }
798813
799- let ew = aQ
800- let ex = size(ew)
801- let ey = base58''
802- func ez (eA,eB) = if ((eB >= ex))
803- then eA
804- else fd(eA, ew[eB])
805-
806- func eC (eA,eB) = if ((eB >= ex))
807- then eA
814+ let eF = aR
815+ let eG = size(eF)
816+ let eH = base58''
817+ func eI (eJ,eK) = if ((eK >= eG))
818+ then eJ
819+ else fm(eJ, eF[eK])
820+
821+ func eL (eJ,eK) = if ((eK >= eG))
822+ then eJ
808823 else throw("List size exceeds 50")
809824
810- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
811- }
812-
813-
814-func ff (fg) = {
815- func fh (eu,cf) = {
816- let fe = size(eu)
817- let fi = take(drop(fg, (8 * fe)), 8)
818- (eu :+ toString(toInt(fi)))
825+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
826+ }
827+
828+
829+func fo (fp) = {
830+ func fq (eD,ch) = {
831+ let fn = size(eD)
832+ let fr = take(drop(fp, (8 * fn)), 8)
833+ (eD :+ toString(toInt(fr)))
819834 }
820835
821836 makeString_2C({
822- let ew = aQ
823- let ex = size(ew)
824- let ey = nil
825- func ez (eA,eB) = if ((eB >= ex))
826- then eA
827- else fh(eA, ew[eB])
828-
829- func eC (eA,eB) = if ((eB >= ex))
830- then eA
837+ let eF = aR
838+ let eG = size(eF)
839+ let eH = nil
840+ func eI (eJ,eK) = if ((eK >= eG))
841+ then eJ
842+ else fq(eJ, eF[eK])
843+
844+ func eL (eJ,eK) = if ((eK >= eG))
845+ then eJ
831846 else throw("List size exceeds 50")
832847
833- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
848+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
834849 }, "_")
835850 }
836851
837852
838-func fj (fk,fl) = {
839- func fm (eu,fe) = {
840- let fn = if ((size(fk) > (7 + fe)))
841- then fk[(7 + fe)]
853+func fs (ft,fu) = {
854+ func fv (eD,fn) = {
855+ let fw = if ((size(ft) > (7 + fn)))
856+ then ft[(7 + fn)]
842857 else 0
843- if ((parseIntValue(fl[fe]) > (fk[fe] + fn)))
844- then throw(("Requirement not satisfied: " + i[fe]))
858+ if ((parseIntValue(fu[fn]) > (ft[fn] + fw)))
859+ then throw(("Requirement not satisfied: " + j[fn]))
845860 else true
846861 }
847862
848- let ew = [0, 1, 2, 3, 4, 5, 6]
849- let ex = size(ew)
850- let ey = false
851- func ez (eA,eB) = if ((eB >= ex))
852- then eA
853- else fm(eA, ew[eB])
854-
855- func eC (eA,eB) = if ((eB >= ex))
856- then eA
863+ let eF = [0, 1, 2, 3, 4, 5, 6]
864+ let eG = size(eF)
865+ let eH = false
866+ func eI (eJ,eK) = if ((eK >= eG))
867+ then eJ
868+ else fv(eJ, eF[eK])
869+
870+ func eL (eJ,eK) = if ((eK >= eG))
871+ then eJ
857872 else throw("List size exceeds 7")
858873
859- eC(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7)
860- }
861-
862-
863-func fo (fp,fc,fq,fk,fr,fs) = {
864- let eS = split(fp, ":")
865- if ((size(eS) != 2))
874+ eL(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7)
875+ }
876+
877+
878+func fx (fy,fl,fz,ft,fA,fB) = {
879+ let fb = split(fy, ":")
880+ if ((size(fb) != 2))
866881 then throw("Incorrect format, should be index:amount")
867- else if (if (!(fq))
868- then (size(eS[0]) != 2)
882+ else if (if (!(fz))
883+ then (size(fb[0]) != 2)
869884 else false)
870885 then throw("Product idx should be 2 digits, zero padded")
871886 else {
872- let ft = parseIntValue(eS[0])
873- let fu = parseIntValue(eS[1])
874- if (!(containsElement(aP, ft)))
875- then throw((("Product '" + aM[ft]) + "' cannot be used for land defense"))
876- else if ((0 > fu))
887+ let fC = parseIntValue(fb[0])
888+ let fD = parseIntValue(fb[1])
889+ if (!(containsElement(aQ, fC)))
890+ then throw((("Product '" + aN[fC]) + "' cannot be used for land defense"))
891+ else if ((0 > fD))
877892 then throw("Count can't be negative")
878- else if ((fu > s))
879- then throw(((("Can't put more than " + toString(s)) + " of ") + aM[ft]))
880- else if ((fu == 0))
881- then $Tuple3(fc, fr, fs)
893+ else if ((fD > t))
894+ then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
895+ else if ((fD == 0))
896+ then $Tuple3(fl, fA, fB)
882897 else {
883- let fv = take(fc, (8 * ft))
884- let eX = toInt(take(drop(fc, (8 * ft)), 8))
885- let eY = drop(fc, (8 * (ft + 1)))
886- let cf = split(aQ[ft], "_")
887- if (if (!(fq))
888- then (fu > eX)
898+ let fE = take(fl, (8 * fC))
899+ let fg = toInt(take(drop(fl, (8 * fC)), 8))
900+ let fh = drop(fl, (8 * (fC + 1)))
901+ let ch = split(aR[fC], "_")
902+ if (if (!(fz))
903+ then (fD > fg)
889904 else false)
890- then throw(((((("You have " + toString(eX)) + " of ") + aM[ft]) + ", but tried to use ") + toString(fu)))
905+ then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
891906 else {
892- let eZ = if (if (!(fq))
893- then fj(fk, split(cf[aT], ","))
907+ let fi = if (if (!(fz))
908+ then fs(ft, split(ch[aU], ","))
894909 else false)
895- then (eX - fu)
896- else (eX + fu)
897- let fw = (ek(eZ, aV) - ek(eX, aV))
898- $Tuple3(((fv + toBytes(eZ)) + eY), (fr + fw), (fs - fw))
910+ then (fg - fD)
911+ else (fg + fD)
912+ let fF = (et(fi, aW) - et(fg, aW))
913+ $Tuple3(((fE + toBytes(fi)) + fh), (fA + fF), (fB - fF))
899914 }
900915 }
901916 }
902917 }
903918
904919
905-func fx (fp,fc,fq,fy,fz,fA,fk) = {
906- let eS = split(fp, ":")
907- if ((size(eS) != 2))
920+func fG (fy,fl,fz,fH,fI,fJ,ft) = {
921+ let fb = split(fy, ":")
922+ if ((size(fb) != 2))
908923 then throw("Incorrect format, should be index:amount")
909- else if (if (!(fq))
910- then (size(eS[0]) != 2)
924+ else if (if (!(fz))
925+ then (size(fb[0]) != 2)
911926 else false)
912927 then throw("Product idx should be 2 digits, zero padded")
913928 else {
914- let ft = parseIntValue(eS[0])
915- let fu = parseIntValue(eS[1])
916- if (if ((0 > ft))
929+ let fC = parseIntValue(fb[0])
930+ let fD = parseIntValue(fb[1])
931+ if (if ((0 > fC))
917932 then true
918- else (ft >= size(aQ)))
933+ else (fC >= size(aR)))
919934 then throw("Unknown product idx")
920- else if ((0 > fu))
935+ else if ((0 > fD))
921936 then throw("Count can't be negative")
922- else if ((fu > s))
923- then throw(((("Can't put more than " + toString(s)) + " of ") + aM[ft]))
924- else if ((fu == 0))
925- then $Tuple2(fc, false)
937+ else if ((fD > t))
938+ then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
939+ else if ((fD == 0))
940+ then $Tuple2(fl, false)
926941 else {
927- let fv = take(fc, (8 * ft))
928- let eX = toInt(take(drop(fc, (8 * ft)), 8))
929- let eY = drop(fc, (8 * (ft + 1)))
930- let cf = split(aQ[ft], "_")
931- if (if (!(fq))
932- then (fu > eX)
942+ let fE = take(fl, (8 * fC))
943+ let fg = toInt(take(drop(fl, (8 * fC)), 8))
944+ let fh = drop(fl, (8 * (fC + 1)))
945+ let ch = split(aR[fC], "_")
946+ if (if (!(fz))
947+ then (fD > fg)
933948 else false)
934- then throw(((((("You have " + toString(eX)) + " of ") + aM[ft]) + ", but tried to use ") + toString(fu)))
949+ then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
935950 else {
936- let fB = if (if (!(fq))
937- then fj(fk, split(cf[aT], ","))
951+ let fK = if (if (!(fz))
952+ then fs(ft, split(ch[aU], ","))
938953 else false)
939954 then {
940- let fC = cf[aU]
941- if ((fC == ""))
955+ let fL = ch[aV]
956+ if ((fL == ""))
942957 then throw("Item cannot be equipped")
943958 else {
944- let fD = parseIntValue(fC)
945- let fE = (fD / 100)
946- if ((fy != fE))
959+ let fM = parseIntValue(fL)
960+ let fN = (fM / 100)
961+ if ((fH != fN))
947962 then throw("Segment incompatible")
948963 else {
949- let fF = ((fD % 100) / 10)
950- if ((fz != fF))
964+ let fO = ((fM % 100) / 10)
965+ if ((fI != fO))
951966 then throw("Slot incompatible")
952967 else {
953- let fG = (fD % 10)
954- if (if ((fA != 0))
955- then (fG > 1)
968+ let fP = (fM % 10)
969+ if (if ((fJ != 0))
970+ then (fP > 1)
956971 else false)
957972 then throw("Big items should occupy slot 0")
958- else (fG > 1)
973+ else (fP > 1)
959974 }
960975 }
961976 }
962977 }
963978 else false
964- $Tuple2(((fv + toBytes((eX + (if (fq)
965- then fu
966- else -(fu))))) + eY), fB)
979+ $Tuple2(((fE + toBytes((fg + (if (fz)
980+ then fD
981+ else -(fD))))) + fh), fK)
967982 }
968983 }
969984 }
970985 }
971986
972987
973-func fH (fI,fJ,fq,fy,fz,fK) = if ((fI != ""))
988+func fQ (fR,fS,fz,fH,fI,fT) = if ((fR != ""))
974989 then {
975- let fL = split(fI, ",")
976- if ((size(fL) > r))
990+ let fU = split(fR, ",")
991+ if ((size(fU) > s))
977992 then throw("Wrong slots format")
978993 else {
979- let fM = fL[0]
980- let fN = if ((size(fL) > 1))
981- then fL[1]
994+ let fV = fU[0]
995+ let fW = if ((size(fU) > 1))
996+ then fU[1]
982997 else ""
983- if (if ((fM == ""))
984- then (fN == "")
998+ if (if ((fV == ""))
999+ then (fW == "")
9851000 else false)
986- then fJ
1001+ then fS
9871002 else {
988- let fO = if ((fM != ""))
989- then fx(fM, fJ, fq, fy, fz, 0, fK)
990- else $Tuple2(fJ, false)
991- if ((fN != ""))
992- then if (fO._2)
1003+ let fX = if ((fV != ""))
1004+ then fG(fV, fS, fz, fH, fI, 0, fT)
1005+ else $Tuple2(fS, false)
1006+ if ((fW != ""))
1007+ then if (fX._2)
9931008 then throw("Big item already occupies slot")
994- else fx(fN, fO._1, fq, fy, fz, 1, fK)._1
995- else fO._1
1009+ else fG(fW, fX._1, fz, fH, fI, 1, fT)._1
1010+ else fX._1
9961011 }
9971012 }
9981013 }
999- else fJ
1000-
1001-
1002-func fP (fQ,fR,fq,fK) = {
1003- func fy (eu,fS) = {
1004- let fe = eu._1
1005- let fz = split(fS, ";")
1006- if ((size(fz) != q))
1014+ else fS
1015+
1016+
1017+func fY (fZ,ga,fz,fT) = {
1018+ func fH (eD,gb) = {
1019+ let fn = eD._1
1020+ let fI = split(gb, ";")
1021+ if ((size(fI) != r))
10071022 then throw("Wrong segment format")
10081023 else {
1009- let fT = fz[0]
1010- let fU = fz[1]
1011- if (if ((fT == ""))
1012- then (fU == "")
1024+ let gc = fI[0]
1025+ let gd = fI[1]
1026+ if (if ((gc == ""))
1027+ then (gd == "")
10131028 else false)
1014- then $Tuple2((fe + 1), eu._2)
1029+ then $Tuple2((fn + 1), eD._2)
10151030 else {
1016- let fV = fH(fT, eu._2, fq, fe, 0, fK)
1017- $Tuple2((fe + 1), fH(fU, fV, fq, fe, 1, fK))
1031+ let ge = fQ(gc, eD._2, fz, fn, 0, fT)
1032+ $Tuple2((fn + 1), fQ(gd, ge, fz, fn, 1, fT))
10181033 }
10191034 }
10201035 }
10211036
1022-( let ew = fQ
1023- let ex = size(ew)
1024- let ey = $Tuple2(0, fR)
1025- func ez (eA,eB) = if ((eB >= ex))
1026- then eA
1027- else fy(eA, ew[eB])
1028-
1029- func eC (eA,eB) = if ((eB >= ex))
1030- then eA
1037+( let eF = fZ
1038+ let eG = size(eF)
1039+ let eH = $Tuple2(0, ga)
1040+ func eI (eJ,eK) = if ((eK >= eG))
1041+ then eJ
1042+ else fH(eJ, eF[eK])
1043+
1044+ func eL (eJ,eK) = if ((eK >= eG))
1045+ then eJ
10311046 else throw("List size exceeds 6")
10321047
1033- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6))._2
1034- }
1035-
1036-
1037-func fW (fQ,fR,fr,fs,fq,fk) = if ((3 > size(fQ)))
1048+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6))._2
1049+ }
1050+
1051+
1052+func gf (fZ,ga,fA,fB,fz,ft) = if ((3 > size(fZ)))
10381053 then throw("At least duck, mines and traps parts are required")
10391054 else {
1040- func fy (eu,fS) = {
1041- let fe = eu._1
1042- if ((fe == 0))
1043- then $Tuple4((fe + 1), eu._2, eu._3, eu._4)
1055+ func fH (eD,gb) = {
1056+ let fn = eD._1
1057+ if ((fn == 0))
1058+ then $Tuple4((fn + 1), eD._2, eD._3, eD._4)
10441059 else {
1045- let fX = fo(fS, eu._2, fq, fk, eu._3, eu._4)
1046- $Tuple4((fe + 1), fX._1, fX._2, fX._3)
1060+ let gg = fx(gb, eD._2, fz, ft, eD._3, eD._4)
1061+ $Tuple4((fn + 1), gg._1, gg._2, gg._3)
10471062 }
10481063 }
10491064
1050- let fY = {
1051- let ew = fQ
1052- let ex = size(ew)
1053- let ey = $Tuple4(0, fR, fr, fs)
1054- func ez (eA,eB) = if ((eB >= ex))
1055- then eA
1056- else fy(eA, ew[eB])
1057-
1058- func eC (eA,eB) = if ((eB >= ex))
1059- then eA
1065+ let gh = {
1066+ let eF = fZ
1067+ let eG = size(eF)
1068+ let eH = $Tuple4(0, ga, fA, fB)
1069+ func eI (eJ,eK) = if ((eK >= eG))
1070+ then eJ
1071+ else fH(eJ, eF[eK])
1072+
1073+ func eL (eJ,eK) = if ((eK >= eG))
1074+ then eJ
10601075 else throw("List size exceeds 10")
10611076
1062- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1063- }
1064- $Tuple3(fY._2, fY._3, fY._4)
1077+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1078+ }
1079+ $Tuple3(gh._2, gh._3, gh._4)
10651080 }
10661081
10671082
1068-func fZ (z) = {
1069- let ga = E(z)
1070- let gb = split(valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1071- let gc = fP(gb, dD, true, nil)
1072- let gd = split(gb[o], ";")[1]
1073- let am = if ((gd == ""))
1083+func gi (A) = {
1084+ let gj = F(A)
1085+ let gk = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1086+ let gl = fY(gk, dL, true, nil)
1087+ let gm = split(gk[p], ";")[1]
1088+ let ao = if ((gm == ""))
10741089 then 0
10751090 else {
1076- let ge = split(gd, ",")[0]
1077- if ((ge == ""))
1091+ let gn = split(gm, ",")[0]
1092+ if ((gn == ""))
10781093 then 0
10791094 else {
1080- let fp = split(ge, ":")
1081- let cN = fp[0]
1082- let gf = fp[1]
1083- if (if (if (if (if ((cN == "06"))
1095+ let fy = split(gn, ":")
1096+ let cP = fy[0]
1097+ let go = fy[1]
1098+ if (if (if (if (if ((cP == "06"))
10841099 then true
1085- else (cN == "07"))
1100+ else (cP == "07"))
10861101 then true
1087- else (cN == "08"))
1088- then (gf != "")
1102+ else (cP == "08"))
1103+ then (go != "")
10891104 else false)
1090- then (parseIntValue(gf) > 0)
1105+ then (parseIntValue(go) > 0)
10911106 else false)
1092- then parseIntValue(split(aQ[parseIntValue(cN)], "_")[aS])
1107+ then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
10931108 else 0
10941109 }
10951110 }
1096- let fK = ak(this, z, am, true)
1097- let gg = fP(gb, gc, false, fK)
1098- (gg == gg)
1099- }
1100-
1101-
1102-func gh (gi,gj,gk,gl) = if ((size(gi) != aD))
1111+ let fT = am(this, A, ao, true)
1112+ let gp = fY(gk, gl, false, fT)
1113+ (gp == gp)
1114+ }
1115+
1116+
1117+func gq (gr,gs,gt,gu) = if ((size(gr) != aF))
11031118 then throw("Wrong proportions data")
11041119 else {
1105- func gm (eu,gn) = {
1106- let eM = (parseIntValue(gi[gn]) + ((gl * gj[gn]) * gk))
1107- if ((0 > eM))
1108- then throw(((((((("Panic! Pieces of type=" + toString(gn)) + ", sign=") + toString(gl)) + ", terrainCounts[i]=") + toString(gj[gn])) + ", landSizeIndex=") + toString(gk)))
1109- else (eu :+ toString(eM))
1110- }
1111-
1112- let ew = cx
1113- let ex = size(ew)
1114- let ey = nil
1115- func ez (eA,eB) = if ((eB >= ex))
1116- then eA
1117- else gm(eA, ew[eB])
1118-
1119- func eC (eA,eB) = if ((eB >= ex))
1120- then eA
1120+ func gv (eD,gw) = {
1121+ let eV = (parseIntValue(gr[gw]) + ((gu * gs[gw]) * gt))
1122+ if ((0 > eV))
1123+ then throw(((((((("Panic! Pieces of type=" + toString(gw)) + ", sign=") + toString(gu)) + ", terrainCounts[i]=") + toString(gs[gw])) + ", landSizeIndex=") + toString(gt)))
1124+ else (eD :+ toString(eV))
1125+ }
1126+
1127+ let eF = cz
1128+ let eG = size(eF)
1129+ let eH = nil
1130+ func eI (eJ,eK) = if ((eK >= eG))
1131+ then eJ
1132+ else gv(eJ, eF[eK])
1133+
1134+ func eL (eJ,eK) = if ((eK >= eG))
1135+ then eJ
11211136 else throw("List size exceeds 6")
11221137
1123- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1138+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
11241139 }
11251140
11261141
1127-func go (gj,gk,gl) = {
1128- let gi = split(valueOrElse(getString(de()), "0_0_0_0_0_0"), "_")
1129- makeString(gh(gi, gj, gk, gl), "_")
1130- }
1131-
1132-
1133-func gp (gq) = [(size(split(gq, "A")) - 1), (size(split(gq, "B")) - 1), (size(split(gq, "C")) - 1), (size(split(gq, "D")) - 1), (size(split(gq, "E")) - 1), (size(split(gq, "F")) - 1)]
1134-
1135-
1136-func gr (gs,gj,gt,gk,gu) = {
1137- func gv (eu,gn) = {
1138- let gw = ((fraction(gt, gu, aG) * gj[gn]) * gk)
1139- (eu :+ toString((parseIntValue(gs[gn]) + gw)))
1142+func gx (gs,gt,gu) = {
1143+ let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1144+ makeString(gq(gr, gs, gt, gu), "_")
1145+ }
1146+
1147+
1148+func gy (gz) = [(size(split(gz, "A")) - 1), (size(split(gz, "B")) - 1), (size(split(gz, "C")) - 1), (size(split(gz, "D")) - 1), (size(split(gz, "E")) - 1), (size(split(gz, "F")) - 1)]
1149+
1150+
1151+func gA (gB,gs,gC,gt,gD) = {
1152+ func gE (eD,gw) = {
1153+ let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1154+ (eD :+ toString((parseIntValue(gB[gw]) + gF)))
11401155 }
11411156
1142- let eF = {
1143- let ew = cx
1144- let ex = size(ew)
1145- let ey = nil
1146- func ez (eA,eB) = if ((eB >= ex))
1147- then eA
1148- else gv(eA, ew[eB])
1149-
1150- func eC (eA,eB) = if ((eB >= ex))
1151- then eA
1157+ let eO = {
1158+ let eF = cz
1159+ let eG = size(eF)
1160+ let eH = nil
1161+ func eI (eJ,eK) = if ((eK >= eG))
1162+ then eJ
1163+ else gE(eJ, eF[eK])
1164+
1165+ func eL (eJ,eK) = if ((eK >= eG))
1166+ then eJ
11521167 else throw("List size exceeds 6")
11531168
1154- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1169+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
11551170 }
1156- makeString(eF, "_")
1157- }
1158-
1159-
1160-func gx (gj,gt,gk,gu) = {
1161- func gv (eu,gn) = {
1162- let gw = ((fraction(gt, gu, aG) * gj[gn]) * gk)
1163- $Tuple2((eu._1 :+ gw), (eu._2 + gw))
1171+ makeString(eO, "_")
1172+ }
1173+
1174+
1175+func gG (gs,gC,gt,gD) = {
1176+ func gE (eD,gw) = {
1177+ let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1178+ $Tuple2((eD._1 :+ gF), (eD._2 + gF))
11641179 }
11651180
1166- let ew = cx
1167- let ex = size(ew)
1168- let ey = $Tuple2(nil, 0)
1169- func ez (eA,eB) = if ((eB >= ex))
1170- then eA
1171- else gv(eA, ew[eB])
1172-
1173- func eC (eA,eB) = if ((eB >= ex))
1174- then eA
1181+ let eF = cz
1182+ let eG = size(eF)
1183+ let eH = $Tuple2(nil, 0)
1184+ func eI (eJ,eK) = if ((eK >= eG))
1185+ then eJ
1186+ else gE(eJ, eF[eK])
1187+
1188+ func eL (eJ,eK) = if ((eK >= eG))
1189+ then eJ
11751190 else throw("List size exceeds 6")
11761191
1177- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1178- }
1179-
1180-
1181-func gy (gz,gA,gB,gC) = {
1182- let gD = gB._1
1183- let gE = gB._2
1184- if ((gE == 0))
1185- then $Tuple2(makeString(gz, "_"), makeString(gA, "_"))
1186- else if ((gC >= gE))
1192+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1193+ }
1194+
1195+
1196+func gH (gI,gJ,gK,gL) = {
1197+ let gM = gK._1
1198+ let gN = gK._2
1199+ if ((gN == 0))
1200+ then $Tuple2(makeString(gI, "_"), makeString(gJ, "_"))
1201+ else if ((gL >= gN))
11871202 then {
1188- func gF (eu,gn) = (eu :+ toString((parseIntValue(gz[gn]) + gD[gn])))
1189-
1190- let eF = {
1191- let ew = cx
1192- let ex = size(ew)
1193- let ey = nil
1194- func ez (eA,eB) = if ((eB >= ex))
1195- then eA
1196- else gF(eA, ew[eB])
1197-
1198- func eC (eA,eB) = if ((eB >= ex))
1199- then eA
1203+ func gO (eD,gw) = (eD :+ toString((parseIntValue(gI[gw]) + gM[gw])))
1204+
1205+ let eO = {
1206+ let eF = cz
1207+ let eG = size(eF)
1208+ let eH = nil
1209+ func eI (eJ,eK) = if ((eK >= eG))
1210+ then eJ
1211+ else gO(eJ, eF[eK])
1212+
1213+ func eL (eJ,eK) = if ((eK >= eG))
1214+ then eJ
12001215 else throw("List size exceeds 6")
12011216
1202- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1217+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
12031218 }
1204- $Tuple2(makeString(eF, "_"), makeString(gA, "_"))
1219+ $Tuple2(makeString(eO, "_"), makeString(gJ, "_"))
12051220 }
12061221 else {
1207- func gG (eu,gn) = {
1208- let gH = fraction(gD[gn], gC, gE)
1209- $Tuple2((eu._1 :+ toString((parseIntValue(gz[gn]) + gH))), (eu._2 :+ toString(((parseIntValue(gA[gn]) + gD[gn]) - gH))))
1222+ func gP (eD,gw) = {
1223+ let gQ = fraction(gM[gw], gL, gN)
1224+ $Tuple2((eD._1 :+ toString((parseIntValue(gI[gw]) + gQ))), (eD._2 :+ toString(((parseIntValue(gJ[gw]) + gM[gw]) - gQ))))
12101225 }
12111226
1212- let eF = {
1213- let ew = cx
1214- let ex = size(ew)
1215- let ey = $Tuple2(nil, nil)
1216- func ez (eA,eB) = if ((eB >= ex))
1217- then eA
1218- else gG(eA, ew[eB])
1219-
1220- func eC (eA,eB) = if ((eB >= ex))
1221- then eA
1227+ let eO = {
1228+ let eF = cz
1229+ let eG = size(eF)
1230+ let eH = $Tuple2(nil, nil)
1231+ func eI (eJ,eK) = if ((eK >= eG))
1232+ then eJ
1233+ else gP(eJ, eF[eK])
1234+
1235+ func eL (eJ,eK) = if ((eK >= eG))
1236+ then eJ
12221237 else throw("List size exceeds 6")
12231238
1224- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1239+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
12251240 }
1226- $Tuple2(makeString(eF._1, "_"), makeString(eF._2, "_"))
1241+ $Tuple2(makeString(eO._1, "_"), makeString(eO._2, "_"))
12271242 }
12281243 }
12291244
12301245
1231-func gI (gJ) = if ((gJ >= toBigInt(0)))
1232- then gJ
1233- else -(gJ)
1234-
1235-
1236-let gK = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1237-
1238-func gL (dn,gM) = {
1239- let gN = toInt((dn % dM))
1240- let gO = if ((gM[0] > gN))
1246+func gR (gS) = if ((gS >= toBigInt(0)))
1247+ then gS
1248+ else -(gS)
1249+
1250+
1251+let gT = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1252+
1253+func gU (dp,gV) = {
1254+ let gW = toInt((dp % dV))
1255+ let gX = if ((gV[0] > gW))
12411256 then "A"
1242- else if ((gM[1] > gN))
1257+ else if ((gV[1] > gW))
12431258 then "B"
1244- else if ((gM[2] > gN))
1259+ else if ((gV[2] > gW))
12451260 then "C"
1246- else if ((gM[3] > gN))
1261+ else if ((gV[3] > gW))
12471262 then "D"
1248- else if ((gM[4] > gN))
1263+ else if ((gV[4] > gW))
12491264 then "E"
12501265 else "F"
1251- gO
1252- }
1253-
1254-
1255-func gP (gQ,gR) = {
1256- let gS = gK[gR]
1257- func gT (eu,ev) = $Tuple2((((((eu._1 + gL(eu._2, gS)) + gL((eu._2 / dM), gS)) + gL((eu._2 / dN), gS)) + gL((eu._2 / dO), gS)) + gL((eu._2 / dP), gS)), (eu._2 / dQ))
1258-
1259- let fY = {
1260- let ew = [1, 2, 3, 4, 5]
1261- let ex = size(ew)
1262- let ey = $Tuple2("", (gQ / dL))
1263- func ez (eA,eB) = if ((eB >= ex))
1264- then eA
1265- else gT(eA, ew[eB])
1266-
1267- func eC (eA,eB) = if ((eB >= ex))
1268- then eA
1266+ gX
1267+ }
1268+
1269+
1270+func gY (gZ,ha) = {
1271+ let hb = gT[ha]
1272+ func hc (eD,eE) = $Tuple2((((((eD._1 + gU(eD._2, hb)) + gU((eD._2 / dV), hb)) + gU((eD._2 / dW), hb)) + gU((eD._2 / dX), hb)) + gU((eD._2 / dY), hb)), (eD._2 / dZ))
1273+
1274+ let gh = {
1275+ let eF = [1, 2, 3, 4, 5]
1276+ let eG = size(eF)
1277+ let eH = $Tuple2("", (gZ / dU))
1278+ func eI (eJ,eK) = if ((eK >= eG))
1279+ then eJ
1280+ else hc(eJ, eF[eK])
1281+
1282+ func eL (eJ,eK) = if ((eK >= eG))
1283+ then eJ
12691284 else throw("List size exceeds 5")
12701285
1271- eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5)
1286+ eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
12721287 }
1273- fY._1
1274- }
1275-
1276-
1277-let gU = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1278-
1279-let gV = ["A", "B", "C", "D", "E", "F"]
1280-
1281-func gW (gX,gk) = {
1282- func gY (eu,dl) = {
1283- let fe = eu._2
1284- let gZ = parseIntValue(dl)
1285- let gJ = if ((gZ == 0))
1288+ gh._1
1289+ }
1290+
1291+
1292+let hd = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1293+
1294+let he = ["A", "B", "C", "D", "E", "F"]
1295+
1296+func hf (hg,gt) = {
1297+ func hh (eD,dn) = {
1298+ let fn = eD._2
1299+ let hi = parseIntValue(dn)
1300+ let gS = if ((hi == 0))
12861301 then 0
1287- else if ((gZ >= (4 * gk)))
1288- then (gZ / gk)
1289- else if ((gZ > (3 * gk)))
1302+ else if ((hi >= (4 * gt)))
1303+ then (hi / gt)
1304+ else if ((hi > (3 * gt)))
12901305 then 3
1291- else (((gZ - 1) / gk) + 1)
1292- $Tuple3((eu._1 :+ gJ), (eu._2 + 1), (eu._3 + gJ))
1306+ else (((hi - 1) / gt) + 1)
1307+ $Tuple3((eD._1 :+ gS), (eD._2 + 1), (eD._3 + gS))
12931308 }
12941309
1295- let fY = {
1296- let ew = gX
1297- let ex = size(ew)
1298- let ey = $Tuple3(nil, 0, 0)
1299- func ez (eA,eB) = if ((eB >= ex))
1300- then eA
1301- else gY(eA, ew[eB])
1302-
1303- func eC (eA,eB) = if ((eB >= ex))
1304- then eA
1310+ let gh = {
1311+ let eF = hg
1312+ let eG = size(eF)
1313+ let eH = $Tuple3(nil, 0, 0)
1314+ func eI (eJ,eK) = if ((eK >= eG))
1315+ then eJ
1316+ else hh(eJ, eF[eK])
1317+
1318+ func eL (eJ,eK) = if ((eK >= eG))
1319+ then eJ
13051320 else throw("List size exceeds 6")
13061321
1307- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1322+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
13081323 }
1309- let ha = fY._1
1310- let hb = value(indexOf(ha, max(ha)))
1311- let hc = (fY._3 - 25)
1312- func hd (eu,cN) = {
1313- let he = if ((cN == hb))
1314- then (ha[cN] - hc)
1315- else ha[cN]
1316- let hf = if ((he == 0))
1324+ let hj = gh._1
1325+ let hk = value(indexOf(hj, max(hj)))
1326+ let hl = (gh._3 - 25)
1327+ func hm (eD,cP) = {
1328+ let dx = if ((cP == hk))
1329+ then (hj[cP] - hl)
1330+ else hj[cP]
1331+ let dB = if ((dx == 0))
13171332 then nil
1318- else split(drop(toString(pow(10, 0, he, 0, 0, DOWN)), 1), "")
1319- let fD = gV[cN]
1320- func hg (hh,hi) = (hh :+ fD)
1321-
1322- let hj = {
1323- let ew = hf
1324- let ex = size(ew)
1325- let ey = nil
1326- func hk (eA,eB) = if ((eB >= ex))
1327- then eA
1328- else hg(eA, ew[eB])
1329-
1330- func hl (eA,eB) = if ((eB >= ex))
1331- then eA
1333+ else split(drop(toString(pow(10, 0, dx, 0, 0, DOWN)), 1), "")
1334+ let fM = he[cP]
1335+ func hn (ho,hp) = (ho :+ fM)
1336+
1337+ let hq = {
1338+ let eF = dB
1339+ let eG = size(eF)
1340+ let eH = nil
1341+ func hr (eJ,eK) = if ((eK >= eG))
1342+ then eJ
1343+ else hn(eJ, eF[eK])
1344+
1345+ func hs (eJ,eK) = if ((eK >= eG))
1346+ then eJ
13321347 else throw("List size exceeds 25")
13331348
1334- hl(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1335- }
1336- (eu ++ hj)
1349+ hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1350+ }
1351+ (eD ++ hq)
13371352 }
13381353
1339- let eF = {
1340- let ew = cx
1341- let ex = size(ew)
1342- let ey = nil
1343- func hk (eA,eB) = if ((eB >= ex))
1344- then eA
1345- else hd(eA, ew[eB])
1346-
1347- func hl (eA,eB) = if ((eB >= ex))
1348- then eA
1354+ let eO = {
1355+ let eF = cz
1356+ let eG = size(eF)
1357+ let eH = nil
1358+ func hr (eJ,eK) = if ((eK >= eG))
1359+ then eJ
1360+ else hm(eJ, eF[eK])
1361+
1362+ func hs (eJ,eK) = if ((eK >= eG))
1363+ then eJ
13491364 else throw("List size exceeds 6")
13501365
1351- hl(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6)
1366+ hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
13521367 }
1353- func hm (eu,fe) = (eu + eF[fe])
1354-
1355- let ew = gU
1356- let ex = size(ew)
1357- let ey = ""
1358- func hn (eA,eB) = if ((eB >= ex))
1359- then eA
1360- else hm(eA, ew[eB])
1361-
1362- func ho (eA,eB) = if ((eB >= ex))
1363- then eA
1368+ func ht (eD,fn) = (eD + eO[fn])
1369+
1370+ let eF = hd
1371+ let eG = size(eF)
1372+ let eH = ""
1373+ func hu (eJ,eK) = if ((eK >= eG))
1374+ then eJ
1375+ else ht(eJ, eF[eK])
1376+
1377+ func hv (eJ,eK) = if ((eK >= eG))
1378+ then eJ
13641379 else throw("List size exceeds 25")
13651380
1366- ho(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1367- }
1368-
1369-
1370-func hp (hq) = {
1371- let fX = split(valueOrElse(getString(hq), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1372-[toString(valueOrElse(parseInt(fX[bf]), 0)), if ((size(split(fX[bg], "_")) == aD))
1373- then fX[bg]
1374- else "0_0_0_0_0_0", if ((size(split(fX[bh], "_")) == aD))
1375- then fX[bh]
1376- else "0_0_0_0_0_0", fX[bi]]
1377- }
1378-
1379-
1380-func hr (hs) = {
1381- let eS = split(hs, "_")
1382- ((aH * (parseIntValue(eS[1]) + 1)) * parseIntValue(eS[0]))
1383- }
1384-
1385-
1386-func ht (hu) = {
1387- let hv = hu[aZ]
1388- func hw (eu,hx) = (eu + parseIntValue(hx))
1389-
1390- func hy (eu,hx) = {
1391- let cN = eu._1
1392- let en = (((parseIntValue(hx) + aV) - 1) / aV)
1393- $Tuple2((cN + 1), (eu._2 + (en * cr)))
1381+ hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1382+ }
1383+
1384+
1385+func hw (hx) = {
1386+ let gg = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1387+[toString(valueOrElse(parseInt(gg[bg]), 0)), if ((size(split(gg[bh], "_")) == aF))
1388+ then gg[bh]
1389+ else "0_0_0_0_0_0", if ((size(split(gg[bi], "_")) == aF))
1390+ then gg[bi]
1391+ else "0_0_0_0_0_0", gg[bj]]
1392+ }
1393+
1394+
1395+func hy (hz) = {
1396+ let fb = split(hz, "_")
1397+ ((aI * (parseIntValue(fb[1]) + 1)) * parseIntValue(fb[0]))
1398+ }
1399+
1400+
1401+func hA (hB) = {
1402+ let hC = hB[ba]
1403+ func hD (eD,hE) = (eD + parseIntValue(hE))
1404+
1405+ func hF (eD,hE) = {
1406+ let cP = eD._1
1407+ let ew = (((parseIntValue(hE) + aW) - 1) / aW)
1408+ $Tuple2((cP + 1), (eD._2 + (ew * ct)))
13941409 }
13951410
1396- let hz = {
1397- let ew = split(hu[aX], "_")
1398- let ex = size(ew)
1399- let ey = 0
1400- func ez (eA,eB) = if ((eB >= ex))
1401- then eA
1402- else hw(eA, ew[eB])
1403-
1404- func eC (eA,eB) = if ((eB >= ex))
1405- then eA
1411+ let hG = {
1412+ let eF = split(hB[aY], "_")
1413+ let eG = size(eF)
1414+ let eH = 0
1415+ func eI (eJ,eK) = if ((eK >= eG))
1416+ then eJ
1417+ else hD(eJ, eF[eK])
1418+
1419+ func eL (eJ,eK) = if ((eK >= eG))
1420+ then eJ
14061421 else throw("List size exceeds 6")
14071422
1408- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1423+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
14091424 }
1410- let hA = {
1411- let ew = split(hu[aY], "_")
1412- let ex = size(ew)
1413- let ey = 0
1414- func hk (eA,eB) = if ((eB >= ex))
1415- then eA
1416- else hw(eA, ew[eB])
1417-
1418- func hl (eA,eB) = if ((eB >= ex))
1419- then eA
1425+ let hH = {
1426+ let eF = split(hB[aZ], "_")
1427+ let eG = size(eF)
1428+ let eH = 0
1429+ func hr (eJ,eK) = if ((eK >= eG))
1430+ then eJ
1431+ else hD(eJ, eF[eK])
1432+
1433+ func hs (eJ,eK) = if ((eK >= eG))
1434+ then eJ
14201435 else throw("List size exceeds 6")
14211436
1422- hl(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6)
1437+ hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
14231438 }
1424- let hB = if ((hv == ""))
1439+ let hI = if ((hC == ""))
14251440 then 0
1426- else ( let ew = split_4C(hv, "_")
1427- let ex = size(ew)
1428- let ey = $Tuple2(0, 0)
1429- func hn (eA,eB) = if ((eB >= ex))
1430- then eA
1431- else hy(eA, ew[eB])
1432-
1433- func ho (eA,eB) = if ((eB >= ex))
1434- then eA
1441+ else ( let eF = split_4C(hC, "_")
1442+ let eG = size(eF)
1443+ let eH = $Tuple2(0, 0)
1444+ func hu (eJ,eK) = if ((eK >= eG))
1445+ then eJ
1446+ else hF(eJ, eF[eK])
1447+
1448+ func hv (eJ,eK) = if ((eK >= eG))
1449+ then eJ
14351450 else throw("List size exceeds 50")
14361451
1437- ho(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1438- ((hz + hA) + hB)
1439- }
1440-
1441-
1442-func hC (hD,hE,hF) = {
1443- let hs = ((toString(hE) + "_") + toString(hF))
1444- let hG = hr(hs)
1445- let hH = valueOrElse(getString(hD), (hs + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1446- let hI = split_4C(hH, ":")
1447- let hJ = ht(hI)
1448- let hK = if ((5 > size(hI)))
1449- then makeString(["0", toString(hJ), toString((hG - hJ)), toString(hG)], "_")
1452+ hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1453+ ((hG + hH) + hI)
1454+ }
1455+
1456+
1457+func hJ (hK,hL,hM) = {
1458+ let hz = ((toString(hL) + "_") + toString(hM))
1459+ let hN = hy(hz)
1460+ let hO = valueOrElse(getString(hK), (hz + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1461+ let hP = split_4C(hO, ":")
1462+ let hQ = hA(hP)
1463+ let hR = if ((5 > size(hP)))
1464+ then makeString(["0", toString(hQ), toString((hN - hQ)), toString(hN)], "_")
14501465 else {
1451- let hL = split(hI[ba], "_")
1452- let hM = parseIntValue(hL[bb])
1453- let hN = if ((size(hL) > 1))
1454- then parseIntValue(hL[bc])
1455- else hJ
1456- makeString([toString(hM), toString(hN), toString(((hG - hM) - hN)), toString(hG)], "_")
1457- }
1458-[hI[aW], if ((size(split(hI[aX], "_")) == aD))
1459- then hI[aX]
1460- else "0_0_0_0_0_0", if ((size(split(hI[aY], "_")) == aD))
1461- then hI[aY]
1462- else "0_0_0_0_0_0", hI[aZ], hK]
1463- }
1464-
1465-
1466-func hO (hu) = {
1467- let hP = ht(hu)
1468- let hQ = parseIntValue(split(hu[ba], "_")[bb])
1469- ((hr(hu[aW]) - hP) - hQ)
1470- }
1471-
1472-
1473-func hR (hS,hu,hT) = if ((size(hS) != 3))
1466+ let hS = split(hP[bb], "_")
1467+ let hT = parseIntValue(hS[bc])
1468+ let hU = if ((size(hS) > 1))
1469+ then parseIntValue(hS[bd])
1470+ else hQ
1471+ makeString([toString(hT), toString(hU), toString(((hN - hT) - hU)), toString(hN)], "_")
1472+ }
1473+[hP[aX], if ((size(split(hP[aY], "_")) == aF))
1474+ then hP[aY]
1475+ else "0_0_0_0_0_0", if ((size(split(hP[aZ], "_")) == aF))
1476+ then hP[aZ]
1477+ else "0_0_0_0_0_0", hP[ba], hR]
1478+ }
1479+
1480+
1481+func hV (hB) = {
1482+ let hW = hA(hB)
1483+ let hX = parseIntValue(split(hB[bb], "_")[bc])
1484+ ((hy(hB[aX]) - hW) - hX)
1485+ }
1486+
1487+
1488+func hY (hZ,hB,ia) = if ((size(hZ) != 3))
14741489 then throw("cargoListStr should contain exactly 2 ':' separators")
14751490 else {
1476- let hU = split(hS[0], "_")
1477- let hV = split(hS[1], "_")
1478- let hW = if ((hS[2] == ""))
1491+ let ib = split(hZ[0], "_")
1492+ let ic = split(hZ[1], "_")
1493+ let id = if ((hZ[2] == ""))
14791494 then nil
1480- else split_4C(hS[2], "_")
1481- if ((size(hU) != aD))
1495+ else split_4C(hZ[2], "_")
1496+ if ((size(ib) != aF))
14821497 then throw("All 6 resources should be passed")
1483- else if ((size(hV) != aD))
1498+ else if ((size(ic) != aF))
14841499 then throw("All 6 materials should be passed")
14851500 else {
1486- let gC = hO(hu)
1487- let hX = split(hu[aX], "_")
1488- let hY = split(hu[aY], "_")
1489- let hZ = if ((hu[aZ] == ""))
1501+ let gL = hV(hB)
1502+ let ie = split(hB[aY], "_")
1503+ let if = split(hB[aZ], "_")
1504+ let ig = if ((hB[ba] == ""))
14901505 then nil
1491- else split_4C(hu[aZ], "_")
1492- let gA = split(hT[bg], "_")
1493- let ia = split(hT[bh], "_")
1494- let ib = if ((hT[bi] == ""))
1506+ else split_4C(hB[ba], "_")
1507+ let gJ = split(ia[bh], "_")
1508+ let ih = split(ia[bi], "_")
1509+ let ii = if ((ia[bj] == ""))
14951510 then nil
1496- else split_4C(hT[bi], "_")
1497- func ic (eu,hx) = {
1498- let gn = eu._1
1499- let id = parseIntValue(hx)
1500- let ie = parseIntValue(hX[gn])
1501- let if = parseIntValue(gA[gn])
1502- if ((id == 0))
1503- then $Tuple4((gn + 1), (eu._2 :+ hX[gn]), (eu._3 :+ gA[gn]), eu._4)
1504- else if ((id > 0))
1505- then if ((id > if))
1506- then throw((((("Attempt to take " + hx) + " from backpack, but only ") + toString(if)) + " available"))
1507- else $Tuple4((gn + 1), (eu._2 :+ toString((ie + id))), (eu._3 :+ toString((if - id))), (eu._4 + id))
1508- else if ((-(id) > ie))
1509- then throw((((("Attempt to take " + toString(-(id))) + " from warehouse, but only ") + toString(ie)) + " available"))
1510- else $Tuple4((gn + 1), (eu._2 :+ toString((ie + id))), (eu._3 :+ toString((if - id))), (eu._4 + id))
1511+ else split_4C(ia[bj], "_")
1512+ func ij (eD,hE) = {
1513+ let gw = eD._1
1514+ let ik = parseIntValue(hE)
1515+ let il = parseIntValue(ie[gw])
1516+ let im = parseIntValue(gJ[gw])
1517+ if ((ik == 0))
1518+ then $Tuple4((gw + 1), (eD._2 :+ ie[gw]), (eD._3 :+ gJ[gw]), eD._4)
1519+ else if ((ik > 0))
1520+ then if ((ik > im))
1521+ then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(im)) + " available"))
1522+ else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
1523+ else if ((-(ik) > il))
1524+ then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(il)) + " available"))
1525+ else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
15111526 }
15121527
1513- let eF = {
1514- let ew = hU
1515- let ex = size(ew)
1516- let ey = $Tuple4(0, nil, nil, 0)
1517- func ez (eA,eB) = if ((eB >= ex))
1518- then eA
1519- else ic(eA, ew[eB])
1520-
1521- func eC (eA,eB) = if ((eB >= ex))
1522- then eA
1528+ let eO = {
1529+ let eF = ib
1530+ let eG = size(eF)
1531+ let eH = $Tuple4(0, nil, nil, 0)
1532+ func eI (eJ,eK) = if ((eK >= eG))
1533+ then eJ
1534+ else ij(eJ, eF[eK])
1535+
1536+ func eL (eJ,eK) = if ((eK >= eG))
1537+ then eJ
15231538 else throw("List size exceeds 6")
15241539
1525- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1540+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
15261541 }
1527- func ig (eu,hx) = {
1528- let gn = eu._1
1529- let id = parseIntValue(hx)
1530- let ih = parseIntValue(hY[gn])
1531- let ii = parseIntValue(ia[gn])
1532- if ((id == 0))
1533- then $Tuple4((gn + 1), (eu._2 :+ hY[gn]), (eu._3 :+ ia[gn]), eu._4)
1534- else if ((id > 0))
1535- then if ((id > ii))
1536- then throw((((("Attempt to take " + hx) + " from backpack, but only ") + toString(ii)) + " available"))
1537- else $Tuple4((gn + 1), (eu._2 :+ toString((ih + id))), (eu._3 :+ toString((ii - id))), (eu._4 + id))
1538- else if ((-(id) > ih))
1539- then throw((((("Attempt to take " + toString(-(id))) + " from warehouse, but only ") + toString(ih)) + " available"))
1540- else $Tuple4((gn + 1), (eu._2 :+ toString((ih + id))), (eu._3 :+ toString((ii - id))), (eu._4 + id))
1542+ func in (eD,hE) = {
1543+ let gw = eD._1
1544+ let ik = parseIntValue(hE)
1545+ let io = parseIntValue(if[gw])
1546+ let ip = parseIntValue(ih[gw])
1547+ if ((ik == 0))
1548+ then $Tuple4((gw + 1), (eD._2 :+ if[gw]), (eD._3 :+ ih[gw]), eD._4)
1549+ else if ((ik > 0))
1550+ then if ((ik > ip))
1551+ then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(ip)) + " available"))
1552+ else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
1553+ else if ((-(ik) > io))
1554+ then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(io)) + " available"))
1555+ else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
15411556 }
15421557
1543- let fT = {
1544- let ew = hV
1545- let ex = size(ew)
1546- let ey = $Tuple4(0, nil, nil, eF._4)
1547- func hk (eA,eB) = if ((eB >= ex))
1548- then eA
1549- else ig(eA, ew[eB])
1550-
1551- func hl (eA,eB) = if ((eB >= ex))
1552- then eA
1558+ let gc = {
1559+ let eF = ic
1560+ let eG = size(eF)
1561+ let eH = $Tuple4(0, nil, nil, eO._4)
1562+ func hr (eJ,eK) = if ((eK >= eG))
1563+ then eJ
1564+ else in(eJ, eF[eK])
1565+
1566+ func hs (eJ,eK) = if ((eK >= eG))
1567+ then eJ
15531568 else throw("List size exceeds 6")
15541569
1555- hl(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6)
1570+ hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
15561571 }
1557- func ij (eu,hx) = {
1558- let gn = eu._1
1559- let id = parseIntValue(hx)
1560- let ik = if ((size(hZ) > gn))
1561- then parseIntValue(hZ[gn])
1572+ func iq (eD,hE) = {
1573+ let gw = eD._1
1574+ let ik = parseIntValue(hE)
1575+ let ir = if ((size(ig) > gw))
1576+ then parseIntValue(ig[gw])
15621577 else 0
1563- let il = if ((size(ib) > gn))
1564- then parseIntValue(ib[gn])
1578+ let is = if ((size(ii) > gw))
1579+ then parseIntValue(ii[gw])
15651580 else 0
1566- if ((id == 0))
1567- then $Tuple4((gn + 1), (eu._2 :+ toString(ik)), (eu._3 :+ toString(il)), eu._4)
1568- else if ((id > 0))
1569- then if ((id > il))
1570- then throw((((("Attempt to take " + hx) + " from backpack, but only ") + toString(il)) + " available"))
1581+ if ((ik == 0))
1582+ then $Tuple4((gw + 1), (eD._2 :+ toString(ir)), (eD._3 :+ toString(is)), eD._4)
1583+ else if ((ik > 0))
1584+ then if ((ik > is))
1585+ then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(is)) + " available"))
15711586 else {
1572- let fw = (ek((ik + id), aV) - ek(ik, aV))
1573- $Tuple4((gn + 1), (eu._2 :+ toString((ik + id))), (eu._3 :+ toString((il - id))), (eu._4 + fw))
1587+ let fF = (et((ir + ik), aW) - et(ir, aW))
1588+ $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
15741589 }
1575- else if ((-(id) > ik))
1576- then throw((((("Attempt to take " + toString(-(id))) + " from warehouse, but only ") + toString(ik)) + " available"))
1590+ else if ((-(ik) > ir))
1591+ then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(ir)) + " available"))
15771592 else {
1578- let fw = (ek((ik + id), aV) - ek(ik, aV))
1579- $Tuple4((gn + 1), (eu._2 :+ toString((ik + id))), (eu._3 :+ toString((il - id))), (eu._4 + fw))
1593+ let fF = (et((ir + ik), aW) - et(ir, aW))
1594+ $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
15801595 }
15811596 }
15821597
1583- let fX = if ((size(hW) != 0))
1598+ let gg = if ((size(id) != 0))
15841599 then {
1585- let ew = hW
1586- let ex = size(ew)
1587- let ey = $Tuple4(0, nil, nil, fT._4)
1588- func hn (eA,eB) = if ((eB >= ex))
1589- then eA
1590- else ij(eA, ew[eB])
1591-
1592- func ho (eA,eB) = if ((eB >= ex))
1593- then eA
1600+ let eF = id
1601+ let eG = size(eF)
1602+ let eH = $Tuple4(0, nil, nil, gc._4)
1603+ func hu (eJ,eK) = if ((eK >= eG))
1604+ then eJ
1605+ else iq(eJ, eF[eK])
1606+
1607+ func hv (eJ,eK) = if ((eK >= eG))
1608+ then eJ
15941609 else throw("List size exceeds 50")
15951610
1596- ho(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1611+ hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
15971612 }
1598- else $Tuple4(0, hZ, ib, fT._4)
1599- let im = fX._4
1600- if ((im > gC))
1601- then throw((((("Attempt to put total " + toString(im)) + " stuff, but only ") + toString(gC)) + " warehouse space left"))
1602- else $Tuple7(makeString(eF._2, "_"), makeString(fT._2, "_"), makeString_2C(fX._2, "_"), makeString(eF._3, "_"), makeString(fT._3, "_"), makeString_2C(fX._3, "_"), im)
1613+ else $Tuple4(0, ig, ii, gc._4)
1614+ let it = gg._4
1615+ if ((it > gL))
1616+ then throw((((("Attempt to put total " + toString(it)) + " stuff, but only ") + toString(gL)) + " warehouse space left"))
1617+ else $Tuple7(makeString(eO._2, "_"), makeString(gc._2, "_"), makeString_2C(gg._2, "_"), makeString(eO._3, "_"), makeString(gc._3, "_"), makeString_2C(gg._3, "_"), it)
16031618 }
16041619 }
16051620
16061621
1607-func in (io,ip) = {
1608- let bJ = toString(io)
1609- let iq = gI(toBigInt(ip))
1610- let ir = valueOrElse(getInteger(dS()), (dR + 1))
1611- let dW = toString(ir)
1612- let gR = toInt((iq % dL))
1613- let gq = gP(iq, gR)
1614- let dg = aN[gR]
1615- let is = Issue(ej(dW, "S"), makeString([dW, "S", gq, dg], "_"), 1, 0, false)
1616- let bn = calculateAssetId(is)
1617- let it = toBase58String(bn)
1618- $Tuple2([IntegerEntry(dS(), (ir + 1)), is, StringEntry(dV(dW), it), StringEntry(bm(it), bJ), StringEntry(dY(dW), bJ), IntegerEntry(bw(it), 0), IntegerEntry(dX(it, bJ), 0), ScriptTransfer(io, 1, bn)], $Tuple2(it, dg))
1619- }
1620-
1621-
1622-func iu (bJ,iv,iw) = if (!(sigVerify_8Kb(iv, iw, dC)))
1622+func iu (iv,iw) = {
1623+ let bK = toString(iv)
1624+ let ix = gR(toBigInt(iw))
1625+ let iy = valueOrElse(getInteger(eb()), (ea + 1))
1626+ let ef = toString(iy)
1627+ let ha = toInt((ix % dU))
1628+ let gz = gY(ix, ha)
1629+ let di = aO[ha]
1630+ let iz = Issue(es(ef, "S"), makeString([ef, "S", gz, di], "_"), 1, 0, false)
1631+ let bo = calculateAssetId(iz)
1632+ let iA = toBase58String(bo)
1633+ $Tuple2([IntegerEntry(eb(), (iy + 1)), iz, StringEntry(ee(ef), iA), StringEntry(bn(iA), bK), StringEntry(eh(ef), bK), IntegerEntry(bx(iA), 0), IntegerEntry(eg(iA, bK), 0), ScriptTransfer(iv, 1, bo)], $Tuple2(iA, di))
1634+ }
1635+
1636+
1637+func iB (bK,iC,iD) = if (!(sigVerify_8Kb(iC, iD, dK)))
16231638 then throw("signature does not match")
16241639 else {
1625- let eS = split_4C(toUtf8String(iv), ";")
1626- let ix = split_4C(eS[0], "|")
1627- let iy = split(ix[ef], "_")
1628- let iz = parseIntValue(iy[0])
1629- let iA = parseIntValue(iy[1])
1630- let iB = split(eS[1], ":")
1631- let iC = iB[0]
1632- let iD = parseIntValue(ix[eg])
1633- if (if ((iD > (lastBlock.timestamp + dE)))
1640+ let fb = split_4C(toUtf8String(iC), ";")
1641+ let iE = split_4C(fb[0], "|")
1642+ let iF = split(iE[eo], "_")
1643+ let iG = parseIntValue(iF[0])
1644+ let iH = parseIntValue(iF[1])
1645+ let iI = split(fb[1], ":")
1646+ let iJ = iI[0]
1647+ let iK = parseIntValue(iE[ep])
1648+ if (if ((iK > (lastBlock.timestamp + dM)))
16341649 then true
1635- else ((lastBlock.timestamp - dE) > iD))
1636- then throw(((("signature outdated: logTime=" + toString(iD)) + ", bcTime=") + toString(lastBlock.timestamp)))
1650+ else ((lastBlock.timestamp - dM) > iK))
1651+ then throw(((("signature outdated: logTime=" + toString(iK)) + ", bcTime=") + toString(lastBlock.timestamp)))
16371652 else {
1638- let iE = iB[1]
1639- let iF = valueOrElse(getString(dt(bJ)), "")
1640- if ((iF != iE))
1641- then throw(((("Tx ids don't match! In state: " + iF) + ", in msg: ") + iE))
1653+ let iL = iI[1]
1654+ let iM = valueOrElse(getString(dv(bK)), "")
1655+ if ((iM != iL))
1656+ then throw(((("Tx ids don't match! In state: " + iM) + ", in msg: ") + iL))
16421657 else {
1643- let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked")
1644- let iG = y(z)
1645- let iH = ae(valueOrElse(getInteger(C(z)), 0))
1646- let iI = valueOrElse(getInteger(iG), iH)
1647- if ((iI != iz))
1648- then throw(((("oldHealth=" + toString(iI)) + " from state does not match one from flight log=") + toString(iz)))
1649- else if ((0 >= iz))
1658+ let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
1659+ let iN = z(A)
1660+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
1661+ let iP = valueOrElse(getInteger(iN), iO)
1662+ if ((iP != iG))
1663+ then throw(((("oldHealth=" + toString(iP)) + " from state does not match one from flight log=") + toString(iG)))
1664+ else if ((0 >= iG))
16501665 then throw("You can't fly with zero health")
1651- else if (!(fZ(z)))
1666+ else if (!(gi(A)))
16521667 then throw("Equipment incompatible")
16531668 else {
1654- let iJ = if ((size(ix) > eh))
1655- then ix[eh]
1669+ let iQ = if ((size(iE) > eq))
1670+ then iE[eq]
16561671 else ""
1657- let iK = if ((size(ix) > ei))
1658- then ix[ei]
1672+ let iR = if ((size(iE) > er))
1673+ then iE[er]
16591674 else ""
1660- let iL = if (if ((iA > 0))
1661- then (iJ == "$")
1675+ let iS = if (if ((iH > 0))
1676+ then (iQ == "$")
16621677 else false)
1663- then dm(invoke(cO, "sendUsdtPrize", [bJ], nil))
1678+ then do(invoke(cQ, "sendUsdtPrize", [bK], nil))
16641679 else 0
1665- $Tuple5(iA, z, iL, iC, iK)
1680+ $Tuple5(iH, A, iS, iJ, iR)
16661681 }
16671682 }
16681683 }
16691684 }
16701685
16711686
1672-func iM (O,iN) = {
1673- let hF = valueOrElse(getInteger(bw(O)), 0)
1674- let iO = valueOrElse(getInteger(bq(aC, O)), 0)
1675- let iP = (hF / 6)
1676- let iQ = (hF / 7)
1677- ((aF + fraction(aF, ((hF + iP) + (2 * iQ)), 5)) + fraction(aF, iO, (iN * 5)))
1678- }
1679-
1680-
1681-func iR (b,iS,iT) = {
1682- let iU = if ((iS == ec))
1683- then $Tuple2(iT, valueOrElse(getString(bF(b)), ""))
1687+func iT (P,iU) = {
1688+ let hM = valueOrElse(getInteger(bx(P)), 0)
1689+ let iV = valueOrElse(getInteger(br(aE, P)), 0)
1690+ let iW = (hM / 6)
1691+ let iX = (hM / 7)
1692+ ((aH + fraction(aH, ((hM + iW) + (2 * iX)), 5)) + fraction(aH, iV, (iU * 5)))
1693+ }
1694+
1695+
1696+func iY (c,iZ,ja) = {
1697+ let jb = if ((iZ == el))
1698+ then $Tuple2(ja, valueOrElse(getString(bG(c)), ""))
16841699 else {
1685- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
1686- let iV = valueOrElse(getString(bH(z)), aI)
1687- let cc = split(value(iV), "_")
1688- if ((cc[bk] != "L"))
1689- then throw((("Duck location type is " + cc[bk]) + ", but should be L"))
1690- else $Tuple2(cc[bl], z)
1691- }
1692- let O = iU._1
1693- let iW = iU._2
1694- let iX = value(assetInfo(fromBase58String(O)))
1695- let iY = bp(O)
1696- let iZ = valueOrErrorMessage(getInteger(iY), (("Land " + iX.name) + " is not staked"))
1697- let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned"))
1698- if ((ja != b))
1699- then throw((aA + " is not yours"))
1700+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1701+ let jc = valueOrElse(getString(bI(A)), aJ)
1702+ let ce = split(value(jc), "_")
1703+ if ((ce[bl] != "L"))
1704+ then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
1705+ else $Tuple2(ce[bm], A)
1706+ }
1707+ let P = jb._1
1708+ let jd = jb._2
1709+ let je = value(assetInfo(fromBase58String(P)))
1710+ let jf = bq(P)
1711+ let jg = valueOrErrorMessage(getInteger(jf), (("Land " + je.name) + " is not staked"))
1712+ let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1713+ if ((jh != c))
1714+ then throw((aC + " is not yours"))
17001715 else {
1701- let jb = split(iX.description, "_")
1702- $Tuple4(iW, O, jb, iZ)
1703- }
1704- }
1705-
1706-
1707-func jc (b,el,iS,iT) = if ((0 > el))
1716+ let ji = split(je.description, "_")
1717+ $Tuple4(jd, P, ji, jg)
1718+ }
1719+ }
1720+
1721+
1722+func jj (c,eu,iZ,ja) = if ((0 > eu))
17081723 then throw("Negative amount")
17091724 else {
1710- let fD = iR(b, iS, iT)
1711- let dq = fD._3[cV]
1712- let gj = gp(fD._3[cW])
1713- let gt = (lastBlock.timestamp - fD._4)
1714- if ((0 > gt))
1715- then throw(((("Saved timestamp is in future, saved = " + toString(fD._4)) + ", current = ") + toString(lastBlock.timestamp)))
1725+ let fM = iY(c, iZ, ja)
1726+ let ds = fM._3[cX]
1727+ let gs = gy(fM._3[cY])
1728+ let gC = (lastBlock.timestamp - fM._4)
1729+ if ((0 > gC))
1730+ then throw(((("Saved timestamp is in future, saved = " + toString(fM._4)) + ", current = ") + toString(lastBlock.timestamp)))
17161731 else {
1717- let iN = dp(dq)
1718- let jd = iM(fD._2, iN)
1719- let je = fraction(gt, (jd * iN), aG)
1720- if ((el > je))
1721- then throw(((("Not enough resources, available = " + toString(je)) + ", requested = ") + toString(el)))
1732+ let iU = dr(ds)
1733+ let jk = iT(fM._2, iU)
1734+ let jl = fraction(gC, (jk * iU), a)
1735+ if ((eu > jl))
1736+ then throw(((("Not enough resources, available = " + toString(jl)) + ", requested = ") + toString(eu)))
17221737 else {
1723- let jf = fraction((je - el), aG, (jd * iN))
1724- let jg = (lastBlock.timestamp - jf)
1725- let hE = (iN / cs)
1726- let gB = gx(gj, (gt - jf), hE, jd)
1727- let hD = bv(fD._2)
1728- let hF = valueOrElse(getInteger(bw(fD._2)), 0)
1729- let hu = hC(hD, hE, hF)
1730- let hL = split(hu[ba], "_")
1731- let gC = parseIntValue(hL[bd])
1732- if (if ((iS == ec))
1733- then (el > gC)
1738+ let jm = fraction((jl - eu), a, (jk * iU))
1739+ let jn = (lastBlock.timestamp - jm)
1740+ let hL = (iU / cu)
1741+ let gK = gG(gs, (gC - jm), hL, jk)
1742+ let hK = bw(fM._2)
1743+ let hM = valueOrElse(getInteger(bx(fM._2)), 0)
1744+ let hB = hJ(hK, hL, hM)
1745+ let hS = split(hB[bb], "_")
1746+ let gL = parseIntValue(hS[be])
1747+ if (if ((iZ == el))
1748+ then (eu > gL)
17341749 else false)
1735- then throw((("Only " + toString(gC)) + " space left in warehouse"))
1750+ then throw((("Only " + toString(gL)) + " space left in warehouse"))
17361751 else {
1737- let hq = bG(fD._1)
1738- let hT = hp(hq)
1739- let gA = split(hT[bg], "_")
1740- let gz = split(hu[aX], "_")
1741- let jh = if ((iS == ec))
1742- then $Tuple4(gr(gz, gj, (gt - jf), hE, jd), hT[bg], (parseIntValue(hL[bc]) + gB._2), (parseIntValue(hL[bd]) - gB._2))
1743- else if ((iS == ed))
1744- then $Tuple4(hu[aX], gr(gA, gj, (gt - jf), hE, jd), parseIntValue(hL[bc]), parseIntValue(hL[bd]))
1752+ let hx = bH(fM._1)
1753+ let ia = hw(hx)
1754+ let gJ = split(ia[bh], "_")
1755+ let gI = split(hB[aY], "_")
1756+ let jo = if ((iZ == el))
1757+ then $Tuple4(gA(gI, gs, (gC - jm), hL, jk), ia[bh], (parseIntValue(hS[bd]) + gK._2), (parseIntValue(hS[be]) - gK._2))
1758+ else if ((iZ == em))
1759+ then $Tuple4(hB[aY], gA(gJ, gs, (gC - jm), hL, jk), parseIntValue(hS[bd]), parseIntValue(hS[be]))
17451760 else {
1746- let ji = gy(gz, gA, gB, gC)
1747- let jj = min([parseIntValue(hL[bd]), gB._2])
1748- $Tuple4(ji._1, ji._2, (parseIntValue(hL[bc]) + jj), (parseIntValue(hL[bd]) - jj))
1761+ let jp = gH(gI, gJ, gK, gL)
1762+ let jq = min([parseIntValue(hS[be]), gK._2])
1763+ $Tuple4(jp._1, jp._2, (parseIntValue(hS[bd]) + jq), (parseIntValue(hS[be]) - jq))
17491764 }
1750- let jk = jh._1
1751- let jl = jh._2
1752- let jm = jh._3
1753- let jn = jh._4
1754- $Tuple5([IntegerEntry(bp(fD._2), jg), IntegerEntry(bs(aA, fD._2, b), jg)], hq, [hT[bf], jl, hT[bh], hT[bi]], hD, [hu[aW], jk, hu[aY], hu[aZ], makeString([hL[bb], toString(jm), toString(jn), hL[be]], "_")])
1765+ let jr = jo._1
1766+ let js = jo._2
1767+ let jt = jo._3
1768+ let ju = jo._4
1769+ $Tuple5([IntegerEntry(bq(fM._2), jn), IntegerEntry(bt(aC, fM._2, c), jn)], hx, [ia[bg], js, ia[bi], ia[bj]], hK, [hB[aX], jr, hB[aZ], hB[ba], makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")])
17551770 }
17561771 }
17571772 }
17581773 }
17591774
17601775
1761-func jo (b,O,iN,iS) = {
1762- let iY = bp(O)
1763- let iZ = value(getInteger(iY))
1764- let je = (fraction((lastBlock.timestamp - iZ), iM(O, iN), aG) * iN)
1765- jc(b, je, iS, O)
1766- }
1767-
1768-
1769-func jp (eH,io,jq,O) = {
1770- let b = toString(io)
1771- let fD = iR(b, ee, O)
1772- let iN = dp(fD._3[cV])
1773- let jr = bw(fD._2)
1774- let js = valueOrElse(getInteger(jr), 0)
1775- if (if (!(ch))
1776- then (js >= 3)
1776+func jv (c,P,iU,iZ) = {
1777+ let jf = bq(P)
1778+ let jg = value(getInteger(jf))
1779+ let jl = (fraction((lastBlock.timestamp - jg), iT(P, iU), a) * iU)
1780+ jj(c, jl, iZ, P)
1781+ }
1782+
1783+
1784+func jw (eQ,iv,jx,P) = {
1785+ let c = toString(iv)
1786+ let fM = iY(c, en, P)
1787+ let iU = dr(fM._3[cX])
1788+ let jy = bx(fM._2)
1789+ let jz = valueOrElse(getInteger(jy), 0)
1790+ if (if (!(cj))
1791+ then (jz >= 3)
17771792 else false)
17781793 then throw("Currently max infrastructure level = 3")
17791794 else {
1780- let jt = ((sqrt(iN, 0, 0, DOWN) / 5) + 2)
1781- let aj = (js + 1)
1782- if (if (ch)
1783- then (aj > jt)
1795+ let jA = ((sqrt(iU, 0, 0, DOWN) / 5) + 2)
1796+ let al = (jz + 1)
1797+ if (if (cj)
1798+ then (al > jA)
17841799 else false)
1785- then throw(("Currently max infrastructure level = " + toString(jt)))
1800+ then throw(("Currently max infrastructure level = " + toString(jA)))
17861801 else {
1787- let ju = fraction(dH, (iN * aj), cs)
1788- if (if (!(eH))
1789- then (jq != ju)
1802+ let jB = fraction(dQ, (iU * al), cu)
1803+ if (if (!(eQ))
1804+ then (jx != jB)
17901805 else false)
1791- then throw(("Payment attached should be " + toString(ju)))
1806+ then throw(("Payment attached should be " + toString(jB)))
17921807 else {
1793- let hq = bG(fD._1)
1794- let hT = hp(hq)
1795- let jv = split(hT[bh], "_")
1796- let jw = fraction(cn, (iN * aj), cs)
1797- let jx = makeString(eG(eH, jv, jw), "_")
1798- let jy = jo(b, fD._2, iN, ee)
1799- let jz = jy._5
1800- let jA = hr(jz[aW])
1801- let jB = makeString([split(jz[aW], "_")[0], toString(aj)], "_")
1802- let jC = hr(jB)
1803- let hL = split(jz[ba], "_")
1804- let jD = makeString([hL[bb], hL[bc], toString(((parseIntValue(hL[bd]) + jC) - jA)), toString(jC)], "_")
1805- $Tuple3(([IntegerEntry(jr, aj), IntegerEntry(dX(fD._2, b), aj), StringEntry(hq, makeString([hT[bf], jy._3[bg], jx, hT[bi]], ":")), StringEntry(jy._4, makeString([jB, jz[aX], jz[aY], jz[aZ], jD], ":"))] ++ jy._1), aj, jw)
1808+ let hx = bH(fM._1)
1809+ let ia = hw(hx)
1810+ let jC = split(ia[bi], "_")
1811+ let jD = fraction(cp, (iU * al), cu)
1812+ let jE = makeString(eP(eQ, jC, jD), "_")
1813+ let jF = jv(c, fM._2, iU, en)
1814+ let jG = jF._5
1815+ let jH = hy(jG[aX])
1816+ let jI = makeString([split(jG[aX], "_")[0], toString(al)], "_")
1817+ let jJ = hy(jI)
1818+ let hS = split(jG[bb], "_")
1819+ let jK = makeString([hS[bc], hS[bd], toString(((parseIntValue(hS[be]) + jJ) - jH)), toString(jJ)], "_")
1820+ $Tuple3(([IntegerEntry(jy, al), IntegerEntry(eg(fM._2, c), al), StringEntry(hx, makeString([ia[bg], jF._3[bh], jE, ia[bj]], ":")), StringEntry(jF._4, makeString([jI, jG[aY], jG[aZ], jG[ba], jK], ":"))] ++ jF._1), al, jD)
18061821 }
18071822 }
18081823 }
18091824 }
18101825
18111826
1812-func jE (z,jF) = {
1813- let jG = C(z)
1814- let jH = B(z)
1815- let ad = valueOrElse(getInteger(al, jH), 0)
1816- let ai = (ad + jF)
1817- let jI = ag(valueOrElse(getInteger(al, jG), 0), ai)
1818- let jJ = D(z)
1819- $Tuple2([IntegerEntry(jG, jI[0]), IntegerEntry(jH, ai), IntegerEntry(jJ, (valueOrElse(getInteger(jJ), 0) + jI[1]))], ai)
1820- }
1821-
1822-
1823-func jK (b,jF) = {
1824- let jG = G(b)
1825- let jH = F(b)
1826- let ad = valueOrElse(getInteger(al, jH), 0)
1827- let ai = (ad + jF)
1828- let jI = ag(valueOrElse(getInteger(al, jG), 0), ai)
1829- let jJ = H(b)
1830- $Tuple2([IntegerEntry(jG, jI[0]), IntegerEntry(jH, ai), IntegerEntry(jJ, (valueOrElse(getInteger(jJ), 0) + jI[1]))], ai)
1831- }
1832-
1833-
1834-func jL (b) = {
1835- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
1836- let jM = bA(b)
1837- let jN = getString(jM)
1838- if (!(isDefined(jN)))
1827+func jL (A,jM) = {
1828+ let jN = D(A)
1829+ let jO = C(A)
1830+ let af = valueOrElse(getInteger(an, jO), 0)
1831+ let ak = (af + jM)
1832+ let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1833+ let jQ = E(A)
1834+ $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1835+ }
1836+
1837+
1838+func jR (c,jM) = {
1839+ let jN = H(c)
1840+ let jO = G(c)
1841+ let af = valueOrElse(getInteger(an, jO), 0)
1842+ let ak = (af + jM)
1843+ let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1844+ let jQ = I(c)
1845+ $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1846+ }
1847+
1848+
1849+func jS (c) = {
1850+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1851+ let jT = bB(c)
1852+ let jU = getString(jT)
1853+ if (!(isDefined(jU)))
18391854 then throw("You are not eligible for ONBOARD artifact")
18401855 else {
1841- let jO = bC(b)
1842- let jP = getString(jO)
1843- if (isDefined(jP))
1844- then throw(("You already used your ONBOARD artifact on duck " + value(jP)))
1856+ let jV = bD(c)
1857+ let jW = getString(jV)
1858+ if (isDefined(jW))
1859+ then throw(("You already used your ONBOARD artifact on duck " + value(jW)))
18451860 else {
1846- let jQ = bB(z)
1847- let jR = getString(jQ)
1848- if (isDefined(jR))
1849- then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jR)))
1850- else ([StringEntry(jO, z), StringEntry(jQ, b)] ++ jE(z, aa)._1)
1861+ let jX = bC(A)
1862+ let jY = getString(jX)
1863+ if (isDefined(jY))
1864+ then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(jY)))
1865+ else ([StringEntry(jV, A), StringEntry(jX, c)] ++ jL(A, ac)._1)
18511866 }
18521867 }
18531868 }
18541869
18551870
1856-func jS (b,iT) = {
1857- let fD = iR(b, ee, iT)
1858- let O = fD._2
1859- let iN = dp(fD._3[cV])
1860- let jT = bq(aC, O)
1861- if ((valueOrElse(getInteger(jT), 0) > 0))
1871+func jZ (c,ja) = {
1872+ let fM = iY(c, en, ja)
1873+ let P = fM._2
1874+ let iU = dr(fM._3[cX])
1875+ let ka = br(aE, P)
1876+ if ((valueOrElse(getInteger(ka), 0) > 0))
18621877 then throw("Presale artifact is already activated")
1863- else if ((parseIntValue(fD._3[cU]) > dR))
1864- then throw((((aA + " ") + O) + " is not eligible for presale artifact"))
1878+ else if ((parseIntValue(fM._3[cW]) > ea))
1879+ then throw((((aC + " ") + P) + " is not eligible for presale artifact"))
18651880 else {
1866- let jy = jo(b, O, iN, ee)
1867- (((jy._1 :+ IntegerEntry(jT, iN)) :+ StringEntry(jy._2, makeString(jy._3, ":"))) :+ StringEntry(jy._4, makeString(jy._5, ":")))
1881+ let jF = jv(c, P, iU, en)
1882+ (((jF._1 :+ IntegerEntry(ka, iU)) :+ StringEntry(jF._2, makeString(jF._3, ":"))) :+ StringEntry(jF._4, makeString(jF._5, ":")))
18681883 }
18691884 }
18701885
18711886
1872-func jU (z) = {
1873- let cb = valueOrElse(getInteger(cS, bM), 0)
1874- let iV = split(valueOrElse(getString(bH(z)), aI), "_")
1875- let av = lastBlock.timestamp
1876- let cd = bV(cS, cb)
1877- let bX = cd[bR]
1878- let bY = cd[bS]
1879- if ((iV[bk] != "T"))
1887+func kb (A) = {
1888+ let cd = valueOrElse(getInteger(cU, bO), 0)
1889+ let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1890+ let ax = lastBlock.timestamp
1891+ let cf = bX(cU, cd)
1892+ let bZ = cf[bT]
1893+ let ca = cf[bU]
1894+ if ((jc[bl] != "T"))
18801895 then false
1881- else if (if (if ((parseIntValue(iV[bj]) == cb))
1882- then (bY[bU] == "INPROGRESS")
1896+ else if (if (if ((parseIntValue(jc[bk]) == cd))
1897+ then (ca[bW] == "INPROGRESS")
18831898 else false)
1884- then (parseIntValue(bX[bT]) > av)
1899+ then (parseIntValue(bZ[bV]) > ax)
18851900 else false)
18861901 then throw("Your duck is taking part in the tournament")
1887- else do(invoke(this, "exitTournamentInternal", [z], nil))
1888- }
1889-
1890-
1891-func jV (jW,aj,jX,b,jY,jZ) = {
1892- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
1893- if (jU(z))
1902+ else dq(invoke(this, "exitTournamentInternal", [A], nil))
1903+ }
1904+
1905+
1906+func kc (A) = {
1907+ let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1908+ let ax = lastBlock.timestamp
1909+ if ((jc[bl] != "D"))
1910+ then false
1911+ else {
1912+ let kd = parseIntValue(jc[bk])
1913+ let ke = parseIntValue(jc[bm])
1914+ if (if ((ax > (kd + dN)))
1915+ then (3 > ke)
1916+ else false)
1917+ then throw("Your duck is on delivery mission")
1918+ else dq(invoke(this, "exitDeliveryInternal", [A], nil))
1919+ }
1920+ }
1921+
1922+
1923+func kf (kg,al,kh,c,ki,kj) = {
1924+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1925+ if (kb(A))
18941926 then throw("mergeInternal_checkTournament")
1927+ else if (kc(A))
1928+ then throw("mergeInternal_checkDelivery")
1929+ else {
1930+ func kk (eD,P) = {
1931+ let je = value(assetInfo(fromBase58String(P)))
1932+ let jf = bq(P)
1933+ let jg = valueOrErrorMessage(getInteger(jf), (("NFT " + je.name) + " is not staked"))
1934+ let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1935+ if ((jh != c))
1936+ then throw((aC + " is not yours"))
1937+ else {
1938+ let ji = split(je.description, "_")
1939+ let di = ji[cZ]
1940+ if (if ((eD._3 != ""))
1941+ then (eD._3 != di)
1942+ else false)
1943+ then throw("Lands should be on the same continent to merge")
1944+ else {
1945+ let ds = ji[cX]
1946+ let kl = eD._1
1947+ let gw = valueOrErrorMessage(indexOf(kl, ds), "You haven't passed all the lands needed")
1948+ let km = (take(kl, gw) + drop(kl, (gw + 1)))
1949+ let iU = dr(ds)
1950+ let kn = (eD._2 + valueOrElse(getInteger(br(aE, P)), 0))
1951+ let hM = valueOrElse(getInteger(bx(P)), 0)
1952+ let ko = {
1953+ let cn = ds
1954+ if (("S" == cn))
1955+ then 3
1956+ else if (("M" == cn))
1957+ then 4
1958+ else if (("L" == cn))
1959+ then 5
1960+ else if (("XL" == cn))
1961+ then 6
1962+ else throw("Only S, M, L, XL can merge")
1963+ }
1964+ if ((hM != ko))
1965+ then throw("All lands should be maxed to merge")
1966+ else {
1967+ let ef = ji[cW]
1968+ let gs = gy(ji[cY])
1969+ let gC = (lastBlock.timestamp - jg)
1970+ if ((0 > gC))
1971+ then throw(((("Saved timestamp is in future, saved = " + toString(jg)) + ", current = ") + toString(lastBlock.timestamp)))
1972+ else {
1973+ let jk = iT(P, iU)
1974+ let hL = (iU / cu)
1975+ let js = gA(split(eD._4, "_"), gs, gC, hL, jk)
1976+ let eN = gq(eD._6, gs, hL, -1)
1977+ let kp = gq(eD._10, gs, hL, -1)
1978+ let hg = gq(eD._9, gs, hL, 1)
1979+ let kq = eD._7
1980+ let cP = indexOf(kq, P)
1981+ if (!(isDefined(cP)))
1982+ then throw(("Your staked lands don't contain " + P))
1983+ else {
1984+ let kr = bp(P)
1985+ let ks = valueOrElse(getString(kr), "")
1986+ $Tuple10(km, kn, di, js, ((((((((((((eD._5 :+ DeleteEntry(bq(P))) :+ DeleteEntry(bt(aC, P, c))) :+ DeleteEntry(ee(ef))) :+ DeleteEntry(bn(P))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(eg(P, c))) :+ DeleteEntry(br(aE, P))) :+ DeleteEntry(eh(ef))) :+ DeleteEntry(bw(P))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(P), 1)) ++ (if ((ks != ""))
1987+ then [DeleteEntry(ec(ks))]
1988+ else nil)), eN, removeByIndex(kq, value(cP)), (eD._8 + iU), hg, kp)
1989+ }
1990+ }
1991+ }
1992+ }
1993+ }
1994+ }
1995+
1996+ let hx = bH(A)
1997+ let ia = hw(hx)
1998+ let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1999+ let kt = dj(c)
2000+ let ku = getString(kt)
2001+ let kv = if (isDefined(ku))
2002+ then split_51C(value(ku), "_")
2003+ else nil
2004+ let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
2005+ let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
2006+ let eO = {
2007+ let eF = ki
2008+ let eG = size(eF)
2009+ let eH = $Tuple10(kh, 0, "", ia[bh], nil, gr, kv, 0, split("0_0_0_0_0_0", "_"), kx)
2010+ func eI (eJ,eK) = if ((eK >= eG))
2011+ then eJ
2012+ else kk(eJ, eF[eK])
2013+
2014+ func eL (eJ,eK) = if ((eK >= eG))
2015+ then eJ
2016+ else throw("List size exceeds 5")
2017+
2018+ eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2019+ }
2020+ let di = eO._3
2021+ let ha = valueOrErrorMessage(indexOf(aO, di), ("Unknown continent: " + di))
2022+ let gz = hf(eO._9, (dr(kg) / cu))
2023+ let iy = valueOrElse(getInteger(eb()), (ea + 1))
2024+ let ky = toString(iy)
2025+ let iz = Issue(es(ky, kg), makeString([ky, kg, gz, di], "_"), 1, 0, false)
2026+ let bo = calculateAssetId(iz)
2027+ let kz = toBase58String(bo)
2028+ let jE = makeString(eP((kj > 0), split(ia[bi], "_"), kj), "_")
2029+ let kA = dk(c)
2030+ let kB = valueOrElse(getInteger(kA), 0)
2031+ $Tuple2((((((((((((((((eO._5 :+ (if ((size(eO._7) > 0))
2032+ then StringEntry(kt, makeString_11C(eO._7, "_"))
2033+ else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eO._8 > kB))
2034+ then 0
2035+ else (kB - eO._8))) :+ IntegerEntry(eb(), (iy + 1))) :+ iz) :+ StringEntry(ee(ky), kz)) :+ StringEntry(bn(kz), c)) :+ StringEntry(eh(ky), c)) :+ IntegerEntry(br(aE, kz), eO._2)) :+ IntegerEntry(bx(kz), al)) :+ IntegerEntry(eg(kz, c), al)) :+ StringEntry(hx, makeString([ia[bg], eO._4, jE, ia[bj]], ":"))) :+ StringEntry(dg(), makeString(eO._6, "_"))) :+ StringEntry(dh(di), makeString(eO._10, "_"))) :+ StringEntry(bI(A), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bo)), kz)
2036+ }
2037+ }
2038+
2039+
2040+func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
2041+
2042+
2043+func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
2044+
2045+
2046+func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
2047+
2048+
2049+func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
2050+
2051+
2052+func kG (c,ki) = {
2053+ let cn = size(ki)
2054+ if ((4 == cn))
2055+ then kC(c, ki)
2056+ else if ((3 == cn))
2057+ then kD(c, ki)
2058+ else if ((5 == cn))
2059+ then kE(c, ki)
2060+ else if ((2 == cn))
2061+ then kF(c, ki)
2062+ else throw("Unknown merge")
2063+ }
2064+
2065+
2066+func kH (gw) = if (if ((gw.originCaller != cQ))
2067+ then valueOrElse(getBoolean(du()), false)
2068+ else false)
2069+ then throw("Contracts are under maintenance")
2070+ else StringEntry(dv(toString(gw.originCaller)), toBase58String(gw.transactionId))
2071+
2072+
2073+@Callable(gw)
2074+func constructorV1 (kI) = if ((gw.caller != this))
2075+ then throw("Permission denied")
2076+ else [StringEntry(cK(), kI)]
2077+
2078+
2079+
2080+@Callable(gw)
2081+func setBlocked (kJ) = if ((gw.caller != this))
2082+ then throw("permission denied")
2083+ else [BooleanEntry(du(), kJ)]
2084+
2085+
2086+
2087+@Callable(gw)
2088+func stakeLand () = {
2089+ let kK = kH(gw)
2090+ if ((size(gw.payments) != 1))
2091+ then throw("Exactly one payment required")
18952092 else {
1896- func ka (eu,O) = {
1897- let iX = value(assetInfo(fromBase58String(O)))
1898- let iY = bp(O)
1899- let iZ = valueOrErrorMessage(getInteger(iY), (("NFT " + iX.name) + " is not staked"))
1900- let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned"))
1901- if ((ja != b))
1902- then throw((aA + " is not yours"))
2093+ let kL = value(gw.payments[0])
2094+ let bo = value(kL.assetId)
2095+ let cB = toString(gw.caller)
2096+ if ((kL.amount != 1))
2097+ then throw((("NFT " + aC) + " token should be attached as payment"))
2098+ else {
2099+ let je = value(assetInfo(bo))
2100+ if ((je.issuer != this))
2101+ then throw("Unknown issuer of token")
2102+ else if (!(contains(je.name, aC)))
2103+ then throw((("Only NFT " + aC) + " tokens are accepted"))
2104+ else {
2105+ let kM = drop(je.name, 4)
2106+ let ef = if (contains(kM, "XXL"))
2107+ then dropRight(kM, 3)
2108+ else if (contains(kM, "XL"))
2109+ then dropRight(kM, 2)
2110+ else dropRight(kM, 1)
2111+ if (!(isDefined(parseInt(ef))))
2112+ then throw(("Cannot parse land number from " + je.name))
2113+ else {
2114+ let P = toBase58String(bo)
2115+ let jf = bq(P)
2116+ if (isDefined(getInteger(jf)))
2117+ then throw((("NFT " + je.name) + " is already staked"))
2118+ else {
2119+ let ji = split(je.description, "_")
2120+ let gs = gy(ji[cY])
2121+ let iU = dr(ji[cX])
2122+ let hL = (iU / cu)
2123+ let eN = gx(gs, hL, 1)
2124+ let kN = dh(ji[cZ])
2125+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2126+ let kO = makeString(gq(kx, gs, hL, 1), "_")
2127+ let kt = dj(cB)
2128+ let ku = getString(kt)
2129+ let kq = if (isDefined(ku))
2130+ then split_51C(value(ku), "_")
2131+ else nil
2132+ if (containsElement(kq, P))
2133+ then throw(("Your staked lands already contain " + P))
2134+ else if ((size(kq) >= aG))
2135+ then throw((("Your already staked max (" + toString(aG)) + ") lands"))
2136+ else {
2137+ let hM = valueOrElse(getInteger(bx(P)), 0)
2138+ let kA = dk(cB)
2139+ let kP = valueOrElse(getInteger(kA), 0)
2140+ let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2141+ $Tuple2([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aC, P, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ P), "_")), IntegerEntry(kA, (kP + iU)), StringEntry(bn(P), cB), StringEntry(eh(ef), cB), IntegerEntry(eg(P, cB), hM), StringEntry(dg(), eN), StringEntry(kN, kO), kK], kQ)
2142+ }
2143+ }
2144+ }
2145+ }
2146+ }
2147+ }
2148+ }
2149+
2150+
2151+
2152+@Callable(gw)
2153+func unstakeLand (ja) = {
2154+ let kK = kH(gw)
2155+ if ((size(gw.payments) != 0))
2156+ then throw("No payments required")
2157+ else {
2158+ let c = toString(gw.caller)
2159+ let fM = iY(c, em, ja)
2160+ let P = fM._2
2161+ let ji = fM._3
2162+ let kt = dj(c)
2163+ let gs = gy(ji[cY])
2164+ let iU = dr(ji[cX])
2165+ let hL = (iU / cu)
2166+ let eN = gx(gs, hL, -1)
2167+ let kN = dh(ji[cZ])
2168+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2169+ let kO = makeString(gq(kx, gs, hL, -1), "_")
2170+ let jF = jv(c, P, iU, em)
2171+ let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2172+ let cP = indexOf(kq, P)
2173+ if (!(isDefined(cP)))
2174+ then throw(("Your staked lands don't contain " + P))
2175+ else {
2176+ let ax = lastBlock.timestamp
2177+ let kR = valueOrElse(getInteger(cS, bJ(c)), 0)
2178+ if ((kR >= ax))
2179+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
2180+ else {
2181+ let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2182+ if ((kS > ax))
2183+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
2184+ else {
2185+ let kA = dk(c)
2186+ let kB = valueOrElse(getInteger(kA), 0)
2187+ let kT = if ((iU > kB))
2188+ then 0
2189+ else (kB - iU)
2190+ let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2191+ $Tuple2([ScriptTransfer(gw.caller, 1, fromBase58String(P)), DeleteEntry(bq(P)), DeleteEntry(bt(aC, P, c)), StringEntry(dg(), eN), StringEntry(kN, kO), StringEntry(jF._2, makeString(jF._3, ":")), if ((size(kq) > 1))
2192+ then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2193+ else DeleteEntry(kt), IntegerEntry(kA, kT), kK], kQ)
2194+ }
2195+ }
2196+ }
2197+ }
2198+ }
2199+
2200+
2201+
2202+@Callable(gw)
2203+func stakeDuck () = {
2204+ let kK = kH(gw)
2205+ if ((size(gw.payments) != 1))
2206+ then throw("Exactly one payment required")
2207+ else {
2208+ let kL = value(gw.payments[0])
2209+ let bo = value(kL.assetId)
2210+ let cB = toString(gw.caller)
2211+ if ((kL.amount != 1))
2212+ then throw((("NFT " + aD) + " token should be attached as payment"))
2213+ else {
2214+ let je = value(assetInfo(bo))
2215+ if (if ((je.issuer != dI))
2216+ then (je.issuer != dJ)
2217+ else false)
2218+ then throw((("Unknown issuer of " + aD) + " token"))
2219+ else if (!(contains(je.name, aD)))
2220+ then throw((("Only NFT " + aD) + " tokens are accepted"))
2221+ else {
2222+ let kU = toBase58String(bo)
2223+ let jf = bq(kU)
2224+ if (isDefined(getInteger(jf)))
2225+ then throw((("NFT " + je.name) + " is already staked"))
2226+ else if (isDefined(getString(bG(cB))))
2227+ then throw(("You already staked one duck: " + je.name))
2228+ else {
2229+ let kV = bI(kU)
2230+ let cc = getString(kV)
2231+ let hx = bH(kU)
2232+ let kW = getString(hx)
2233+ let iN = z(kU)
2234+ let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2235+ let kX = valueOrElse(getInteger(iN), iO)
2236+ ([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aD, toBase58String(bo), cB), lastBlock.timestamp), StringEntry(bF(kU), cB), StringEntry(bG(cB), kU)] ++ (if (isDefined(cc))
2237+ then nil
2238+ else ([StringEntry(kV, aJ)] ++ (if (isDefined(kW))
2239+ then nil
2240+ else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iN, kX)) :+ kK)))))
2241+ }
2242+ }
2243+ }
2244+ }
2245+ }
2246+
2247+
2248+
2249+@Callable(gw)
2250+func unstakeDuck (kU) = {
2251+ let kK = kH(gw)
2252+ if ((size(gw.payments) != 0))
2253+ then throw("No payments required")
2254+ else {
2255+ let bo = fromBase58String(kU)
2256+ let cB = toString(gw.caller)
2257+ let je = value(assetInfo(bo))
2258+ let jf = bq(kU)
2259+ if (!(isDefined(getInteger(jf))))
2260+ then throw((("NFT " + je.name) + " is not staked"))
2261+ else if (!(isDefined(getString(bG(cB)))))
2262+ then throw((("The duck " + je.name) + " is not staked"))
19032263 else {
1904- let jb = split(iX.description, "_")
1905- let dg = jb[cX]
1906- if (if ((eu._3 != ""))
1907- then (eu._3 != dg)
1908- else false)
1909- then throw("Lands should be on the same continent to merge")
2264+ let jh = valueOrErrorMessage(getString(bF(kU)), (("NFT " + je.name) + " is orphaned"))
2265+ if ((jh != cB))
2266+ then throw("Staked NFT is not yours")
2267+ else if (kb(kU))
2268+ then throw("unstakeDuck_checkTournament")
2269+ else if (kc(kU))
2270+ then throw("unstakeDuck_checkDelivery")
2271+ else {
2272+ let iN = z(kU)
2273+ let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2274+ let as = valueOrElse(getInteger(iN), iO)
2275+ if ((iO > as))
2276+ then throw((("Please heal your duck to " + toString(iO)) + "hp before unstaking"))
2277+ else [ScriptTransfer(gw.caller, 1, bo), DeleteEntry(jf), DeleteEntry(iN), DeleteEntry(bI(kU)), DeleteEntry(bF(kU)), DeleteEntry(bt(aD, kU, cB)), DeleteEntry(bG(cB)), kK]
2278+ }
2279+ }
2280+ }
2281+ }
2282+
2283+
2284+
2285+@Callable(gw)
2286+func claimRes (eu,kY) = {
2287+ let kK = kH(gw)
2288+ if ((size(gw.payments) != 0))
2289+ then throw("No payments required")
2290+ else {
2291+ let c = toString(gw.originCaller)
2292+ let eV = jj(c, eu, em, kY)
2293+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2294+ $Tuple2(((((eV._1 ++ jL(A, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._3[bh])
2295+ }
2296+ }
2297+
2298+
2299+
2300+@Callable(gw)
2301+func claimResToWH (eu,kY) = {
2302+ let kK = kH(gw)
2303+ if ((size(gw.payments) != 0))
2304+ then throw("No payments required")
2305+ else {
2306+ let c = toString(gw.originCaller)
2307+ let eV = jj(c, eu, el, kY)
2308+ $Tuple2(((((eV._1 ++ jR(c, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._5[aY])
2309+ }
2310+ }
2311+
2312+
2313+
2314+@Callable(gw)
2315+func flight (iC,iD) = {
2316+ let kK = kH(gw)
2317+ if ((size(gw.payments) != 0))
2318+ then throw("No payments required")
2319+ else {
2320+ let bK = toString(gw.caller)
2321+ let hb = iB(bK, iC, iD)
2322+ let iH = hb._1
2323+ let A = hb._2
2324+ let kV = bI(A)
2325+ let jc = valueOrElse(getString(kV), aJ)
2326+ let iJ = hb._4
2327+ if ((iJ == jc))
2328+ then throw("You can't fly to the same location")
2329+ else {
2330+ let kZ = split(iJ, "_")
2331+ let la = (kZ[bl] == "T")
2332+ let gj = F(A)
2333+ let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2334+ let lc = eW(lb, hb._5)
2335+ let ld = lc._1
2336+ let le = lc._2
2337+ let lf = if (!(cb(cU, jc)))
2338+ then if (la)
2339+ then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2340+ else if ((iH > 0))
2341+ then iJ
2342+ else jc
2343+ else if (!(cb(cU, iJ)))
2344+ then throw("Your duck is taking part in the tournament")
19102345 else {
1911- let dq = jb[cV]
1912- let kb = eu._1
1913- let gn = valueOrErrorMessage(indexOf(kb, dq), "You haven't passed all the lands needed")
1914- let kc = (take(kb, gn) + drop(kb, (gn + 1)))
1915- let iN = dp(dq)
1916- let kd = (eu._2 + valueOrElse(getInteger(bq(aC, O)), 0))
1917- let hF = valueOrElse(getInteger(bw(O)), 0)
1918- let ke = {
1919- let cl = dq
1920- if (("S" == cl))
1921- then 3
1922- else if (("M" == cl))
1923- then 4
1924- else if (("L" == cl))
1925- then 5
1926- else if (("XL" == cl))
1927- then 6
1928- else throw("Only S, M, L, XL can merge")
2346+ let lg = parseIntValue(kZ[bm])
2347+ let lh = split(jc, "_")
2348+ let cd = valueOrElse(getInteger(cU, bO), 0)
2349+ if ((lg != (parseIntValue(lh[bm]) + 1)))
2350+ then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2351+ else if ((iH > 0))
2352+ then {
2353+ let li = valueOrElse(getInteger(cU, bS(cd, A)), 0)
2354+ let lj = if ((lg > li))
2355+ then invoke(cU, "saveDuckResult", [A, lg], nil)
2356+ else unit
2357+ if ((lj == lj))
2358+ then iJ
2359+ else throw("Strict value is not equal to itself.")
2360+ }
2361+ else jc
2362+ }
2363+ $Tuple2(([StringEntry(kV, lf), StringEntry(gj, ld), IntegerEntry(z(A), iH), kK] ++ (if (le)
2364+ then [StringEntry(L(A), "0_0_0_0_0")]
2365+ else (nil ++ jL(A, if ((iH > 0))
2366+ then V
2367+ else W)._1))), hb._3)
2368+ }
2369+ }
2370+ }
2371+
2372+
2373+
2374+@Callable(gw)
2375+func heal (lk,ll,lm) = {
2376+ let kK = kH(gw)
2377+ if (if (if ((0 > lk))
2378+ then true
2379+ else (0 > ll))
2380+ then true
2381+ else (0 > lm))
2382+ then throw("Quantity cannot be negative")
2383+ else {
2384+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2385+ if (kb(A))
2386+ then throw("heal_checkTournament")
2387+ else if (kc(A))
2388+ then throw("heal_checkDelivery")
2389+ else {
2390+ let ln = [lk, ll, lm]
2391+ let iN = z(A)
2392+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
2393+ let lo = valueOrElse(getInteger(iN), iO)
2394+ if ((lo >= iO))
2395+ then throw((("HP should be < " + toString(iO)) + " to heal"))
2396+ else {
2397+ let hx = bH(A)
2398+ let ia = hw(hx)
2399+ let lp = if ((ia[bj] == ""))
2400+ then nil
2401+ else split_4C(ia[bj], "_")
2402+ func lq (eD,ch) = {
2403+ let dp = eD._2
2404+ let gS = if ((size(lp) > dp))
2405+ then parseIntValue(lp[dp])
2406+ else 0
2407+ if ((3 > dp))
2408+ then {
2409+ let lr = ln[dp]
2410+ if ((lr > gS))
2411+ then throw(((("You have only " + toString(gS)) + " of ") + aN[dp]))
2412+ else $Tuple3((eD._1 :+ toString((gS - lr))), (dp + 1), (eD._3 + (parseIntValue(split(ch, "_")[aT]) * lr)))
2413+ }
2414+ else $Tuple3((eD._1 :+ toString(gS)), (dp + 1), eD._3)
19292415 }
1930- if ((hF != ke))
1931- then throw("All lands should be maxed to merge")
2416+
2417+ let eV = {
2418+ let eF = aR
2419+ let eG = size(eF)
2420+ let eH = $Tuple3(nil, 0, 0)
2421+ func eI (eJ,eK) = if ((eK >= eG))
2422+ then eJ
2423+ else lq(eJ, eF[eK])
2424+
2425+ func eL (eJ,eK) = if ((eK >= eG))
2426+ then eJ
2427+ else throw("List size exceeds 50")
2428+
2429+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
2430+ }
2431+ let ls = min([iO, (lo + eV._3)])
2432+ $Tuple2(([IntegerEntry(iN, ls), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], makeString(eV._1, "_")], ":")), kK] ++ jL(A, (ad * ((lk + ll) + lm)))._1), ls)
2433+ }
2434+ }
2435+ }
2436+ }
2437+
2438+
2439+
2440+@Callable(gw)
2441+func healES () = {
2442+ let kK = kH(gw)
2443+ if ((size(gw.payments) != 1))
2444+ then throw("Exactly one payment required")
2445+ else {
2446+ let kL = value(gw.payments[0])
2447+ if ((kL.assetId != cm))
2448+ then throw("Allowed USDT payment only!")
2449+ else {
2450+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2451+ if (kb(A))
2452+ then throw("healES_checkTournament")
2453+ else if (kc(A))
2454+ then throw("healES_checkDelivery")
2455+ else {
2456+ let iN = z(A)
2457+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
2458+ let lo = valueOrElse(getInteger(iN), iO)
2459+ if ((lo > 0))
2460+ then throw("HP should be 0 to call Emergency Service")
19322461 else {
1933- let dW = jb[cU]
1934- let gj = gp(jb[cW])
1935- let gt = (lastBlock.timestamp - iZ)
1936- if ((0 > gt))
1937- then throw(((("Saved timestamp is in future, saved = " + toString(iZ)) + ", current = ") + toString(lastBlock.timestamp)))
2462+ let hx = bH(A)
2463+ let ia = hw(hx)
2464+ let lp = if ((ia[bj] == ""))
2465+ then nil
2466+ else split_4C(ia[bj], "_")
2467+ let lt = if ((size(lp) > 0))
2468+ then parseIntValue(lp[0])
2469+ else 0
2470+ let lu = if ((size(lp) > 1))
2471+ then parseIntValue(lp[1])
2472+ else 0
2473+ let lv = if ((size(lp) > 2))
2474+ then parseIntValue(lp[2])
2475+ else 0
2476+ if (if (if ((lt > 0))
2477+ then true
2478+ else (lu > 0))
2479+ then true
2480+ else (lv > 0))
2481+ then throw("You have to use own Medical Kit")
19382482 else {
1939- let jd = iM(O, iN)
1940- let hE = (iN / cs)
1941- let jl = gr(split(eu._4, "_"), gj, gt, hE, jd)
1942- let eE = gh(eu._6, gj, hE, -1)
1943- let kf = gh(eu._10, gj, hE, -1)
1944- let gX = gh(eu._9, gj, hE, 1)
1945- let kg = eu._7
1946- let cN = indexOf(kg, O)
1947- if (!(isDefined(cN)))
1948- then throw(("Your staked lands don't contain " + O))
2483+ let lw = getString(cR, bL())
2484+ let lx = if (isDefined(lw))
2485+ then split_4C(value(lw), "_")
2486+ else nil
2487+ let ly = if ((size(lx) > 0))
2488+ then parseIntValue(lx[0])
2489+ else 0
2490+ if ((0 >= ly))
2491+ then throw("There are no Medical Kits L1 at Emergency Service storage")
19492492 else {
1950- let kh = bo(O)
1951- let ki = valueOrElse(getString(kh), "")
1952- $Tuple10(kc, kd, dg, jl, ((((((((((((eu._5 :+ DeleteEntry(bp(O))) :+ DeleteEntry(bs(aA, O, b))) :+ DeleteEntry(dV(dW))) :+ DeleteEntry(bm(O))) :+ DeleteEntry(bw(O))) :+ DeleteEntry(dX(O, b))) :+ DeleteEntry(bq(aC, O))) :+ DeleteEntry(dY(dW))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(kh)) :+ Burn(fromBase58String(O), 1)) ++ (if ((ki != ""))
1953- then [DeleteEntry(dT(ki))]
1954- else nil)), eE, removeByIndex(kg, value(cN)), (eu._8 + iN), gX, kf)
2493+ let ls = (lo + parseIntValue(split(aR[0], "_")[aT]))
2494+ let lz = makeString([toString((ly - 1)), removeByIndex(lx, 0)], "_")
2495+ let ch = split(aR[0], "_")
2496+ let lA = cg(ch)
2497+ let lB = fraction((lA * aL), aK, (ct * aW))
2498+ if ((kL.amount != lB))
2499+ then throw(("Payment attached should be " + toString(lB)))
2500+ else {
2501+ let eV = dl(invoke(cR, "updateEsStorage", [lz], [AttachedPayment(cm, lB)]))
2502+ $Tuple2(([IntegerEntry(iN, ls), kK] ++ jL(A, X)._1), eV)
2503+ }
2504+ }
2505+ }
2506+ }
2507+ }
2508+ }
2509+ }
2510+ }
2511+
2512+
2513+
2514+@Callable(gw)
2515+func updateBackpack (A,lC) = if ((gw.caller != cR))
2516+ then throw("permission denied")
2517+ else $Tuple2([StringEntry(bH(A), lC)], lC)
2518+
2519+
2520+
2521+@Callable(gw)
2522+func commitForRandom () = {
2523+ let kK = kH(gw)
2524+ let lD = (height + de)
2525+ let c = toString(gw.caller)
2526+ $Tuple2(([IntegerEntry(df(c), lD)] :+ kK), lD)
2527+ }
2528+
2529+
2530+
2531+@Callable(gw)
2532+func awardSLand (cB) = if ((gw.caller != cU))
2533+ then throw("Access denied")
2534+ else if ((size(gw.payments) != 0))
2535+ then throw("No payments required")
2536+ else {
2537+ let eV = iu(addressFromStringValue(cB), gw.transactionId)
2538+ $Tuple2(eV._1, eV._2._1)
2539+ }
2540+
2541+
2542+
2543+@Callable(gw)
2544+func buySLand () = {
2545+ let kK = kH(gw)
2546+ if ((size(gw.payments) != 1))
2547+ then throw("Exactly one payment required")
2548+ else {
2549+ let kL = value(gw.payments[0])
2550+ if ((kL.assetId != cm))
2551+ then throw("Allowed USDT payment only!")
2552+ else if ((kL.amount != dS))
2553+ then throw(("Payment attached should be " + toString(dS)))
2554+ else {
2555+ let eV = iu(gw.caller, gw.transactionId)
2556+ let lE = do(invoke(cV, "burnAcres", [dT], nil))
2557+ $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2558+ }
2559+ }
2560+ }
2561+
2562+
2563+
2564+@Callable(gw)
2565+func expedition (iC,iD) = {
2566+ let kK = kH(gw)
2567+ if ((size(gw.payments) != 0))
2568+ then throw("No payments required")
2569+ else {
2570+ let bK = toString(gw.caller)
2571+ let hb = iB(bK, iC, iD)
2572+ let A = hb._2
2573+ let iN = z(A)
2574+ let hx = bH(A)
2575+ let ia = hw(hx)
2576+ let jC = split(ia[bi], "_")
2577+ let jE = makeString(eP(true, jC, dR), "_")
2578+ let gj = F(A)
2579+ let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2580+ let lF = eW(lb, hb._5)
2581+ let ld = lF._1
2582+ let le = lF._2
2583+ let lG = iu(gw.caller, gw.transactionId)
2584+ let iA = lG._2._1
2585+ let eV = if ((0 >= hb._1))
2586+ then $Tuple3([IntegerEntry(iN, 0), StringEntry(gj, ld)], "", 0)
2587+ else $Tuple3((lG._1 ++ (if (le)
2588+ then [StringEntry(L(A), "0_0_0_0_0")]
2589+ else ((((nil :+ StringEntry(bI(A), makeString([lG._2._2, "L", iA], "_"))) :+ IntegerEntry(iN, hb._1)) :+ StringEntry(gj, ld)) :+ StringEntry(hx, makeString([ia[bg], ia[bh], jE, ia[bj]], ":"))))), iA, hb._3)
2590+ if (kb(A))
2591+ then throw("expedition_checkTournament")
2592+ else if (kc(A))
2593+ then throw("expedition_checkDelivery")
2594+ else {
2595+ let lE = do(invoke(cV, "burnAcres", [dT], nil))
2596+ $Tuple2(((eV._1 ++ jL(A, Z)._1) :+ kK), $Tuple3(eV._2, eV._3, lE))
2597+ }
2598+ }
2599+ }
2600+
2601+
2602+
2603+@Callable(gw)
2604+func buySLandForAcres () = {
2605+ let kK = kH(gw)
2606+ if ((size(gw.payments) != 1))
2607+ then throw("exactly 1 payment must be attached")
2608+ else {
2609+ let kL = gw.payments[0]
2610+ let fc = kL.amount
2611+ if (if (!(isDefined(kL.assetId)))
2612+ then true
2613+ else (value(kL.assetId) != dd))
2614+ then throw("ACRES payments only!")
2615+ else if ((fc != dT))
2616+ then throw(("Payment attached should be " + toString(dT)))
2617+ else {
2618+ let eV = iu(gw.caller, gw.transactionId)
2619+ let lE = do(invoke(cV, "burnAcres", [dT], [AttachedPayment(dd, fc)]))
2620+ $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2621+ }
2622+ }
2623+ }
2624+
2625+
2626+
2627+@Callable(gw)
2628+func upgradeInfra (P) = {
2629+ let kK = kH(gw)
2630+ if ((size(gw.payments) != 0))
2631+ then throw("No payments required")
2632+ else {
2633+ let eV = jw(true, gw.caller, 0, P)
2634+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2635+ $Tuple2(((eV._1 :+ kK) ++ jL(A, fraction(aa, eV._3, ct))._1), eV._2)
2636+ }
2637+ }
2638+
2639+
2640+
2641+@Callable(gw)
2642+func activateArtifact (lH,lI) = {
2643+ let kK = kH(gw)
2644+ if ((size(gw.payments) != 0))
2645+ then throw("No payments required")
2646+ else {
2647+ let c = toString(gw.caller)
2648+ let eV = {
2649+ let cn = lH
2650+ if (("PRESALE" == cn))
2651+ then jZ(c, lI)
2652+ else if (("ONBOARD" == cn))
2653+ then jS(c)
2654+ else throw("Unknown artifact")
2655+ }
2656+ (eV :+ kK)
2657+ }
2658+ }
2659+
2660+
2661+
2662+@Callable(gw)
2663+func mergeLands (ki) = {
2664+ let kK = kH(gw)
2665+ if ((size(gw.payments) != 0))
2666+ then throw("No payments required")
2667+ else {
2668+ let eV = kG(toString(gw.caller), ki)
2669+ $Tuple2(((eV._1 :+ kK) ++ jR(toString(gw.caller), ab)._1), eV._2)
2670+ }
2671+ }
2672+
2673+
2674+
2675+@Callable(gw)
2676+func cargoExchange (lJ,P) = {
2677+ let kK = kH(gw)
2678+ if ((size(gw.payments) != 0))
2679+ then throw("No payments required")
2680+ else {
2681+ let hZ = split_4C(lJ, ":")
2682+ let c = toString(gw.originCaller)
2683+ let je = value(assetInfo(fromBase58String(P)))
2684+ let jf = bq(P)
2685+ if (!(isDefined(getInteger(jf))))
2686+ then throw((je.name + " is not staked"))
2687+ else {
2688+ let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
2689+ if ((jh != c))
2690+ then throw((aC + " is not yours"))
2691+ else {
2692+ let hL = (dr(split(je.description, "_")[cX]) / cu)
2693+ let hM = valueOrElse(getInteger(bx(P)), 0)
2694+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2695+ let jc = valueOrElse(getString(bI(A)), aJ)
2696+ let ce = split(value(jc), "_")
2697+ if ((ce[bl] != "L"))
2698+ then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
2699+ else if ((ce[bm] != P))
2700+ then throw(("Duck should be on the land " + P))
2701+ else {
2702+ let hK = bw(P)
2703+ let hB = hJ(hK, hL, hM)
2704+ let hx = bH(A)
2705+ let ia = hw(hx)
2706+ let eV = hY(hZ, hB, ia)
2707+ let hS = split(hB[bb], "_")
2708+ let jt = (parseIntValue(hS[bd]) + eV._7)
2709+ let ju = (parseIntValue(hS[be]) - eV._7)
2710+[StringEntry(hx, makeString_2C([ia[bg], eV._4, eV._5, eV._6], ":")), StringEntry(hK, makeString_2C([hB[aX], eV._1, eV._2, eV._3, makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")], ":")), kK]
2711+ }
2712+ }
2713+ }
2714+ }
2715+ }
2716+
2717+
2718+
2719+@Callable(gw)
2720+func saveWarehouse (hO,P) = if ((gw.caller != cR))
2721+ then throw("Access denied")
2722+ else {
2723+ let hK = bw(P)
2724+ let hP = split_4C(hO, ":")
2725+ if ((size(hP) != 5))
2726+ then throw("warehouse string should contain 4 ':' separators")
2727+ else {
2728+ let lK = split(hP[bb], "_")[bc]
2729+ let jt = hA(hP)
2730+ let lL = hy(hP[aX])
2731+ let ju = ((lL - parseIntValue(lK)) - jt)
2732+ let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([lK, toString(jt), toString(ju), toString(lL)], "_")], ":")
2733+ $Tuple2([StringEntry(hK, lM)], lM)
2734+ }
2735+ }
2736+
2737+
2738+
2739+@Callable(gw)
2740+func fixWarehouseFormat (P) = if ((gw.caller != cQ))
2741+ then throw("Access denied")
2742+ else {
2743+ let hK = bw(P)
2744+ let je = value(assetInfo(fromBase58String(P)))
2745+ let hL = (dr(split(je.description, "_")[cX]) / cu)
2746+ let hM = valueOrElse(getInteger(bx(P)), 0)
2747+ let hP = hJ(hK, hL, hM)
2748+ let lK = do(invoke(cR, "recalcLockedVolumeREADONLY", [P, hP], nil))
2749+ let jt = hA(hP)
2750+ let lL = hy(hP[aX])
2751+ let ju = ((lL - lK) - jt)
2752+ let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([toString(lK), toString(jt), toString(ju), toString(lL)], "_")], ":")
2753+ $Tuple2([StringEntry(hK, lM)], lM)
2754+ }
2755+
2756+
2757+
2758+@Callable(gw)
2759+func fixContinentProportions (ki) = if ((gw.caller != cQ))
2760+ then throw("Access denied")
2761+ else {
2762+ func lN (eD,lO) = (eD :+ valueOrElse(getString(dh(lO)), "0_0_0_0_0_0"))
2763+
2764+ let gg = {
2765+ let eF = aO
2766+ let eG = size(eF)
2767+ let eH = nil
2768+ func eI (eJ,eK) = if ((eK >= eG))
2769+ then eJ
2770+ else lN(eJ, eF[eK])
2771+
2772+ func eL (eJ,eK) = if ((eK >= eG))
2773+ then eJ
2774+ else throw("List size exceeds 5")
2775+
2776+ eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2777+ }
2778+ func lP (eD,P) = {
2779+ let je = value(assetInfo(fromBase58String(P)))
2780+ let ji = split(je.description, "_")
2781+ let hL = (dr(ji[cX]) / cu)
2782+ let lO = ji[cZ]
2783+ let gs = gy(ji[cY])
2784+ let ha = value(indexOf(aO, lO))
2785+ let kx = split(eD[ha], "_")
2786+ let lQ = makeString(gq(kx, gs, hL, 1), "_")
2787+ let cn = lO
2788+ if (("Americas" == cn))
2789+ then [lQ, eD[1], eD[2], eD[3], eD[4]]
2790+ else if (("Europe" == cn))
2791+ then [eD[0], lQ, eD[2], eD[3], eD[4]]
2792+ else if (("Asia" == cn))
2793+ then [eD[0], eD[1], lQ, eD[3], eD[4]]
2794+ else if (("Africa" == cn))
2795+ then [eD[0], eD[1], eD[2], lQ, eD[4]]
2796+ else if (("Oceania" == cn))
2797+ then [eD[0], eD[1], eD[2], eD[3], lQ]
2798+ else throw("wrong continent")
2799+ }
2800+
2801+ let eO = {
2802+ let eF = ki
2803+ let eG = size(eF)
2804+ let eH = gg
2805+ func hr (eJ,eK) = if ((eK >= eG))
2806+ then eJ
2807+ else lP(eJ, eF[eK])
2808+
2809+ func hs (eJ,eK) = if ((eK >= eG))
2810+ then eJ
2811+ else throw("List size exceeds 100")
2812+
2813+ hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2814+ }
2815+ $Tuple2([StringEntry(dh("Americas"), eO[0]), StringEntry(dh("Europe"), eO[1]), StringEntry(dh("Asia"), eO[2]), StringEntry(dh("Africa"), eO[3]), StringEntry(dh("Oceania"), eO[4])], 0)
2816+ }
2817+
2818+
2819+
2820+@Callable(gw)
2821+func fixStakedPieces (cB) = if ((gw.caller != cQ))
2822+ then throw("Access denied")
2823+ else {
2824+ let kB = if ((cB == ""))
2825+ then 0
2826+ else {
2827+ let ku = getString(an, dj(cB))
2828+ let kq = if (isDefined(ku))
2829+ then split_51C(value(ku), "_")
2830+ else nil
2831+ func lR (eD,P) = {
2832+ let je = value(assetInfo(fromBase58String(P)))
2833+ let ds = split(je.description, "_")[cX]
2834+ (eD + dr(ds))
2835+ }
2836+
2837+ let eF = kq
2838+ let eG = size(eF)
2839+ let eH = 0
2840+ func eI (eJ,eK) = if ((eK >= eG))
2841+ then eJ
2842+ else lR(eJ, eF[eK])
2843+
2844+ func eL (eJ,eK) = if ((eK >= eG))
2845+ then eJ
2846+ else throw("List size exceeds 100")
2847+
2848+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2849+ }
2850+ $Tuple2([IntegerEntry(dk(cB), kB)], kB)
2851+ }
2852+
2853+
2854+
2855+@Callable(gw)
2856+func setCustomName (bo,ks,bs) = {
2857+ let kK = kH(gw)
2858+ if ((size(gw.payments) != 1))
2859+ then throw("Exactly one payment required")
2860+ else {
2861+ let kL = value(gw.payments[0])
2862+ if ((kL.assetId != cm))
2863+ then throw("Allowed USDT payment only!")
2864+ else if ((kL.amount != dO))
2865+ then throw(("Payment should be " + toString(dO)))
2866+ else if (contains(ks, "__"))
2867+ then throw(("Name should not contain '__': " + ks))
2868+ else if ((size(ks) > dP))
2869+ then throw(("Name too long, maxLength=" + toString(dP)))
2870+ else {
2871+ let c = toString(gw.originCaller)
2872+ let lS = {
2873+ let cn = bs
2874+ if (("ACCOUNT" == cn))
2875+ then {
2876+ let lT = ej(ks)
2877+ let lU = getString(lT)
2878+ if (isDefined(lU))
2879+ then throw(("Name already registered: " + ks))
2880+ else {
2881+ let lV = bA(c)
2882+ let lW = getString(lV)
2883+ let lX = if (isDefined(lW))
2884+ then [DeleteEntry(ej(value(lW)))]
2885+ else nil
2886+ (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jR(c, Y)._1)
2887+ }
2888+ }
2889+ else if (("LAND" == cn))
2890+ then {
2891+ let je = value(assetInfo(fromBase58String(bo)))
2892+ let jf = bq(bo)
2893+ if (!(isDefined(getInteger(jf))))
2894+ then throw((je.name + " is not staked"))
2895+ else {
2896+ let jh = valueOrErrorMessage(getString(bn(bo)), (("NFT " + je.name) + " is orphaned"))
2897+ if ((jh != c))
2898+ then throw((aC + " is not yours"))
2899+ else {
2900+ let lT = ec(ks)
2901+ let lU = getString(lT)
2902+ if (isDefined(lU))
2903+ then throw(("Name already registered: " + ks))
2904+ else {
2905+ let lY = bp(bo)
2906+ let lW = getString(lY)
2907+ let lX = if (isDefined(lW))
2908+ then [DeleteEntry(ec(value(lW)))]
2909+ else nil
2910+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jR(c, Y)._1)
2911+ }
2912+ }
2913+ }
2914+ }
2915+ else if (("DUCK" == cn))
2916+ then {
2917+ let je = value(assetInfo(fromBase58String(bo)))
2918+ let jf = bq(bo)
2919+ if (if (!(isDefined(getInteger(jf))))
2920+ then true
2921+ else !(isDefined(getString(bG(c)))))
2922+ then throw((je.name + " is not staked"))
2923+ else {
2924+ let jh = valueOrErrorMessage(getString(bF(bo)), (("NFT " + je.name) + " is orphaned"))
2925+ if ((jh != c))
2926+ then throw((aD + " is not yours"))
2927+ else {
2928+ let lT = ei(ks)
2929+ let lU = getString(lT)
2930+ if (isDefined(lU))
2931+ then throw(("Name already registered: " + ks))
2932+ else {
2933+ let lY = bz(bo)
2934+ let lW = getString(lY)
2935+ let lX = if (isDefined(lW))
2936+ then [DeleteEntry(ei(value(lW)))]
2937+ else nil
2938+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jL(bo, Y)._1)
2939+ }
2940+ }
2941+ }
2942+ }
2943+ else throw("Unknown entity type")
2944+ }
2945+ $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cm)) :+ kK), 0)
2946+ }
2947+ }
2948+ }
2949+
2950+
2951+
2952+@Callable(gw)
2953+func setReferrals (lZ,ma) = if ((gw.callerPublicKey != dK))
2954+ then throw("Permission denied")
2955+ else {
2956+ let kK = kH(gw)
2957+ if ((size(gw.payments) != 0))
2958+ then throw("No payments required")
2959+ else if (!(isDefined(addressFromString(lZ))))
2960+ then throw(("Invalid address: " + lZ))
2961+ else if (!(isDefined(addressFromString(ma))))
2962+ then throw(("Invalid address: " + ma))
2963+ else {
2964+ let mb = ek()
2965+ let mc = getString(mb)
2966+ let md = if (isDefined(mc))
2967+ then split_4C(value(mc), "_")
2968+ else nil
2969+ if (containsElement(md, ma))
2970+ then throw((ma + " is not newbie (already has referrals)"))
2971+ else {
2972+ let jT = bB(ma)
2973+ let jU = getString(jT)
2974+ if (if (isDefined(jU))
2975+ then isDefined(addressFromString(value(jU)))
2976+ else false)
2977+ then throw(((ma + " already has refBy: ") + value(jU)))
2978+ else {
2979+ let me = bE(lZ)
2980+ let mf = getString(me)
2981+ let mg = if (isDefined(mf))
2982+ then split_4C(value(mf), "_")
2983+ else nil
2984+ if (containsElement(mg, ma))
2985+ then throw((((lZ + " already contains ") + ma) + " within referrals"))
2986+ else {
2987+ let mh = makeString_2C((mg :+ ma), "_")
2988+ let mi = if (containsElement(md, lZ))
2989+ then value(mc)
2990+ else makeString_2C((md :+ lZ), "_")
2991+ $Tuple2([StringEntry(jT, lZ), StringEntry(me, mh), StringEntry(mb, mi), kK], 0)
2992+ }
2993+ }
2994+ }
2995+ }
2996+ }
2997+
2998+
2999+
3000+@Callable(gw)
3001+func distributePoints (mj,mk,ml,mm,mn) = {
3002+ let kK = kH(gw)
3003+ if ((size(gw.payments) != 0))
3004+ then throw("No payments required")
3005+ else {
3006+ let c = toString(gw.originCaller)
3007+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3008+ let mo = I(c)
3009+ let mp = valueOrElse(getInteger(an, mo), 0)
3010+ let mq = E(A)
3011+ let mr = valueOrElse(getInteger(an, mq), 0)
3012+ let ms = (mp + mr)
3013+ let mt = ((((mj + mk) + ml) + mm) + mn)
3014+ if ((mt > ms))
3015+ then throw((("There are only " + toString(ms)) + " free points to distribute"))
3016+ else {
3017+ let mu = B(A)
3018+ let aq = split(valueOrElse(getString(an, mu), "0_0_0_0_0"), "_")
3019+ let mv = (mp - mt)
3020+ $Tuple2([IntegerEntry(mo, if ((0 > mv))
3021+ then 0
3022+ else mv), IntegerEntry(mq, if ((0 > mv))
3023+ then (mr + mv)
3024+ else mr), StringEntry(mu, makeString([toString((parseIntValue(aq[k]) + mj)), toString((parseIntValue(aq[l]) + mk)), toString((parseIntValue(aq[m]) + ml)), toString((parseIntValue(aq[n]) + mm)), toString((parseIntValue(aq[o]) + mn))], "_")), kK], 0)
3025+ }
3026+ }
3027+ }
3028+
3029+
3030+
3031+@Callable(gw)
3032+func splitByGlobalWeightsREADONLY (eu) = $Tuple2(nil, eM(eu))
3033+
3034+
3035+
3036+@Callable(gw)
3037+func splitByGlobalAndLocalWeightsREADONLY (mw,mx,gz) = {
3038+ let gs = gy(gz)
3039+ $Tuple2(nil, $Tuple2(eM(mw), ex(mx, gs)))
3040+ }
3041+
3042+
3043+
3044+@Callable(gw)
3045+func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hw(bH(A)), ":"))
3046+
3047+
3048+
3049+@Callable(gw)
3050+func getWarehouseREADONLY (P) = {
3051+ let je = value(assetInfo(fromBase58String(P)))
3052+ let hL = (dr(split(je.description, "_")[cX]) / cu)
3053+ let hM = valueOrElse(getInteger(bx(P)), 0)
3054+ $Tuple2(nil, makeString_2C(hJ(bw(P), hL, hM), ":"))
3055+ }
3056+
3057+
3058+
3059+@Callable(gw)
3060+func saveLastTx () = {
3061+ let iv = gw.caller
3062+ if (!(containsElement([cT, cR, cU, cV], iv)))
3063+ then throw("Access denied")
3064+ else $Tuple2([kH(gw)], 42)
3065+ }
3066+
3067+
3068+
3069+@Callable(gw)
3070+func updateDuckStats (A,jM) = if ((gw.caller != cR))
3071+ then throw("Access denied")
3072+ else jL(A, jM)
3073+
3074+
3075+
3076+@Callable(gw)
3077+func updateAccStats (c,jM) = if ((gw.caller != cR))
3078+ then throw("Access denied")
3079+ else jR(c, jM)
3080+
3081+
3082+
3083+@Callable(gw)
3084+func equipDuck (my) = {
3085+ let kK = kH(gw)
3086+ if ((size(gw.payments) != 0))
3087+ then throw("No payments required")
3088+ else {
3089+ let c = toString(gw.originCaller)
3090+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3091+ if (kb(A))
3092+ then throw("equipDuck_checkTournament")
3093+ else if (kc(A))
3094+ then throw("equipDuck_checkDelivery")
3095+ else {
3096+ let gj = F(A)
3097+ let mz = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3098+ let hx = bH(A)
3099+ let ia = hw(hx)
3100+ let ld = split(my, "_")
3101+ if ((size(ld) != q))
3102+ then throw("Wrong equipment string")
3103+ else {
3104+ let gl = fY(mz, fj(ia[bj]), true, nil)
3105+ let gm = split(ld[p], ";")[1]
3106+ let ao = if ((gm == ""))
3107+ then 0
3108+ else {
3109+ let gn = split(gm, ",")[0]
3110+ if ((gn == ""))
3111+ then 0
3112+ else {
3113+ let fy = split(gn, ":")
3114+ let cP = fy[0]
3115+ let go = fy[1]
3116+ if (if (if (if (if ((cP == "06"))
3117+ then true
3118+ else (cP == "07"))
3119+ then true
3120+ else (cP == "08"))
3121+ then (go != "")
3122+ else false)
3123+ then (parseIntValue(go) > 0)
3124+ else false)
3125+ then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
3126+ else 0
3127+ }
3128+ }
3129+ let fT = am(this, A, ao, true)
3130+ let gp = fY(ld, gl, false, fT)
3131+ let mA = fo(gp)
3132+ $Tuple2([StringEntry(gj, my), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], mA], ":")), StringEntry(L(A), makeString([toString(fT[7]), toString(fT[8]), toString(fT[9]), toString(fT[10]), toString(fT[11])], "_")), kK], 0)
3133+ }
3134+ }
3135+ }
3136+ }
3137+
3138+
3139+
3140+@Callable(gw)
3141+func fortificateLand (P,mB) = {
3142+ let kK = kH(gw)
3143+ if ((size(gw.payments) != 0))
3144+ then throw("No payments required")
3145+ else {
3146+ let c = toString(gw.originCaller)
3147+ let A = valueOrElse(getString(bG(c)), "")
3148+ let ft = am(this, A, 0, false)
3149+ let mC = by(P)
3150+ let mD = split(valueOrElse(getString(mC), ":0_15:0_18:0"), "_")
3151+ let je = value(assetInfo(fromBase58String(P)))
3152+ let hL = (dr(split(je.description, "_")[cX]) / cu)
3153+ let hM = valueOrElse(getInteger(bx(P)), 0)
3154+ let hK = bw(P)
3155+ let hP = hJ(hK, hL, hM)
3156+ let mE = split(hP[bb], "_")
3157+ let mF = parseIntValue(mE[bd])
3158+ let mG = parseIntValue(mE[be])
3159+ let mH = split(mB, "_")
3160+ let mI = gf(mD, fj(hP[ba]), mF, mG, true, nil)
3161+ let gl = mI._1
3162+ let mJ = mI._2
3163+ let mK = mI._3
3164+ let mL = gf(mH, gl, mJ, mK, false, ft)
3165+ let gp = mL._1
3166+ let mM = mL._2
3167+ let mN = mL._3
3168+ let mA = fo(gp)
3169+ let jK = makeString([mE[bc], toString(mM), toString(mN), mE[bf]], "_")
3170+ $Tuple2([StringEntry(mC, mB), StringEntry(hK, makeString_2C([hP[aX], hP[aY], hP[aZ], mA, jK], ":")), kK], 0)
3171+ }
3172+ }
3173+
3174+
3175+
3176+@Callable(gw)
3177+func initDuckTourAttempt (A) = if ((gw.caller != cU))
3178+ then throw("Access denied")
3179+ else {
3180+ let kK = kH(gw)
3181+ let iN = z(A)
3182+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
3183+ let kX = valueOrElse(getInteger(iN), iO)
3184+ let mO = bI(A)
3185+ let jc = valueOrElse(getString(mO), aJ)
3186+ let cd = valueOrElse(getInteger(cU, bO), 0)
3187+ let mP = (toString(cd) + "_T_0")
3188+ $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, mP)], mP)
3189+ }
3190+
3191+
3192+
3193+@Callable(gw)
3194+func breakAttempt () = {
3195+ let kK = kH(gw)
3196+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
3197+ let mO = bI(A)
3198+ let jc = valueOrElse(getString(mO), aJ)
3199+ if ((split(jc, "_")[bl] != "T"))
3200+ then throw("Your duck is not in the tournament")
3201+ else {
3202+ let mQ = getIntegerValue(J(A))
3203+ let mR = getStringValue(K(A))
3204+ $Tuple2([kK, IntegerEntry(z(A), mQ), StringEntry(mO, mR)], jc)
3205+ }
3206+ }
3207+
3208+
3209+
3210+@Callable(gw)
3211+func exitTournamentInternal (A) = if ((gw.caller != this))
3212+ then throw("Access denied")
3213+ else {
3214+ let mQ = getIntegerValue(J(A))
3215+ let mR = getStringValue(K(A))
3216+ $Tuple2([IntegerEntry(z(A), mQ), StringEntry(bI(A), mR)], false)
3217+ }
3218+
3219+
3220+
3221+@Callable(gw)
3222+func exitDeliveryInternal (A) = if ((gw.caller != this))
3223+ then throw("Access denied")
3224+ else {
3225+ let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
3226+ let ax = lastBlock.timestamp
3227+ let kd = parseIntValue(jc[bk])
3228+ let ke = parseIntValue(jc[bm])
3229+ let jh = valueOrErrorMessage(getString(bF(A)), "NFT duck is orphaned")
3230+ let mS = z(A)
3231+ let kX = getIntegerValue(mS)
3232+ let mT = if ((ke >= 3))
3233+ then {
3234+ let mU = invoke(cR, "sendDeliveryReward", [jh], nil)
3235+ if ((mU == mU))
3236+ then nil
3237+ else throw("Strict value is not equal to itself.")
3238+ }
3239+ else {
3240+ let mV = valueOrElse(getInteger(cR, bN), 0)
3241+ let mW = invoke(cR, "updateDeliveryLocked", [(mV - aM)], nil)
3242+ if ((mW == mW))
3243+ then if ((0 >= kX))
3244+ then nil
3245+ else [IntegerEntry(T(A), (kd + a))]
3246+ else throw("Strict value is not equal to itself.")
3247+ }
3248+ let mQ = getIntegerValue(J(A))
3249+ let mR = getStringValue(K(A))
3250+ $Tuple2(((mT :+ IntegerEntry(mS, mQ)) :+ StringEntry(bI(A), mR)), false)
3251+ }
3252+
3253+
3254+
3255+@Callable(gw)
3256+func prepareRobbery (iC,iD) = {
3257+ let kK = kH(gw)
3258+ if (!(sigVerify_8Kb(iC, iD, dK)))
3259+ then throw("signature does not match")
3260+ else if ((size(gw.payments) != 1))
3261+ then throw("exactly 1 payment must be attached")
3262+ else {
3263+ let kL = gw.payments[0]
3264+ let mX = kL.amount
3265+ if (if (!(isDefined(kL.assetId)))
3266+ then true
3267+ else (value(kL.assetId) != db))
3268+ then throw("WLGOLD payments only!")
3269+ else {
3270+ let fb = split(toUtf8String(iC), "|")
3271+ if ((size(fb) != 2))
3272+ then throw("Wrong message format")
3273+ else {
3274+ let A = fb[0]
3275+ let ay = au(this, A)._1
3276+ if ((ay > mX))
3277+ then throw(((("Payment " + toString(mX)) + " < required ") + toString(ay)))
3278+ else {
3279+ let mY = split(fb[1], "_")
3280+ let ax = lastBlock.timestamp
3281+ let az = valueOrElse(getInteger(R(A)), 0)
3282+ let aA = valueOrElse(getString(S(A)), "")
3283+ let aB = valueOrElse(getInteger(Q(aA)), 0)
3284+ if (if ((az != x))
3285+ then (aB > ax)
3286+ else false)
3287+ then throw(("You already started robbing, wait till " + toString(aB)))
3288+ else {
3289+ func mZ (eD,P) = {
3290+ let na = valueOrElse(getInteger(O(P)), 0)
3291+ let nb = valueOrElse(getInteger(Q(P)), 0)
3292+ if ((na > size(u)))
3293+ then throw("Invalid state")
3294+ else if ((ax > nb))
3295+ then {
3296+ let nc = valueOrElse(getInteger(bq(P)), 0)
3297+ if ((0 >= nc))
3298+ then eD
3299+ else {
3300+ let gd = value(assetInfo(fromBase58String(P)))
3301+ let ji = split(gd.description, "_")
3302+ let iU = dr(ji[cX])
3303+ let nd = iT(P, iU)
3304+ let gC = (ax - nc)
3305+ let jl = fraction(gC, (nd * iU), a)
3306+ if ((v > jl))
3307+ then eD
3308+ else (eD :+ P)
3309+ }
3310+ }
3311+ else eD
3312+ }
3313+
3314+ let ne = {
3315+ let eF = mY
3316+ let eG = size(eF)
3317+ let eH = nil
3318+ func eI (eJ,eK) = if ((eK >= eG))
3319+ then eJ
3320+ else mZ(eJ, eF[eK])
3321+
3322+ func eL (eJ,eK) = if ((eK >= eG))
3323+ then eJ
3324+ else throw("List size exceeds 10")
3325+
3326+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3327+ }
3328+ if ((size(ne) == 0))
3329+ then throw("No candidates for robbery")
3330+ else {
3331+ let nf = dC(size(ne), height, (iD + gw.transactionId))
3332+ let P = ne[nf]
3333+ $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), kK], P)
19553334 }
19563335 }
19573336 }
19583337 }
19593338 }
19603339 }
1961-
1962- let hq = bG(z)
1963- let hT = hp(hq)
1964- let gi = split(valueOrElse(getString(de()), "0_0_0_0_0_0"), "_")
1965- let kj = dh(b)
1966- let kk = getString(kj)
1967- let kl = if (isDefined(kk))
1968- then split_51C(value(kk), "_")
1969- else nil
1970- let km = split(value(assetInfo(fromBase58String(jY[0]))).description, "_")[cX]
1971- let kn = split(valueOrElse(getString(df(km)), "0_0_0_0_0_0"), "_")
1972- let eF = {
1973- let ew = jY
1974- let ex = size(ew)
1975- let ey = $Tuple10(jX, 0, "", hT[bg], nil, gi, kl, 0, split("0_0_0_0_0_0", "_"), kn)
1976- func ez (eA,eB) = if ((eB >= ex))
1977- then eA
1978- else ka(eA, ew[eB])
1979-
1980- func eC (eA,eB) = if ((eB >= ex))
1981- then eA
1982- else throw("List size exceeds 5")
1983-
1984- eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5)
1985- }
1986- let dg = eF._3
1987- let gR = valueOrErrorMessage(indexOf(aN, dg), ("Unknown continent: " + dg))
1988- let gq = gW(eF._9, (dp(jW) / cs))
1989- let ir = valueOrElse(getInteger(dS()), (dR + 1))
1990- let ko = toString(ir)
1991- let is = Issue(ej(ko, jW), makeString([ko, jW, gq, dg], "_"), 1, 0, false)
1992- let bn = calculateAssetId(is)
1993- let kp = toBase58String(bn)
1994- let jx = makeString(eG((jZ > 0), split(hT[bh], "_"), jZ), "_")
1995- let kq = di(b)
1996- let kr = valueOrElse(getInteger(kq), 0)
1997- $Tuple2((((((((((((((((eF._5 :+ (if ((size(eF._7) > 0))
1998- then StringEntry(kj, makeString_11C(eF._7, "_"))
1999- else DeleteEntry(kj))) :+ IntegerEntry(kq, if ((eF._8 > kr))
2000- then 0
2001- else (kr - eF._8))) :+ IntegerEntry(dS(), (ir + 1))) :+ is) :+ StringEntry(dV(ko), kp)) :+ StringEntry(bm(kp), b)) :+ StringEntry(dY(ko), b)) :+ IntegerEntry(bq(aC, kp), eF._2)) :+ IntegerEntry(bw(kp), aj)) :+ IntegerEntry(dX(kp, b), aj)) :+ StringEntry(hq, makeString([hT[bf], eF._4, jx, hT[bi]], ":"))) :+ StringEntry(de(), makeString(eF._6, "_"))) :+ StringEntry(df(dg), makeString(eF._10, "_"))) :+ StringEntry(bH(z), makeString([dg, "L", kp], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bn)), kp)
2002- }
2003- }
2004-
2005-
2006-func ks (b,jY) = jV("M", 3, "SSSS", b, jY, 0)
2007-
2008-
2009-func kt (b,jY) = jV("L", 4, "SMM", b, jY, (cn * 4))
2010-
2011-
2012-func ku (b,jY) = jV("XL", 5, "SSSML", b, jY, (cn * 47))
2013-
2014-
2015-func kv (b,jY) = jV("XXL", 6, "LXL", b, jY, (cn * 54))
2016-
2017-
2018-func kw (b,jY) = {
2019- let cl = size(jY)
2020- if ((4 == cl))
2021- then ks(b, jY)
2022- else if ((3 == cl))
2023- then kt(b, jY)
2024- else if ((5 == cl))
2025- then ku(b, jY)
2026- else if ((2 == cl))
2027- then kv(b, jY)
2028- else throw("Unknown merge")
2029- }
2030-
2031-
2032-func kx (gn) = if (if ((gn.originCaller != cO))
2033- then valueOrElse(getBoolean(ds()), false)
2034- else false)
2035- then throw("Contracts are under maintenance")
2036- else StringEntry(dt(toString(gn.originCaller)), toBase58String(gn.transactionId))
2037-
2038-
2039-@Callable(gn)
2040-func constructorV1 (ky) = if ((gn.caller != this))
2041- then throw("Permission denied")
2042- else [StringEntry(cI(), ky)]
2043-
2044-
2045-
2046-@Callable(gn)
2047-func setBlocked (kz) = if ((gn.caller != this))
2048- then throw("permission denied")
2049- else [BooleanEntry(ds(), kz)]
2050-
2051-
2052-
2053-@Callable(gn)
2054-func stakeLand () = {
2055- let kA = kx(gn)
2056- if ((size(gn.payments) != 1))
2057- then throw("Exactly one payment required")
2058- else {
2059- let kB = value(gn.payments[0])
2060- let bn = value(kB.assetId)
2061- let cz = toString(gn.caller)
2062- if ((kB.amount != 1))
2063- then throw((("NFT " + aA) + " token should be attached as payment"))
2064- else {
2065- let iX = value(assetInfo(bn))
2066- if ((iX.issuer != this))
2067- then throw("Unknown issuer of token")
2068- else if (!(contains(iX.name, aA)))
2069- then throw((("Only NFT " + aA) + " tokens are accepted"))
2070- else {
2071- let kC = drop(iX.name, 4)
2072- let dW = if (contains(kC, "XXL"))
2073- then dropRight(kC, 3)
2074- else if (contains(kC, "XL"))
2075- then dropRight(kC, 2)
2076- else dropRight(kC, 1)
2077- if (!(isDefined(parseInt(dW))))
2078- then throw(("Cannot parse land number from " + iX.name))
2079- else {
2080- let O = toBase58String(bn)
2081- let iY = bp(O)
2082- if (isDefined(getInteger(iY)))
2083- then throw((("NFT " + iX.name) + " is already staked"))
2084- else {
2085- let jb = split(iX.description, "_")
2086- let gj = gp(jb[cW])
2087- let iN = dp(jb[cV])
2088- let hE = (iN / cs)
2089- let eE = go(gj, hE, 1)
2090- let kD = df(jb[cX])
2091- let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_")
2092- let kE = makeString(gh(kn, gj, hE, 1), "_")
2093- let kj = dh(cz)
2094- let kk = getString(kj)
2095- let kg = if (isDefined(kk))
2096- then split_51C(value(kk), "_")
2097- else nil
2098- if (containsElement(kg, O))
2099- then throw(("Your staked lands already contain " + O))
2100- else if ((size(kg) >= aE))
2101- then throw((("Your already staked max (" + toString(aE)) + ") lands"))
2102- else {
2103- let hF = valueOrElse(getInteger(bw(O)), 0)
2104- let kq = di(cz)
2105- let kF = valueOrElse(getInteger(kq), 0)
2106- let kG = invoke(cR, "onStakeUnstakeLand", [cz], nil)
2107- $Tuple2([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aA, O, cz), lastBlock.timestamp), StringEntry(kj, makeString_11C((kg :+ O), "_")), IntegerEntry(kq, (kF + iN)), StringEntry(bm(O), cz), StringEntry(dY(dW), cz), IntegerEntry(dX(O, cz), hF), StringEntry(de(), eE), StringEntry(kD, kE), kA], kG)
2108- }
2109- }
2110- }
2111- }
2112- }
2113- }
2114- }
2115-
2116-
2117-
2118-@Callable(gn)
2119-func unstakeLand (iT) = {
2120- let kA = kx(gn)
2121- if ((size(gn.payments) != 0))
2122- then throw("No payments required")
2123- else {
2124- let b = toString(gn.caller)
2125- let fD = iR(b, ed, iT)
2126- let O = fD._2
2127- let jb = fD._3
2128- let kj = dh(b)
2129- let gj = gp(jb[cW])
2130- let iN = dp(jb[cV])
2131- let hE = (iN / cs)
2132- let eE = go(gj, hE, -1)
2133- let kD = df(jb[cX])
2134- let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_")
2135- let kE = makeString(gh(kn, gj, hE, -1), "_")
2136- let jy = jo(b, O, iN, ed)
2137- let kg = split_51C(valueOrElse(getString(kj), ""), "_")
2138- let cN = indexOf(kg, O)
2139- if (!(isDefined(cN)))
2140- then throw(("Your staked lands don't contain " + O))
2141- else {
2142- let av = lastBlock.timestamp
2143- let kH = valueOrElse(getInteger(cQ, bI(b)), 0)
2144- if ((kH >= av))
2145- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kH)))
2146- else {
2147- let kI = (valueOrElse(getInteger(cR, a(b)), 0) + co)
2148- if ((kI > av))
2149- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kI)))
2150- else {
2151- let kq = di(b)
2152- let kr = valueOrElse(getInteger(kq), 0)
2153- let kJ = if ((iN > kr))
2154- then 0
2155- else (kr - iN)
2156- let kG = invoke(cR, "onStakeUnstakeLand", [b], nil)
2157- $Tuple2([ScriptTransfer(gn.caller, 1, fromBase58String(O)), DeleteEntry(bp(O)), DeleteEntry(bs(aA, O, b)), StringEntry(de(), eE), StringEntry(kD, kE), StringEntry(jy._2, makeString(jy._3, ":")), if ((size(kg) > 1))
2158- then StringEntry(kj, makeString_11C(removeByIndex(kg, value(cN)), "_"))
2159- else DeleteEntry(kj), IntegerEntry(kq, kJ), kA], kG)
2160- }
2161- }
2162- }
2163- }
2164- }
2165-
2166-
2167-
2168-@Callable(gn)
2169-func stakeDuck () = {
2170- let kA = kx(gn)
2171- if ((size(gn.payments) != 1))
2172- then throw("Exactly one payment required")
2173- else {
2174- let kB = value(gn.payments[0])
2175- let bn = value(kB.assetId)
2176- let cz = toString(gn.caller)
2177- if ((kB.amount != 1))
2178- then throw((("NFT " + aB) + " token should be attached as payment"))
2179- else {
2180- let iX = value(assetInfo(bn))
2181- if (if ((iX.issuer != dA))
2182- then (iX.issuer != dB)
2183- else false)
2184- then throw((("Unknown issuer of " + aB) + " token"))
2185- else if (!(contains(iX.name, aB)))
2186- then throw((("Only NFT " + aB) + " tokens are accepted"))
2187- else {
2188- let kK = toBase58String(bn)
2189- let iY = bp(kK)
2190- if (isDefined(getInteger(iY)))
2191- then throw((("NFT " + iX.name) + " is already staked"))
2192- else if (isDefined(getString(bF(cz))))
2193- then throw(("You already staked one duck: " + iX.name))
2194- else if (jU(kK))
2195- then throw("stakeDuck_checkTournament")
2196- else {
2197- let kL = bH(kK)
2198- let ca = getString(kL)
2199- let hq = bG(kK)
2200- let kM = getString(hq)
2201- let iG = y(kK)
2202- let iH = ae(valueOrElse(getInteger(C(kK)), 0))
2203- let kN = valueOrElse(getInteger(iG), iH)
2204- ([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aB, toBase58String(bn), cz), lastBlock.timestamp), StringEntry(bE(kK), cz), StringEntry(bF(cz), kK)] ++ (if (isDefined(ca))
2205- then nil
2206- else ([StringEntry(kL, aI)] ++ (if (isDefined(kM))
2207- then nil
2208- else (([StringEntry(hq, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iG, kN)) :+ kA)))))
2209- }
2210- }
2211- }
2212- }
2213- }
2214-
2215-
2216-
2217-@Callable(gn)
2218-func unstakeDuck (kK) = {
2219- let kA = kx(gn)
2220- if ((size(gn.payments) != 0))
2221- then throw("No payments required")
2222- else {
2223- let bn = fromBase58String(kK)
2224- let cz = toString(gn.caller)
2225- let iX = value(assetInfo(bn))
2226- let iY = bp(kK)
2227- if (!(isDefined(getInteger(iY))))
2228- then throw((("NFT " + iX.name) + " is not staked"))
2229- else if (!(isDefined(getString(bF(cz)))))
2230- then throw((("The duck " + iX.name) + " is not staked"))
2231- else {
2232- let ja = valueOrErrorMessage(getString(bE(kK)), (("NFT " + iX.name) + " is orphaned"))
2233- if ((ja != cz))
2234- then throw("Staked NFT is not yours")
2235- else if (jU(kK))
2236- then throw("unstakeDuck_checkTournament")
2237- else {
2238- let iG = y(kK)
2239- let iH = ae(valueOrElse(getInteger(C(kK)), 0))
2240- let aq = valueOrElse(getInteger(iG), iH)
2241- if ((iH > aq))
2242- then throw((("Please heal your duck to " + toString(iH)) + "hp before unstaking"))
2243- else [ScriptTransfer(gn.caller, 1, bn), DeleteEntry(iY), DeleteEntry(iG), DeleteEntry(bH(kK)), DeleteEntry(bE(kK)), DeleteEntry(bs(aB, kK, cz)), DeleteEntry(bF(cz)), kA]
2244- }
2245- }
2246- }
2247- }
2248-
2249-
2250-
2251-@Callable(gn)
2252-func claimRes (el,kO) = {
2253- let kA = kx(gn)
2254- if ((size(gn.payments) != 0))
2255- then throw("No payments required")
2256- else {
2257- let b = toString(gn.originCaller)
2258- let eM = jc(b, el, ed, kO)
2259- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
2260- $Tuple2(((((eM._1 ++ jE(z, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._3[bg])
2261- }
2262- }
2263-
2264-
2265-
2266-@Callable(gn)
2267-func claimResToWH (el,kO) = {
2268- let kA = kx(gn)
2269- if ((size(gn.payments) != 0))
2270- then throw("No payments required")
2271- else {
2272- let b = toString(gn.originCaller)
2273- let eM = jc(b, el, ec, kO)
2274- $Tuple2(((((eM._1 ++ jK(b, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._5[aX])
2275- }
2276- }
2277-
2278-
2279-
2280-@Callable(gn)
2281-func flight (iv,iw) = {
2282- let kA = kx(gn)
2283- if ((size(gn.payments) != 0))
2284- then throw("No payments required")
2285- else {
2286- let bJ = toString(gn.caller)
2287- let gS = iu(bJ, iv, iw)
2288- let iA = gS._1
2289- let z = gS._2
2290- let kL = bH(z)
2291- let iV = valueOrElse(getString(kL), aI)
2292- let iC = gS._4
2293- if ((iC == iV))
2294- then throw("You can't fly to the same location")
2295- else {
2296- let kP = split(iC, "_")
2297- let kQ = (kP[bk] == "T")
2298- let ga = E(z)
2299- let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,")
2300- let kS = eN(kR, gS._5)
2301- let kT = kS._1
2302- let kU = kS._2
2303- let kV = if (!(bZ(cS, iV)))
2304- then if (kQ)
2305- then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC))
2306- else if ((iA > 0))
2307- then iC
2308- else iV
2309- else if (!(bZ(cS, iC)))
2310- then throw("Your duck is taking part in the tournament")
2311- else {
2312- let kW = parseIntValue(kP[bl])
2313- let kX = split(iV, "_")
2314- let cb = valueOrElse(getInteger(cS, bM), 0)
2315- if ((kW != (parseIntValue(kX[bl]) + 1)))
2316- then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC))
2317- else if ((iA > 0))
2318- then {
2319- let kY = valueOrElse(getInteger(cS, bQ(cb, z)), 0)
2320- let kZ = if ((kW > kY))
2321- then invoke(cS, "saveDuckResult", [z, kW], nil)
2322- else unit
2323- if ((kZ == kZ))
2324- then iC
2325- else throw("Strict value is not equal to itself.")
2326- }
2327- else iV
2328- }
2329- $Tuple2(([StringEntry(kL, kV), StringEntry(ga, kT), IntegerEntry(y(z), iA), kA] ++ (if (kU)
2330- then [StringEntry(K(z), "0_0_0_0_0")]
2331- else (nil ++ jE(z, if ((iA > 0))
2332- then T
2333- else U)._1))), gS._3)
2334- }
2335- }
2336- }
2337-
2338-
2339-
2340-@Callable(gn)
2341-func heal (la,lb,lc) = {
2342- let kA = kx(gn)
2343- if (if (if ((0 > la))
2344- then true
2345- else (0 > lb))
2346- then true
2347- else (0 > lc))
2348- then throw("Quantity cannot be negative")
2349- else {
2350- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
2351- if (jU(z))
2352- then throw("heal_checkTournament")
2353- else {
2354- let ld = [la, lb, lc]
2355- let iG = y(z)
2356- let iH = ae(valueOrElse(getInteger(C(z)), 0))
2357- let le = valueOrElse(getInteger(iG), iH)
2358- if ((le >= iH))
2359- then throw((("HP should be < " + toString(iH)) + " to heal"))
2360- else {
2361- let hq = bG(z)
2362- let hT = hp(hq)
2363- let lf = if ((hT[bi] == ""))
2364- then nil
2365- else split_4C(hT[bi], "_")
2366- func lg (eu,cf) = {
2367- let dn = eu._2
2368- let gJ = if ((size(lf) > dn))
2369- then parseIntValue(lf[dn])
2370- else 0
2371- if ((3 > dn))
2372- then {
2373- let lh = ld[dn]
2374- if ((lh > gJ))
2375- then throw(((("You have only " + toString(gJ)) + " of ") + aM[dn]))
2376- else $Tuple3((eu._1 :+ toString((gJ - lh))), (dn + 1), (eu._3 + (parseIntValue(split(cf, "_")[aS]) * lh)))
2377- }
2378- else $Tuple3((eu._1 :+ toString(gJ)), (dn + 1), eu._3)
2379- }
2380-
2381- let eM = {
2382- let ew = aQ
2383- let ex = size(ew)
2384- let ey = $Tuple3(nil, 0, 0)
2385- func ez (eA,eB) = if ((eB >= ex))
2386- then eA
2387- else lg(eA, ew[eB])
2388-
2389- func eC (eA,eB) = if ((eB >= ex))
2390- then eA
2391- else throw("List size exceeds 50")
2392-
2393- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
2394- }
2395- let li = min([iH, (le + eM._3)])
2396- $Tuple2(([IntegerEntry(iG, li), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], makeString(eM._1, "_")], ":")), kA] ++ jE(z, (ab * ((la + lb) + lc)))._1), li)
2397- }
2398- }
2399- }
2400- }
2401-
2402-
2403-
2404-@Callable(gn)
2405-func healES () = {
2406- let kA = kx(gn)
2407- if ((size(gn.payments) != 1))
2408- then throw("Exactly one payment required")
2409- else {
2410- let kB = value(gn.payments[0])
2411- if ((kB.assetId != ck))
2412- then throw("Allowed USDT payment only!")
2413- else {
2414- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
2415- if (jU(z))
2416- then throw("healES_checkTournament")
2417- else {
2418- let iG = y(z)
2419- let iH = ae(valueOrElse(getInteger(C(z)), 0))
2420- let le = valueOrElse(getInteger(iG), iH)
2421- if ((le > 0))
2422- then throw("HP should be 0 to call Emergency Service")
2423- else {
2424- let hq = bG(z)
2425- let hT = hp(hq)
2426- let lf = if ((hT[bi] == ""))
2427- then nil
2428- else split_4C(hT[bi], "_")
2429- let lj = if ((size(lf) > 0))
2430- then parseIntValue(lf[0])
2431- else 0
2432- let lk = if ((size(lf) > 1))
2433- then parseIntValue(lf[1])
2434- else 0
2435- let ll = if ((size(lf) > 2))
2436- then parseIntValue(lf[2])
2437- else 0
2438- if (if (if ((lj > 0))
2439- then true
2440- else (lk > 0))
2441- then true
2442- else (ll > 0))
2443- then throw("You have to use own Medical Kit")
2444- else {
2445- let lm = getString(cP, bK())
2446- let ln = if (isDefined(lm))
2447- then split_4C(value(lm), "_")
2448- else nil
2449- let lo = if ((size(ln) > 0))
2450- then parseIntValue(ln[0])
2451- else 0
2452- if ((0 >= lo))
2453- then throw("There are no Medical Kits L1 at Emergency Service storage")
2454- else {
2455- let li = (le + parseIntValue(split(aQ[0], "_")[aS]))
2456- let lp = makeString([toString((lo - 1)), removeByIndex(ln, 0)], "_")
2457- let cf = split(aQ[0], "_")
2458- let lq = ce(cf)
2459- let lr = fraction((lq * aK), aJ, (cr * aV))
2460- if ((kB.amount != lr))
2461- then throw(("Payment attached should be " + toString(lr)))
2462- else {
2463- let eM = dj(invoke(cP, "updateEsStorage", [lp], [AttachedPayment(ck, lr)]))
2464- $Tuple2(([IntegerEntry(iG, li), kA] ++ jE(z, V)._1), eM)
2465- }
2466- }
2467- }
2468- }
2469- }
2470- }
2471- }
2472- }
2473-
2474-
2475-
2476-@Callable(gn)
2477-func updateBackpack (z,ls) = if ((gn.caller != cP))
2478- then throw("permission denied")
2479- else $Tuple2([StringEntry(bG(z), ls)], ls)
2480-
2481-
2482-
2483-@Callable(gn)
2484-func commitForRandom () = {
2485- let kA = kx(gn)
2486- let lt = (height + dc)
2487- let b = toString(gn.caller)
2488- $Tuple2(([IntegerEntry(dd(b), lt)] :+ kA), lt)
2489- }
2490-
2491-
2492-
2493-@Callable(gn)
2494-func awardSLand (cz) = if ((gn.caller != cS))
2495- then throw("Access denied")
2496- else if ((size(gn.payments) != 0))
2497- then throw("No payments required")
2498- else {
2499- let eM = in(addressFromStringValue(cz), gn.transactionId)
2500- $Tuple2(eM._1, eM._2._1)
2501- }
2502-
2503-
2504-
2505-@Callable(gn)
2506-func buySLand () = {
2507- let kA = kx(gn)
2508- if ((size(gn.payments) != 1))
2509- then throw("Exactly one payment required")
2510- else {
2511- let kB = value(gn.payments[0])
2512- if ((kB.assetId != ck))
2513- then throw("Allowed USDT payment only!")
2514- else if ((kB.amount != dJ))
2515- then throw(("Payment attached should be " + toString(dJ)))
2516- else {
2517- let eM = in(gn.caller, gn.transactionId)
2518- let lu = dm(invoke(cT, "burnAcres", [dK], nil))
2519- $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu))
2520- }
2521- }
2522- }
2523-
2524-
2525-
2526-@Callable(gn)
2527-func expedition (iv,iw) = {
2528- let kA = kx(gn)
2529- if ((size(gn.payments) != 0))
2530- then throw("No payments required")
2531- else {
2532- let bJ = toString(gn.caller)
2533- let gS = iu(bJ, iv, iw)
2534- let z = gS._2
2535- let iG = y(z)
2536- let hq = bG(z)
2537- let hT = hp(hq)
2538- let jv = split(hT[bh], "_")
2539- let jx = makeString(eG(true, jv, dI), "_")
2540- let ga = E(z)
2541- let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,")
2542- let lv = eN(kR, gS._5)
2543- let kT = lv._1
2544- let kU = lv._2
2545- let lw = in(gn.caller, gn.transactionId)
2546- let it = lw._2._1
2547- let eM = if ((0 >= gS._1))
2548- then $Tuple3([IntegerEntry(iG, 0), StringEntry(ga, kT)], "", 0)
2549- else $Tuple3((lw._1 ++ (if (kU)
2550- then [StringEntry(K(z), "0_0_0_0_0")]
2551- else ((((nil :+ StringEntry(bH(z), makeString([lw._2._2, "L", it], "_"))) :+ IntegerEntry(iG, gS._1)) :+ StringEntry(ga, kT)) :+ StringEntry(hq, makeString([hT[bf], hT[bg], jx, hT[bi]], ":"))))), it, gS._3)
2552- if (jU(z))
2553- then throw("expedition_checkTournament")
2554- else {
2555- let lu = dm(invoke(cT, "burnAcres", [dK], nil))
2556- $Tuple2(((eM._1 ++ jE(z, X)._1) :+ kA), $Tuple3(eM._2, eM._3, lu))
2557- }
2558- }
2559- }
2560-
2561-
2562-
2563-@Callable(gn)
2564-func buySLandForAcres () = {
2565- let kA = kx(gn)
2566- if ((size(gn.payments) != 1))
2567- then throw("exactly 1 payment must be attached")
2568- else {
2569- let kB = gn.payments[0]
2570- let eT = kB.amount
2571- if (if (!(isDefined(kB.assetId)))
2572- then true
2573- else (value(kB.assetId) != db))
2574- then throw("ACRES payments only!")
2575- else if ((eT != dK))
2576- then throw(("Payment attached should be " + toString(dK)))
2577- else {
2578- let eM = in(gn.caller, gn.transactionId)
2579- let lu = dm(invoke(cT, "burnAcres", [dK], [AttachedPayment(db, eT)]))
2580- $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu))
2581- }
2582- }
2583- }
2584-
2585-
2586-
2587-@Callable(gn)
2588-func upgradeInfra (O) = {
2589- let kA = kx(gn)
2590- if ((size(gn.payments) != 0))
2591- then throw("No payments required")
2592- else {
2593- let eM = jp(true, gn.caller, 0, O)
2594- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
2595- $Tuple2(((eM._1 :+ kA) ++ jE(z, fraction(Y, eM._3, cr))._1), eM._2)
2596- }
2597- }
2598-
2599-
2600-
2601-@Callable(gn)
2602-func activateArtifact (lx,ly) = {
2603- let kA = kx(gn)
2604- if ((size(gn.payments) != 0))
2605- then throw("No payments required")
2606- else {
2607- let b = toString(gn.caller)
2608- let eM = {
2609- let cl = lx
2610- if (("PRESALE" == cl))
2611- then jS(b, ly)
2612- else if (("ONBOARD" == cl))
2613- then jL(b)
2614- else throw("Unknown artifact")
2615- }
2616- (eM :+ kA)
2617- }
2618- }
2619-
2620-
2621-
2622-@Callable(gn)
2623-func mergeLands (jY) = {
2624- let kA = kx(gn)
2625- if ((size(gn.payments) != 0))
2626- then throw("No payments required")
2627- else {
2628- let eM = kw(toString(gn.caller), jY)
2629- $Tuple2(((eM._1 :+ kA) ++ jK(toString(gn.caller), Z)._1), eM._2)
2630- }
2631- }
2632-
2633-
2634-
2635-@Callable(gn)
2636-func cargoExchange (lz,O) = {
2637- let kA = kx(gn)
2638- if ((size(gn.payments) != 0))
2639- then throw("No payments required")
2640- else {
2641- let hS = split_4C(lz, ":")
2642- let b = toString(gn.originCaller)
2643- let iX = value(assetInfo(fromBase58String(O)))
2644- let iY = bp(O)
2645- if (!(isDefined(getInteger(iY))))
2646- then throw((iX.name + " is not staked"))
2647- else {
2648- let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned"))
2649- if ((ja != b))
2650- then throw((aA + " is not yours"))
2651- else {
2652- let hE = (dp(split(iX.description, "_")[cV]) / cs)
2653- let hF = valueOrElse(getInteger(bw(O)), 0)
2654- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
2655- let iV = valueOrElse(getString(bH(z)), aI)
2656- let cc = split(value(iV), "_")
2657- if ((cc[bk] != "L"))
2658- then throw((("Duck location type is " + cc[bk]) + ", but should be L"))
2659- else if ((cc[bl] != O))
2660- then throw(("Duck should be on the land " + O))
2661- else {
2662- let hD = bv(O)
2663- let hu = hC(hD, hE, hF)
2664- let hq = bG(z)
2665- let hT = hp(hq)
2666- let eM = hR(hS, hu, hT)
2667- let hL = split(hu[ba], "_")
2668- let jm = (parseIntValue(hL[bc]) + eM._7)
2669- let jn = (parseIntValue(hL[bd]) - eM._7)
2670-[StringEntry(hq, makeString_2C([hT[bf], eM._4, eM._5, eM._6], ":")), StringEntry(hD, makeString_2C([hu[aW], eM._1, eM._2, eM._3, makeString([hL[bb], toString(jm), toString(jn), hL[be]], "_")], ":")), kA]
2671- }
2672- }
2673- }
2674- }
2675- }
2676-
2677-
2678-
2679-@Callable(gn)
2680-func saveWarehouse (hH,O) = if ((gn.caller != cP))
2681- then throw("Access denied")
2682- else {
2683- let hD = bv(O)
2684- let hI = split_4C(hH, ":")
2685- if ((size(hI) != 5))
2686- then throw("warehouse string should contain 4 ':' separators")
2687- else {
2688- let lA = split(hI[ba], "_")[bb]
2689- let jm = ht(hI)
2690- let lB = hr(hI[aW])
2691- let jn = ((lB - parseIntValue(lA)) - jm)
2692- let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([lA, toString(jm), toString(jn), toString(lB)], "_")], ":")
2693- $Tuple2([StringEntry(hD, lC)], lC)
2694- }
2695- }
2696-
2697-
2698-
2699-@Callable(gn)
2700-func fixWarehouseFormat (O) = if ((gn.caller != cO))
2701- then throw("Access denied")
2702- else {
2703- let hD = bv(O)
2704- let iX = value(assetInfo(fromBase58String(O)))
2705- let hE = (dp(split(iX.description, "_")[cV]) / cs)
2706- let hF = valueOrElse(getInteger(bw(O)), 0)
2707- let hI = hC(hD, hE, hF)
2708- let lA = dm(invoke(cP, "recalcLockedVolumeREADONLY", [O, hI], nil))
2709- let jm = ht(hI)
2710- let lB = hr(hI[aW])
2711- let jn = ((lB - lA) - jm)
2712- let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([toString(lA), toString(jm), toString(jn), toString(lB)], "_")], ":")
2713- $Tuple2([StringEntry(hD, lC)], lC)
2714- }
2715-
2716-
2717-
2718-@Callable(gn)
2719-func fixContinentProportions (jY) = if ((gn.caller != cO))
2720- then throw("Access denied")
2721- else {
2722- func lD (eu,lE) = (eu :+ valueOrElse(getString(df(lE)), "0_0_0_0_0_0"))
2723-
2724- let fX = {
2725- let ew = aN
2726- let ex = size(ew)
2727- let ey = nil
2728- func ez (eA,eB) = if ((eB >= ex))
2729- then eA
2730- else lD(eA, ew[eB])
2731-
2732- func eC (eA,eB) = if ((eB >= ex))
2733- then eA
2734- else throw("List size exceeds 5")
2735-
2736- eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5)
2737- }
2738- func lF (eu,O) = {
2739- let iX = value(assetInfo(fromBase58String(O)))
2740- let jb = split(iX.description, "_")
2741- let hE = (dp(jb[cV]) / cs)
2742- let lE = jb[cX]
2743- let gj = gp(jb[cW])
2744- let gR = value(indexOf(aN, lE))
2745- let kn = split(eu[gR], "_")
2746- let lG = makeString(gh(kn, gj, hE, 1), "_")
2747- let cl = lE
2748- if (("Americas" == cl))
2749- then [lG, eu[1], eu[2], eu[3], eu[4]]
2750- else if (("Europe" == cl))
2751- then [eu[0], lG, eu[2], eu[3], eu[4]]
2752- else if (("Asia" == cl))
2753- then [eu[0], eu[1], lG, eu[3], eu[4]]
2754- else if (("Africa" == cl))
2755- then [eu[0], eu[1], eu[2], lG, eu[4]]
2756- else if (("Oceania" == cl))
2757- then [eu[0], eu[1], eu[2], eu[3], lG]
2758- else throw("wrong continent")
2759- }
2760-
2761- let eF = {
2762- let ew = jY
2763- let ex = size(ew)
2764- let ey = fX
2765- func hk (eA,eB) = if ((eB >= ex))
2766- then eA
2767- else lF(eA, ew[eB])
2768-
2769- func hl (eA,eB) = if ((eB >= ex))
2770- then eA
2771- else throw("List size exceeds 100")
2772-
2773- hl(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2774- }
2775- $Tuple2([StringEntry(df("Americas"), eF[0]), StringEntry(df("Europe"), eF[1]), StringEntry(df("Asia"), eF[2]), StringEntry(df("Africa"), eF[3]), StringEntry(df("Oceania"), eF[4])], 0)
2776- }
2777-
2778-
2779-
2780-@Callable(gn)
2781-func fixStakedPieces (cz) = if ((gn.caller != cO))
2782- then throw("Access denied")
2783- else {
2784- let kr = if ((cz == ""))
2785- then 0
2786- else {
2787- let kk = getString(al, dh(cz))
2788- let kg = if (isDefined(kk))
2789- then split_51C(value(kk), "_")
2790- else nil
2791- func lH (eu,O) = {
2792- let iX = value(assetInfo(fromBase58String(O)))
2793- let dq = split(iX.description, "_")[cV]
2794- (eu + dp(dq))
2795- }
2796-
2797- let ew = kg
2798- let ex = size(ew)
2799- let ey = 0
2800- func ez (eA,eB) = if ((eB >= ex))
2801- then eA
2802- else lH(eA, ew[eB])
2803-
2804- func eC (eA,eB) = if ((eB >= ex))
2805- then eA
2806- else throw("List size exceeds 100")
2807-
2808- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2809- }
2810- $Tuple2([IntegerEntry(di(cz), kr)], kr)
2811- }
2812-
2813-
2814-
2815-@Callable(gn)
2816-func setCustomName (bn,ki,br) = {
2817- let kA = kx(gn)
2818- if ((size(gn.payments) != 1))
2819- then throw("Exactly one payment required")
2820- else {
2821- let kB = value(gn.payments[0])
2822- if ((kB.assetId != ck))
2823- then throw("Allowed USDT payment only!")
2824- else if ((kB.amount != dF))
2825- then throw(("Payment should be " + toString(dF)))
2826- else if (contains(ki, "__"))
2827- then throw(("Name should not contain '__': " + ki))
2828- else if ((size(ki) > dG))
2829- then throw(("Name too long, maxLength=" + toString(dG)))
2830- else {
2831- let b = toString(gn.originCaller)
2832- let lI = {
2833- let cl = br
2834- if (("ACCOUNT" == cl))
2835- then {
2836- let lJ = ea(ki)
2837- let lK = getString(lJ)
2838- if (isDefined(lK))
2839- then throw(("Name already registered: " + ki))
2840- else {
2841- let lL = bz(b)
2842- let lM = getString(lL)
2843- let lN = if (isDefined(lM))
2844- then [DeleteEntry(ea(value(lM)))]
2845- else nil
2846- (((lN :+ StringEntry(lL, ki)) :+ StringEntry(lJ, b)) ++ jK(b, W)._1)
2847- }
2848- }
2849- else if (("LAND" == cl))
2850- then {
2851- let iX = value(assetInfo(fromBase58String(bn)))
2852- let iY = bp(bn)
2853- if (!(isDefined(getInteger(iY))))
2854- then throw((iX.name + " is not staked"))
2855- else {
2856- let ja = valueOrErrorMessage(getString(bm(bn)), (("NFT " + iX.name) + " is orphaned"))
2857- if ((ja != b))
2858- then throw((aA + " is not yours"))
2859- else {
2860- let lJ = dT(ki)
2861- let lK = getString(lJ)
2862- if (isDefined(lK))
2863- then throw(("Name already registered: " + ki))
2864- else {
2865- let lO = bo(bn)
2866- let lM = getString(lO)
2867- let lN = if (isDefined(lM))
2868- then [DeleteEntry(dT(value(lM)))]
2869- else nil
2870- (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jK(b, W)._1)
2871- }
2872- }
2873- }
2874- }
2875- else if (("DUCK" == cl))
2876- then {
2877- let iX = value(assetInfo(fromBase58String(bn)))
2878- let iY = bp(bn)
2879- if (if (!(isDefined(getInteger(iY))))
2880- then true
2881- else !(isDefined(getString(bF(b)))))
2882- then throw((iX.name + " is not staked"))
2883- else {
2884- let ja = valueOrErrorMessage(getString(bE(bn)), (("NFT " + iX.name) + " is orphaned"))
2885- if ((ja != b))
2886- then throw((aB + " is not yours"))
2887- else {
2888- let lJ = dZ(ki)
2889- let lK = getString(lJ)
2890- if (isDefined(lK))
2891- then throw(("Name already registered: " + ki))
2892- else {
2893- let lO = by(bn)
2894- let lM = getString(lO)
2895- let lN = if (isDefined(lM))
2896- then [DeleteEntry(dZ(value(lM)))]
2897- else nil
2898- (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jE(bn, W)._1)
2899- }
2900- }
2901- }
2902- }
2903- else throw("Unknown entity type")
2904- }
2905- $Tuple2(((lI :+ ScriptTransfer(cP, kB.amount, ck)) :+ kA), 0)
2906- }
2907- }
2908- }
2909-
2910-
2911-
2912-@Callable(gn)
2913-func setReferrals (lP,lQ) = if ((gn.callerPublicKey != dC))
2914- then throw("Permission denied")
2915- else {
2916- let kA = kx(gn)
2917- if ((size(gn.payments) != 0))
2918- then throw("No payments required")
2919- else if (!(isDefined(addressFromString(lP))))
2920- then throw(("Invalid address: " + lP))
2921- else if (!(isDefined(addressFromString(lQ))))
2922- then throw(("Invalid address: " + lQ))
2923- else {
2924- let lR = eb()
2925- let lS = getString(lR)
2926- let lT = if (isDefined(lS))
2927- then split_4C(value(lS), "_")
2928- else nil
2929- if (containsElement(lT, lQ))
2930- then throw((lQ + " is not newbie (already has referrals)"))
2931- else {
2932- let jM = bA(lQ)
2933- let jN = getString(jM)
2934- if (if (isDefined(jN))
2935- then isDefined(addressFromString(value(jN)))
2936- else false)
2937- then throw(((lQ + " already has refBy: ") + value(jN)))
2938- else {
2939- let lU = bD(lP)
2940- let lV = getString(lU)
2941- let lW = if (isDefined(lV))
2942- then split_4C(value(lV), "_")
2943- else nil
2944- if (containsElement(lW, lQ))
2945- then throw((((lP + " already contains ") + lQ) + " within referrals"))
2946- else {
2947- let lX = makeString_2C((lW :+ lQ), "_")
2948- let lY = if (containsElement(lT, lP))
2949- then value(lS)
2950- else makeString_2C((lT :+ lP), "_")
2951- $Tuple2([StringEntry(jM, lP), StringEntry(lU, lX), StringEntry(lR, lY), kA], 0)
2952- }
2953- }
2954- }
2955- }
2956- }
2957-
2958-
2959-
2960-@Callable(gn)
2961-func distributePoints (lZ,ma,mb,mc,md) = {
2962- let kA = kx(gn)
2963- if ((size(gn.payments) != 0))
2964- then throw("No payments required")
2965- else {
2966- let b = toString(gn.originCaller)
2967- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
2968- let me = H(b)
2969- let mf = valueOrElse(getInteger(al, me), 0)
2970- let mg = D(z)
2971- let mh = valueOrElse(getInteger(al, mg), 0)
2972- let mi = (mf + mh)
2973- let mj = ((((lZ + ma) + mb) + mc) + md)
2974- if ((mj > mi))
2975- then throw((("There are only " + toString(mi)) + " free points to distribute"))
2976- else {
2977- let mk = A(z)
2978- let ao = split(valueOrElse(getString(al, mk), "0_0_0_0_0"), "_")
2979- let ml = (mf - mj)
2980- $Tuple2([IntegerEntry(me, if ((0 > ml))
2981- then 0
2982- else ml), IntegerEntry(mg, if ((0 > ml))
2983- then (mh + ml)
2984- else mh), StringEntry(mk, makeString([toString((parseIntValue(ao[j]) + lZ)), toString((parseIntValue(ao[k]) + ma)), toString((parseIntValue(ao[l]) + mb)), toString((parseIntValue(ao[m]) + mc)), toString((parseIntValue(ao[n]) + md))], "_")), kA], 0)
2985- }
2986- }
2987- }
2988-
2989-
2990-
2991-@Callable(gn)
2992-func splitByGlobalWeightsREADONLY (el) = $Tuple2(nil, eD(el))
2993-
2994-
2995-
2996-@Callable(gn)
2997-func splitByGlobalAndLocalWeightsREADONLY (mm,mn,gq) = {
2998- let gj = gp(gq)
2999- $Tuple2(nil, $Tuple2(eD(mm), eo(mn, gj)))
3000- }
3001-
3002-
3003-
3004-@Callable(gn)
3005-func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hp(bG(z)), ":"))
3006-
3007-
3008-
3009-@Callable(gn)
3010-func getWarehouseREADONLY (O) = {
3011- let iX = value(assetInfo(fromBase58String(O)))
3012- let hE = (dp(split(iX.description, "_")[cV]) / cs)
3013- let hF = valueOrElse(getInteger(bw(O)), 0)
3014- $Tuple2(nil, makeString_2C(hC(bv(O), hE, hF), ":"))
3015- }
3016-
3017-
3018-
3019-@Callable(gn)
3020-func saveLastTx () = {
3021- let io = gn.caller
3022- if (!(containsElement([cR, cP, cS, cT], io)))
3023- then throw("Access denied")
3024- else $Tuple2([kx(gn)], 42)
3025- }
3026-
3027-
3028-
3029-@Callable(gn)
3030-func updateDuckStats (z,jF) = if ((gn.caller != cP))
3031- then throw("Access denied")
3032- else jE(z, jF)
3033-
3034-
3035-
3036-@Callable(gn)
3037-func updateAccStats (b,jF) = if ((gn.caller != cP))
3038- then throw("Access denied")
3039- else jK(b, jF)
3040-
3041-
3042-
3043-@Callable(gn)
3044-func equipDuck (mo) = {
3045- let kA = kx(gn)
3046- if ((size(gn.payments) != 0))
3047- then throw("No payments required")
3048- else {
3049- let b = toString(gn.originCaller)
3050- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
3051- if (jU(z))
3052- then throw("equipDuck_checkTournament")
3053- else {
3054- let ga = E(z)
3055- let mp = split(valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3056- let hq = bG(z)
3057- let hT = hp(hq)
3058- let kT = split(mo, "_")
3059- if ((size(kT) != p))
3060- then throw("Wrong equipment string")
3061- else {
3062- let gc = fP(mp, fa(hT[bi]), true, nil)
3063- let gd = split(kT[o], ";")[1]
3064- let am = if ((gd == ""))
3065- then 0
3066- else {
3067- let ge = split(gd, ",")[0]
3068- if ((ge == ""))
3069- then 0
3070- else {
3071- let fp = split(ge, ":")
3072- let cN = fp[0]
3073- let gf = fp[1]
3074- if (if (if (if (if ((cN == "06"))
3075- then true
3076- else (cN == "07"))
3077- then true
3078- else (cN == "08"))
3079- then (gf != "")
3080- else false)
3081- then (parseIntValue(gf) > 0)
3082- else false)
3083- then parseIntValue(split(aQ[parseIntValue(cN)], "_")[aS])
3084- else 0
3085- }
3086- }
3087- let fK = ak(this, z, am, true)
3088- let gg = fP(kT, gc, false, fK)
3089- let mq = ff(gg)
3090- $Tuple2([StringEntry(ga, mo), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], mq], ":")), StringEntry(K(z), makeString([toString(fK[7]), toString(fK[8]), toString(fK[9]), toString(fK[10]), toString(fK[11])], "_")), kA], 0)
3091- }
3092- }
3093- }
3094- }
3095-
3096-
3097-
3098-@Callable(gn)
3099-func fortificateLand (O,mr) = {
3100- let kA = kx(gn)
3101- if ((size(gn.payments) != 0))
3102- then throw("No payments required")
3103- else {
3104- let b = toString(gn.originCaller)
3105- let z = valueOrElse(getString(bF(b)), "")
3106- let fk = ak(this, z, 0, false)
3107- let ms = bx(O)
3108- let mt = split(valueOrElse(getString(ms), ":0_15:0_18:0"), "_")
3109- let iX = value(assetInfo(fromBase58String(O)))
3110- let hE = (dp(split(iX.description, "_")[cV]) / cs)
3111- let hF = valueOrElse(getInteger(bw(O)), 0)
3112- let hD = bv(O)
3113- let hI = hC(hD, hE, hF)
3114- let mu = split(hI[ba], "_")
3115- let mv = parseIntValue(mu[bc])
3116- let mw = parseIntValue(mu[bd])
3117- let mx = split(mr, "_")
3118- let my = fW(mt, fa(hI[aZ]), mv, mw, true, nil)
3119- let gc = my._1
3120- let mz = my._2
3121- let mA = my._3
3122- let mB = fW(mx, gc, mz, mA, false, fk)
3123- let gg = mB._1
3124- let mC = mB._2
3125- let mD = mB._3
3126- let mq = ff(gg)
3127- let jD = makeString([mu[bb], toString(mC), toString(mD), mu[be]], "_")
3128- $Tuple2([StringEntry(ms, mr), StringEntry(hD, makeString_2C([hI[aW], hI[aX], hI[aY], mq, jD], ":")), kA], 0)
3129- }
3130- }
3131-
3132-
3133-
3134-@Callable(gn)
3135-func initDuckTourAttempt (z) = if ((gn.caller != cS))
3136- then throw("Access denied")
3137- else {
3138- let kA = kx(gn)
3139- let iG = y(z)
3140- let iH = ae(valueOrElse(getInteger(C(z)), 0))
3141- let kN = valueOrElse(getInteger(iG), iH)
3142- let mE = bH(z)
3143- let iV = valueOrElse(getString(mE), aI)
3144- let cb = valueOrElse(getInteger(cS, bM), 0)
3145- let mF = (toString(cb) + "_T_0")
3146- $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mF)], mF)
3147- }
3148-
3149-
3150-
3151-@Callable(gn)
3152-func breakAttempt () = {
3153- let kA = kx(gn)
3154- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
3155- let mE = bH(z)
3156- let iV = valueOrElse(getString(mE), aI)
3157- if ((split(iV, "_")[bk] != "T"))
3158- then throw("Your duck is not in the tournament")
3159- else {
3160- let mG = getIntegerValue(I(z))
3161- let mH = getStringValue(J(z))
3162- $Tuple2([kA, IntegerEntry(y(z), mG), StringEntry(mE, mH)], iV)
3163- }
3164- }
3165-
3166-
3167-
3168-@Callable(gn)
3169-func exitTournamentInternal (z) = if ((gn.caller != this))
3170- then throw("Access denied")
3171- else {
3172- let mG = getIntegerValue(I(z))
3173- let mH = getStringValue(J(z))
3174- $Tuple2([IntegerEntry(y(z), mG), StringEntry(bH(z), mH)], false)
3175- }
3176-
3177-
3178-
3179-@Callable(gn)
3180-func prepareRobbery (iv,iw) = {
3181- let kA = kx(gn)
3182- if (!(sigVerify_8Kb(iv, iw, dC)))
3183- then throw("signature does not match")
3184- else if ((size(gn.payments) != 1))
3185- then throw("exactly 1 payment must be attached")
3186- else {
3187- let kB = gn.payments[0]
3188- let mI = kB.amount
3189- if (if (!(isDefined(kB.assetId)))
3190- then true
3191- else (value(kB.assetId) != cZ))
3192- then throw("WLGOLD payments only!")
3193- else {
3194- let eS = split(toUtf8String(iv), "|")
3195- if ((size(eS) != 2))
3196- then throw("Wrong message format")
3197- else {
3198- let z = eS[0]
3199- let aw = as(this, z)._1
3200- if ((aw > mI))
3201- then throw(((("Payment " + toString(mI)) + " < required ") + toString(aw)))
3202- else {
3203- let mJ = split(eS[1], "_")
3204- let av = lastBlock.timestamp
3205- let ax = valueOrElse(getInteger(Q(z)), 0)
3206- let ay = valueOrElse(getString(R(z)), "")
3207- let az = valueOrElse(getInteger(P(ay)), 0)
3208- if (if ((ax != w))
3209- then (az > av)
3210- else false)
3211- then throw(("You already started robbing, wait till " + toString(az)))
3212- else {
3213- func mK (eu,O) = {
3214- let mL = valueOrElse(getInteger(N(O)), 0)
3215- let mM = valueOrElse(getInteger(P(O)), 0)
3216- if ((mL > size(t)))
3217- then throw("Invalid state")
3218- else if ((av > mM))
3219- then {
3220- let mN = valueOrElse(getInteger(bp(O)), 0)
3221- if ((0 >= mN))
3222- then eu
3223- else {
3224- let fU = value(assetInfo(fromBase58String(O)))
3225- let jb = split(fU.description, "_")
3226- let iN = dp(jb[cV])
3227- let mO = iM(O, iN)
3228- let gt = (av - mN)
3229- let je = fraction(gt, (mO * iN), aG)
3230- if ((u > je))
3231- then eu
3232- else (eu :+ O)
3233- }
3234- }
3235- else eu
3236- }
3237-
3238- let mP = {
3239- let ew = mJ
3240- let ex = size(ew)
3241- let ey = nil
3242- func ez (eA,eB) = if ((eB >= ex))
3243- then eA
3244- else mK(eA, ew[eB])
3245-
3246- func eC (eA,eB) = if ((eB >= ex))
3247- then eA
3248- else throw("List size exceeds 10")
3249-
3250- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3251- }
3252- if ((size(mP) == 0))
3253- then throw("No candidates for robbery")
3254- else {
3255- let mQ = du(size(mP), height, (iw + gn.transactionId))
3256- let O = mP[mQ]
3257- $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kA], O)
3258- }
3259- }
3260- }
3261- }
3262- }
3263- }
3264- }
3265-
3266-
3267-
3268-@Callable(gn)
3269-func robLand (iv,iw) = {
3270- let kA = kx(gn)
3271- if (!(sigVerify_8Kb(iv, iw, dC)))
3340+ }
3341+
3342+
3343+
3344+@Callable(gw)
3345+func robLand (iC,iD) = {
3346+ let kK = kH(gw)
3347+ if (!(sigVerify_8Kb(iC, iD, dK)))
32723348 then throw("signature does not match")
32733349 else {
3274- let bJ = toString(gn.caller)
3275- let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked")
3276- let av = lastBlock.timestamp
3277- $Tuple2([kA, IntegerEntry(L(z), av)], 0)
3278- }
3279- }
3280-
3281-
3282-
3283-@Callable(gn)
3284-func acceptDelivery () = if (!(ci))
3350+ let bK = toString(gw.caller)
3351+ let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3352+ let ax = lastBlock.timestamp
3353+ $Tuple2([kK, IntegerEntry(M(A), ax)], 0)
3354+ }
3355+ }
3356+
3357+
3358+
3359+@Callable(gw)
3360+func acceptDelivery () = if (!(ck))
32853361 then throw("Delivery feature is turned off!")
32863362 else {
3287- let kA = kx(gn)
3288- let bJ = toString(gn.caller)
3289- let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked")
3290- let mR = valueOrElse(getInteger(cP, bL), 0)
3291- if ((aL > mR))
3292- then throw(("Delivery is not available, fund=" + toString(mR)))
3363+ let kK = kH(gw)
3364+ let bK = toString(gw.caller)
3365+ let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3366+ let ng = valueOrElse(getInteger(cR, bM), 0)
3367+ let mV = valueOrElse(getInteger(cR, bN), 0)
3368+ if ((aM > (ng - mV)))
3369+ then throw(((("Delivery is not available, fund=" + dw(ng, 6)) + ", locked=") + dw(mV, 6)))
32933370 else {
3294- let iG = y(z)
3295- let iH = ae(valueOrElse(getInteger(C(z)), 0))
3296- let kN = valueOrElse(getInteger(iG), iH)
3297- let mE = bH(z)
3298- let iV = valueOrElse(getString(mE), aI)
3299- let av = lastBlock.timestamp
3300- let mS = (toString(av) + "_D_0")
3301- $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mS)], mS)
3371+ let ax = lastBlock.timestamp
3372+ let nh = valueOrElse(getInteger(T(A)), 0)
3373+ if ((nh > ax))
3374+ then throw(("Delivery is forbidden for your duck until " + toString(nh)))
3375+ else if (kb(A))
3376+ then throw("acceptDelivery_checkTournament")
3377+ else if (kc(A))
3378+ then throw("acceptDelivery_checkDelivery")
3379+ else {
3380+ let ni = do(invoke(cR, "updateDeliveryLocked", [(mV + aM)], nil))
3381+ let iN = z(A)
3382+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
3383+ let kX = valueOrElse(getInteger(iN), iO)
3384+ let mO = bI(A)
3385+ let jc = valueOrElse(getString(mO), aJ)
3386+ let nj = (toString(ax) + "_D_0")
3387+ $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, nj)], $Tuple2(nj, ni))
3388+ }
33023389 }
33033390 }
33043391
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-func a (b) = ("lastArbTimeUser_" + b)
5-
6-
7-let c = 100000000
8-
9-let d = 3200
10-
11-let e = 4000
12-
13-let f = 3
14-
15-let g = 100000000
16-
17-let h = 400
18-
19-let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
20-
21-let j = 0
22-
23-let k = 1
24-
25-let l = 2
26-
27-let m = 3
28-
29-let n = 4
30-
31-let o = 0
32-
33-let p = 6
34-
35-let q = 2
4+let a = 86400000
5+
6+func b (c) = ("lastArbTimeUser_" + c)
7+
8+
9+let d = 100000000
10+
11+let e = 3200
12+
13+let f = 4000
14+
15+let g = 3
16+
17+let h = 100000000
18+
19+let i = 400
20+
21+let j = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
22+
23+let k = 0
24+
25+let l = 1
26+
27+let m = 2
28+
29+let n = 3
30+
31+let o = 4
32+
33+let p = 0
34+
35+let q = 6
3636
3737 let r = 2
3838
39-let s = 30
40-
41-let t = [0, 600000, 900000, 43200000, 21600000]
42-
43-let u = 20000000
44-
45-let v = 1
46-
47-let w = 0
48-
49-let x = 1
50-
51-func y (z) = ("duckHealth_" + z)
52-
53-
54-func A (z) = ("duckChars_" + z)
55-
56-
57-func B (z) = ("duckXP_" + z)
58-
59-
60-func C (z) = ("duckLevel_" + z)
61-
62-
63-func D (z) = ("duckFreePoints_" + z)
64-
65-
66-func E (z) = ("duckEquipment_" + z)
67-
68-
69-func F (b) = ("userXP_" + b)
70-
71-
72-func G (b) = ("userLevel_" + b)
73-
74-
75-func H (b) = ("userFreePoints_" + b)
76-
77-
78-func I (z) = ("savedHealth_" + z)
79-
80-
81-func J (z) = ("savedLocation_" + z)
82-
83-
84-func K (z) = ("duckBuffs_" + z)
85-
86-
87-func L (z) = ("lastRobberyTime_" + z)
88-
89-
90-func M (z) = ("lastRobberyCost_" + z)
91-
92-
93-func N (O) = ("landRobberyState_" + O)
94-
95-
96-func P (O) = ("landCooldownETA_" + O)
97-
98-
99-func Q (z) = ("duckRobberyState_" + z)
100-
101-
102-func R (z) = ("lockedLandByDuck_" + z)
103-
104-
105-let S = 10000
106-
107-let T = 10000
108-
109-let U = 2000
110-
111-let V = 100000
112-
113-let W = 1000000
114-
115-let X = 5000000
116-
117-let Y = 10000
118-
119-let Z = 1000000
120-
121-let aa = 1000000
122-
123-let ab = 10000
124-
125-func ac (ad) = fraction(d, pow(ad, 4, e, 4, 4, DOWN), c)
126-
127-
128-func ae (af) = (100 + af)
129-
130-
131-func ag (ah,ai) = {
132- let aj = ac(ai)
133-[aj, (f * (aj - ah))]
134- }
135-
136-
137-func ak (al,z,am,an) = {
138- let ao = split(valueOrElse(getString(al, A(z)), "0_0_0_0_0"), "_")
139- let ap = valueOrElse(getInteger(al, C(z)), 0)
140- let aq = valueOrElse(getInteger(al, y(z)), ae(ap))
141- let ar = split(valueOrElse(getString(al, K(z)), "0_0_0_0_0"), "_")
142- ([parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n]), ap, aq] ++ (if (an)
143- then [am, am, am, am, am]
144- else [parseIntValue(ar[j]), parseIntValue(ar[k]), parseIntValue(ar[l]), parseIntValue(ar[m]), parseIntValue(ar[n])]))
145- }
146-
147-
148-func as (al,z) = {
149- let at = valueOrElse(getInteger(al, M(z)), 0)
150- let au = valueOrElse(getInteger(al, L(z)), 0)
151- let av = lastBlock.timestamp
152- let aw = max([g, (at - (h * (av - au)))])
153- let ax = valueOrElse(getInteger(al, Q(z)), 0)
154- let ay = valueOrElse(getString(al, R(z)), "")
155- let az = valueOrElse(getInteger(al, P(ay)), 0)
156- $Tuple5(aw, au, ax, ay, az)
157- }
158-
159-
160-let aA = "LAND"
161-
162-let aB = "DUCK"
163-
164-let aC = "PRESALE"
165-
166-let aD = 6
167-
168-let aE = 25
169-
170-let aF = 3456000
171-
172-let aG = 86400000
173-
174-let aH = 10000000000
175-
176-let aI = "Africa_F_Africa"
177-
178-let aJ = 39637
179-
180-let aK = 10
181-
182-let aL = 50000
183-
184-let aM = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
185-
186-let aN = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
187-
188-let aO = 10000000
189-
190-let aP = [15, 16, 17, 18, 19, 20]
191-
192-let aQ = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
193-
194-let aR = 6
195-
196-let aS = 8
197-
198-let aT = 9
199-
200-let aU = 10
39+let s = 2
40+
41+let t = 30
42+
43+let u = [0, 600000, 900000, 43200000, 21600000]
44+
45+let v = 20000000
46+
47+let w = 1
48+
49+let x = 0
50+
51+let y = 1
52+
53+func z (A) = ("duckHealth_" + A)
54+
55+
56+func B (A) = ("duckChars_" + A)
57+
58+
59+func C (A) = ("duckXP_" + A)
60+
61+
62+func D (A) = ("duckLevel_" + A)
63+
64+
65+func E (A) = ("duckFreePoints_" + A)
66+
67+
68+func F (A) = ("duckEquipment_" + A)
69+
70+
71+func G (c) = ("userXP_" + c)
72+
73+
74+func H (c) = ("userLevel_" + c)
75+
76+
77+func I (c) = ("userFreePoints_" + c)
78+
79+
80+func J (A) = ("savedHealth_" + A)
81+
82+
83+func K (A) = ("savedLocation_" + A)
84+
85+
86+func L (A) = ("duckBuffs_" + A)
87+
88+
89+func M (A) = ("lastRobberyTime_" + A)
90+
91+
92+func N (A) = ("lastRobberyCost_" + A)
93+
94+
95+func O (P) = ("landRobberyState_" + P)
96+
97+
98+func Q (P) = ("landCooldownETA_" + P)
99+
100+
101+func R (A) = ("duckRobberyState_" + A)
102+
103+
104+func S (A) = ("lockedLandByDuck_" + A)
105+
106+
107+func T (A) = ("deliveryDelayByDuck_" + A)
108+
109+
110+let U = 10000
111+
112+let V = 10000
113+
114+let W = 2000
115+
116+let X = 100000
117+
118+let Y = 1000000
119+
120+let Z = 5000000
121+
122+let aa = 10000
123+
124+let ab = 1000000
125+
126+let ac = 1000000
127+
128+let ad = 10000
129+
130+func ae (af) = fraction(e, pow(af, 4, f, 4, 4, DOWN), d)
131+
132+
133+func ag (ah) = (100 + ah)
134+
135+
136+func ai (aj,ak) = {
137+ let al = ae(ak)
138+[al, (g * (al - aj))]
139+ }
140+
141+
142+func am (an,A,ao,ap) = {
143+ let aq = split(valueOrElse(getString(an, B(A)), "0_0_0_0_0"), "_")
144+ let ar = valueOrElse(getInteger(an, D(A)), 0)
145+ let as = valueOrElse(getInteger(an, z(A)), ag(ar))
146+ let at = split(valueOrElse(getString(an, L(A)), "0_0_0_0_0"), "_")
147+ ([parseIntValue(aq[k]), parseIntValue(aq[l]), parseIntValue(aq[m]), parseIntValue(aq[n]), parseIntValue(aq[o]), ar, as] ++ (if (ap)
148+ then [ao, ao, ao, ao, ao]
149+ else [parseIntValue(at[k]), parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o])]))
150+ }
151+
152+
153+func au (an,A) = {
154+ let av = valueOrElse(getInteger(an, N(A)), 0)
155+ let aw = valueOrElse(getInteger(an, M(A)), 0)
156+ let ax = lastBlock.timestamp
157+ let ay = max([h, (av - (i * (ax - aw)))])
158+ let az = valueOrElse(getInteger(an, R(A)), 0)
159+ let aA = valueOrElse(getString(an, S(A)), "")
160+ let aB = valueOrElse(getInteger(an, Q(aA)), 0)
161+ $Tuple5(ay, aw, az, aA, aB)
162+ }
163+
164+
165+let aC = "LAND"
166+
167+let aD = "DUCK"
168+
169+let aE = "PRESALE"
170+
171+let aF = 6
172+
173+let aG = 25
174+
175+let aH = 3456000
176+
177+let aI = 10000000000
178+
179+let aJ = "Africa_F_Africa"
180+
181+let aK = 39637
182+
183+let aL = 10
184+
185+let aM = 50000
186+
187+let aN = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
188+
189+let aO = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
190+
191+let aP = 10000000
192+
193+let aQ = [15, 16, 17, 18, 19, 20]
194+
195+let aR = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
196+
197+let aS = 6
198+
199+let aT = 8
200+
201+let aU = 9
201202
202203 let aV = 10
203204
204-let aW = 0
205-
206-let aX = 1
207-
208-let aY = 2
209-
210-let aZ = 3
211-
212-let ba = 4
213-
214-let bb = 0
215-
216-let bc = 1
217-
218-let bd = 2
219-
220-let be = 3
221-
222-let bf = 0
223-
224-let bg = 1
225-
226-let bh = 2
227-
228-let bi = 3
229-
230-let bj = 0
231-
232-let bk = 1
233-
234-let bl = 2
235-
236-func bm (bn) = ("no_" + bn)
237-
238-
239-func bo (bn) = ("lcna_" + bn)
240-
241-
242-func bp (bn) = ("st_" + bn)
243-
244-
245-func bq (br,bn) = makeString(["las", br, bn], "_")
246-
247-
248-func bs (bt,bn,bu) = ((((("sttao_" + bt) + "_") + bn) + "_") + bu)
249-
250-
251-func bv (O) = ("wh_" + O)
252-
253-
254-func bw (bn) = ("infraLevel_" + bn)
255-
256-
257-func bx (O) = ("fortifications_" + O)
258-
259-
260-func by (bn) = ("duckCustomNameByAssetId_" + bn)
261-
262-
263-func bz (b) = ("accountCustomNameByAddr_" + b)
264-
265-
266-func bA (b) = ("accRefBy_" + b)
267-
268-
269-func bB (z) = ("onboardArtActivatedOnDuck_" + z)
270-
271-
272-func bC (b) = ("onboardArtActivatedDuckBy_" + b)
273-
274-
275-func bD (b) = ("accReferrals_" + b)
276-
277-
278-func bE (bn) = ("duckOwner_" + bn)
279-
280-
281-func bF (bu) = ("stakedDuckByOwner_" + bu)
282-
283-
284-func bG (z) = ("backPack_" + z)
285-
286-
287-func bH (z) = ("duckLocation_" + z)
288-
289-
290-func bI (bJ) = ("%s%s__userGwlReleaseTime__" + bJ)
291-
292-
293-func bK () = "emergencyWarehouseProducts"
294-
295-
296-let bL = "deliveryFund"
297-
298-let bM = "%s__lastTourId"
299-
300-func bN (bO) = ("%s%d__tourStaticData__" + toString(bO))
301-
302-
303-func bP (bO) = ("%s%d__tourDynamicData__" + toString(bO))
304-
305-
306-func bQ (bO,z) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bO), z], "__")
307-
308-
309-let bR = 0
310-
311-let bS = 1
312-
313-let bT = 6
205+let aW = 10
206+
207+let aX = 0
208+
209+let aY = 1
210+
211+let aZ = 2
212+
213+let ba = 3
214+
215+let bb = 4
216+
217+let bc = 0
218+
219+let bd = 1
220+
221+let be = 2
222+
223+let bf = 3
224+
225+let bg = 0
226+
227+let bh = 1
228+
229+let bi = 2
230+
231+let bj = 3
232+
233+let bk = 0
234+
235+let bl = 1
236+
237+let bm = 2
238+
239+func bn (bo) = ("no_" + bo)
240+
241+
242+func bp (bo) = ("lcna_" + bo)
243+
244+
245+func bq (bo) = ("st_" + bo)
246+
247+
248+func br (bs,bo) = makeString(["las", bs, bo], "_")
249+
250+
251+func bt (bu,bo,bv) = ((((("sttao_" + bu) + "_") + bo) + "_") + bv)
252+
253+
254+func bw (P) = ("wh_" + P)
255+
256+
257+func bx (bo) = ("infraLevel_" + bo)
258+
259+
260+func by (P) = ("fortifications_" + P)
261+
262+
263+func bz (bo) = ("duckCustomNameByAssetId_" + bo)
264+
265+
266+func bA (c) = ("accountCustomNameByAddr_" + c)
267+
268+
269+func bB (c) = ("accRefBy_" + c)
270+
271+
272+func bC (A) = ("onboardArtActivatedOnDuck_" + A)
273+
274+
275+func bD (c) = ("onboardArtActivatedDuckBy_" + c)
276+
277+
278+func bE (c) = ("accReferrals_" + c)
279+
280+
281+func bF (bo) = ("duckOwner_" + bo)
282+
283+
284+func bG (bv) = ("stakedDuckByOwner_" + bv)
285+
286+
287+func bH (A) = ("backPack_" + A)
288+
289+
290+func bI (A) = ("duckLocation_" + A)
291+
292+
293+func bJ (bK) = ("%s%s__userGwlReleaseTime__" + bK)
294+
295+
296+func bL () = "emergencyWarehouseProducts"
297+
298+
299+let bM = "deliveryFund"
300+
301+let bN = "deliveryLocked"
302+
303+let bO = "%s__lastTourId"
304+
305+func bP (bQ) = ("%s%d__tourStaticData__" + toString(bQ))
306+
307+
308+func bR (bQ) = ("%s%d__tourDynamicData__" + toString(bQ))
309+
310+
311+func bS (bQ,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bQ), A], "__")
312+
313+
314+let bT = 0
314315
315316 let bU = 1
316317
317-func bV (bW,bO) = {
318- let bX = split(valueOrErrorMessage(getString(bW, bN(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__")
319- let bY = split_4C(valueOrErrorMessage(getString(bW, bP(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__")
320-[bX, bY]
321- }
322-
323-
324-func bZ (bW,ca) = {
325- let cb = valueOrElse(getInteger(bW, bM), 0)
326- let cc = split(ca, "_")
327- let av = lastBlock.timestamp
328- let cd = bV(bW, cb)
329- let bX = cd[bR]
330- let bY = cd[bS]
331- if (if (if ((cc[bk] == "T"))
332- then (parseIntValue(cc[bj]) == cb)
318+let bV = 6
319+
320+let bW = 1
321+
322+func bX (bY,bQ) = {
323+ let bZ = split(valueOrErrorMessage(getString(bY, bP(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
324+ let ca = split_4C(valueOrErrorMessage(getString(bY, bR(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__")
325+[bZ, ca]
326+ }
327+
328+
329+func cb (bY,cc) = {
330+ let cd = valueOrElse(getInteger(bY, bO), 0)
331+ let ce = split(cc, "_")
332+ let ax = lastBlock.timestamp
333+ let cf = bX(bY, cd)
334+ let bZ = cf[bT]
335+ let ca = cf[bU]
336+ if (if (if ((ce[bl] == "T"))
337+ then (parseIntValue(ce[bk]) == cd)
333338 else false)
334- then (bY[bU] == "INPROGRESS")
339+ then (ca[bW] == "INPROGRESS")
335340 else false)
336- then (parseIntValue(bX[bT]) > av)
341+ then (parseIntValue(bZ[bV]) > ax)
337342 else false
338343 }
339344
340345
341-func ce (cf) = (parseIntValue(cf[aR]) * aO)
342-
343-
344-let cg = false
345-
346-let ch = false
347-
348-let ci = true
349-
350-let cj = take(drop(this.bytes, 1), 1)
351-
352-let ck = {
353- let cl = cj
354- if ((base58'2W' == cl))
346+func cg (ch) = (parseIntValue(ch[aS]) * aP)
347+
348+
349+let ci = false
350+
351+let cj = false
352+
353+let ck = true
354+
355+let cl = take(drop(this.bytes, 1), 1)
356+
357+let cm = {
358+ let cn = cl
359+ if ((base58'2W' == cn))
355360 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
356- else if ((base58'2T' == cl))
361+ else if ((base58'2T' == cn))
357362 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
358363 else throw("Unknown chain")
359364 }
360365
361-let cm = {
362- let cl = cj
363- if ((base58'2W' == cl))
366+let co = {
367+ let cn = cl
368+ if ((base58'2W' == cn))
364369 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
365- else if ((base58'2T' == cl))
370+ else if ((base58'2T' == cn))
366371 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
367372 else throw("Unknown chain")
368373 }
369374
370-let cn = {
371- let cl = cj
372- if ((base58'2W' == cl))
375+let cp = {
376+ let cn = cl
377+ if ((base58'2W' == cn))
373378 then 10000000000
374- else if ((base58'2T' == cl))
379+ else if ((base58'2T' == cn))
375380 then 100000000
376381 else throw("Unknown chain")
377382 }
378383
379-let co = {
380- let cl = cj
381- if ((base58'2W' == cl))
384+let cq = {
385+ let cn = cl
386+ if ((base58'2W' == cn))
382387 then 86400000
383- else if ((base58'2T' == cl))
388+ else if ((base58'2T' == cn))
384389 then 60000
385390 else throw("Unknown chain")
386391 }
387392
388-let cp = "__"
389-
390-let cq = 1000000
391-
392-let cr = 100000000
393-
394-let cs = 25
395-
396-let ct = 100
397-
398-let cu = 225
399-
400-let cv = 400
401-
402-let cw = 625
403-
404-let cx = [0, 1, 2, 3, 4, 5]
405-
406-func cy (cz,cA) = valueOrErrorMessage(getString(cz, cA), makeString(["mandatory ", toString(cz), ".", cA, " is not defined"], ""))
407-
408-
409-let cB = 1
410-
411-let cC = 2
412-
413-let cD = 3
414-
415-let cE = 4
416-
417-let cF = 7
418-
419-let cG = 8
420-
421-func cH () = "%s__restConfig"
422-
423-
424-func cI () = "%s__restAddr"
425-
426-
427-func cJ (cK) = split_4C(cy(cK, cH()), cp)
428-
429-
430-func cL (cM,cN) = valueOrErrorMessage(addressFromString(cM[cN]), ("Rest cfg doesn't contain address at index " + toString(cN)))
431-
432-
433-let cO = addressFromStringValue(valueOrElse(getString(this, cI()), cm))
434-
435-let cM = cJ(cO)
436-
437-let al = cL(cM, cB)
438-
439-let cP = cL(cM, cC)
440-
441-let cQ = cL(cM, cD)
442-
443-let cR = cL(cM, cE)
444-
445-let cS = cL(cM, cF)
446-
447-let cT = cL(cM, cG)
448-
449-let cU = 0
450-
451-let cV = 1
452-
453-let cW = 2
454-
455-let cX = 3
456-
457-let cY = "wlg_assetId"
458-
459-let cZ = valueOrErrorMessage(getBinary(cR, cY), "WLGOLD is not issued yet")
460-
461-let da = "acresAssetId"
462-
463-let db = valueOrErrorMessage(getBinary(cT, da), "ACRES is not issued yet")
464-
465-let dc = 2
466-
467-func dd (cz) = ("finishBlockForAddr_" + cz)
468-
469-
470-func de () = "resTypesProportions"
471-
472-
473-func df (dg) = ("resTypesByContinent_" + dg)
474-
475-
476-func dh (bu) = ("stakedLandsByOwner_" + bu)
477-
478-
479-func di (bu) = ("stakedPiecesByOwner_" + bu)
480-
481-
482-func dj (dk) = {
483- let cl = dk
484- if ($isInstanceOf(cl, "String"))
393+let cr = "__"
394+
395+let cs = 1000000
396+
397+let ct = 100000000
398+
399+let cu = 25
400+
401+let cv = 100
402+
403+let cw = 225
404+
405+let cx = 400
406+
407+let cy = 625
408+
409+let cz = [0, 1, 2, 3, 4, 5]
410+
411+func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
412+
413+
414+let cD = 1
415+
416+let cE = 2
417+
418+let cF = 3
419+
420+let cG = 4
421+
422+let cH = 7
423+
424+let cI = 8
425+
426+func cJ () = "%s__restConfig"
427+
428+
429+func cK () = "%s__restAddr"
430+
431+
432+func cL (cM) = split_4C(cA(cM, cJ()), cr)
433+
434+
435+func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
436+
437+
438+let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
439+
440+let cO = cL(cQ)
441+
442+let an = cN(cO, cD)
443+
444+let cR = cN(cO, cE)
445+
446+let cS = cN(cO, cF)
447+
448+let cT = cN(cO, cG)
449+
450+let cU = cN(cO, cH)
451+
452+let cV = cN(cO, cI)
453+
454+let cW = 0
455+
456+let cX = 1
457+
458+let cY = 2
459+
460+let cZ = 3
461+
462+let da = "wlg_assetId"
463+
464+let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
465+
466+let dc = "acresAssetId"
467+
468+let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
469+
470+let de = 2
471+
472+func df (cB) = ("finishBlockForAddr_" + cB)
473+
474+
475+func dg () = "resTypesProportions"
476+
477+
478+func dh (di) = ("resTypesByContinent_" + di)
479+
480+
481+func dj (bv) = ("stakedLandsByOwner_" + bv)
482+
483+
484+func dk (bv) = ("stakedPiecesByOwner_" + bv)
485+
486+
487+func dl (dm) = {
488+ let cn = dm
489+ if ($isInstanceOf(cn, "String"))
485490 then {
486- let dl = cl
487- dl
491+ let dn = cn
492+ dn
488493 }
489494 else throw("fail to cast into String")
490495 }
491496
492497
493-func dm (dk) = {
494- let cl = dk
495- if ($isInstanceOf(cl, "Int"))
498+func do (dm) = {
499+ let cn = dm
500+ if ($isInstanceOf(cn, "Int"))
496501 then {
497- let dn = cl
502+ let dp = cn
503+ dp
504+ }
505+ else throw("fail to cast into Int")
506+ }
507+
508+
509+func dq (dm) = {
510+ let cn = dm
511+ if ($isInstanceOf(cn, "Boolean"))
512+ then {
513+ let dn = cn
498514 dn
499515 }
500- else throw("fail to cast into Int")
501- }
502-
503-
504-func do (dk) = {
505- let cl = dk
506- if ($isInstanceOf(cl, "Boolean"))
507- then {
508- let dl = cl
509- dl
510- }
511516 else throw("fail to cast into Boolean")
512517 }
513518
514519
515-func dp (dq) = {
516- let cl = dq
517- if (("S" == cl))
518- then cs
519- else if (("M" == cl))
520- then ct
521- else if (("L" == cl))
522- then cu
523- else if (("XL" == cl))
524- then cv
525- else if (("XXL" == cl))
526- then cw
520+func dr (ds) = {
521+ let cn = ds
522+ if (("S" == cn))
523+ then cu
524+ else if (("M" == cn))
525+ then cv
526+ else if (("L" == cn))
527+ then cw
528+ else if (("XL" == cn))
529+ then cx
530+ else if (("XXL" == cn))
531+ then cy
527532 else throw("Unknown land size")
528533 }
529534
530535
531-func dr (dl) = isDefined(parseInt(dl))
532-
533-
534-func ds () = "contractsBlocked"
535-
536-
537-func dt (b) = ("lastTxIdByUser_" + b)
538-
539-
540-func du (dv,dw,dx) = {
541- let dy = value(blockInfoByHeight(dw))
542- let dz = sha256((value(dy.vrf) + dx))
543- (toInt(dz) % dv)
544- }
545-
546-
547-let dA = {
548- let cl = cj
549- if ((base58'2W' == cl))
536+func dt (dn) = isDefined(parseInt(dn))
537+
538+
539+func du () = "contractsBlocked"
540+
541+
542+func dv (c) = ("lastTxIdByUser_" + c)
543+
544+
545+func dw (dx,dy) = {
546+ let dz = pow(10, 0, dy, 0, 0, DOWN)
547+ let dA = toString((dx % dz))
548+ let dB = drop(toString(dz), (1 + size(dA)))
549+ (((toString((dx / dz)) + ".") + dB) + dA)
550+ }
551+
552+
553+func dC (dD,dE,dF) = {
554+ let dG = value(blockInfoByHeight(dE))
555+ let dH = sha256((value(dG.vrf) + dF))
556+ (toInt(dH) % dD)
557+ }
558+
559+
560+let dI = {
561+ let cn = cl
562+ if ((base58'2W' == cn))
550563 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
551- else if ((base58'2T' == cl))
564+ else if ((base58'2T' == cn))
552565 then this
553566 else throw("Unknown chain")
554567 }
555568
556-let dB = {
557- let cl = cj
558- if ((base58'2W' == cl))
569+let dJ = {
570+ let cn = cl
571+ if ((base58'2W' == cn))
559572 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
560- else if ((base58'2T' == cl))
573+ else if ((base58'2T' == cn))
561574 then this
562575 else throw("Unknown chain")
563576 }
564577
565-let dC = {
566- let cl = cj
567- if ((base58'2W' == cl))
568- then if (cg)
578+let dK = {
579+ let cn = cl
580+ if ((base58'2W' == cn))
581+ then if (ci)
569582 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
570583 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
571- else if ((base58'2T' == cl))
584+ else if ((base58'2T' == cn))
572585 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
573586 else throw("Unknown chain")
574587 }
575588
576-let dD = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
577-
578-let dE = 300000
579-
580-let dF = 5000000
581-
582-let dG = 50
583-
584-let dH = 10000000
585-
586-let dI = {
587- let cl = cj
588- if ((base58'2W' == cl))
589+let dL = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
590+
591+let dM = 300000
592+
593+let dN = 600000
594+
595+let dO = 5000000
596+
597+let dP = 50
598+
599+let dQ = 10000000
600+
601+let dR = {
602+ let cn = cl
603+ if ((base58'2W' == cn))
589604 then 252289527462
590- else if ((base58'2T' == cl))
605+ else if ((base58'2T' == cn))
591606 then 2522895274
592607 else throw("Unknown chain")
593608 }
594609
595-let dJ = {
596- let cl = cj
597- if ((base58'2W' == cl))
610+let dS = {
611+ let cn = cl
612+ if ((base58'2W' == cn))
598613 then 250000000
599- else if ((base58'2T' == cl))
614+ else if ((base58'2T' == cn))
600615 then 250000000
601616 else throw("Unknown chain")
602617 }
603618
604-let dK = 2500000000
605-
606-let dL = toBigInt(5)
607-
608-let dM = toBigInt(20)
609-
610-let dN = toBigInt((20 * 20))
611-
612-let dO = toBigInt(((20 * 20) * 20))
613-
614-let dP = toBigInt((((20 * 20) * 20) * 20))
615-
616-let dQ = toBigInt(((((20 * 20) * 20) * 20) * 20))
617-
618-let dR = 500
619-
620-func dS () = "nextLandNum"
621-
622-
623-func dT (dU) = ("lcn_" + dU)
624-
625-
626-func dV (dW) = ("la_" + dW)
627-
628-
629-func dX (bn,bu) = ((("ilao_" + bn) + "_") + bu)
630-
631-
632-func dY (dW) = ("lo_" + dW)
633-
634-
635-func dZ (dU) = ("duckByCustomName_" + dU)
636-
637-
638-func ea (dU) = ("accountByCustomName_" + dU)
639-
640-
641-func eb () = "oldiesList"
642-
643-
644-let ec = 0
645-
646-let ed = 1
647-
648-let ee = 2
649-
650-let ef = 0
651-
652-let eg = 5
653-
654-let eh = 6
655-
656-let ei = 7
657-
658-func ej (dW,dq) = ((aA + dW) + dq)
659-
660-
661-func ek (el,em) = {
662- let en = if ((el >= 0))
663- then (((el + em) - 1) / em)
664- else -((((-(el) + em) - 1) / em))
665- (en * cr)
666- }
667-
668-
669-func eo (ep,eq) = {
670- let er = (((((eq[0] + eq[1]) + eq[2]) + eq[3]) + eq[4]) + eq[5])
671- if ((0 >= er))
619+let dT = 2500000000
620+
621+let dU = toBigInt(5)
622+
623+let dV = toBigInt(20)
624+
625+let dW = toBigInt((20 * 20))
626+
627+let dX = toBigInt(((20 * 20) * 20))
628+
629+let dY = toBigInt((((20 * 20) * 20) * 20))
630+
631+let dZ = toBigInt(((((20 * 20) * 20) * 20) * 20))
632+
633+let ea = 500
634+
635+func eb () = "nextLandNum"
636+
637+
638+func ec (ed) = ("lcn_" + ed)
639+
640+
641+func ee (ef) = ("la_" + ef)
642+
643+
644+func eg (bo,bv) = ((("ilao_" + bo) + "_") + bv)
645+
646+
647+func eh (ef) = ("lo_" + ef)
648+
649+
650+func ei (ed) = ("duckByCustomName_" + ed)
651+
652+
653+func ej (ed) = ("accountByCustomName_" + ed)
654+
655+
656+func ek () = "oldiesList"
657+
658+
659+let el = 0
660+
661+let em = 1
662+
663+let en = 2
664+
665+let eo = 0
666+
667+let ep = 5
668+
669+let eq = 6
670+
671+let er = 7
672+
673+func es (ef,ds) = ((aC + ef) + ds)
674+
675+
676+func et (eu,ev) = {
677+ let ew = if ((eu >= 0))
678+ then (((eu + ev) - 1) / ev)
679+ else -((((-(eu) + ev) - 1) / ev))
680+ (ew * ct)
681+ }
682+
683+
684+func ex (ey,ez) = {
685+ let eA = (((((ez[0] + ez[1]) + ez[2]) + ez[3]) + ez[4]) + ez[5])
686+ if ((0 >= eA))
672687 then throw("Zero weights sum")
673688 else {
674- let es = fraction(ep, cq, er)
675- func et (eu,ev) = (eu :+ fraction(ev, es, cq))
676-
677- let ew = eq
678- let ex = size(ew)
679- let ey = nil
680- func ez (eA,eB) = if ((eB >= ex))
681- then eA
682- else et(eA, ew[eB])
683-
684- func eC (eA,eB) = if ((eB >= ex))
685- then eA
689+ let eB = fraction(ey, cs, eA)
690+ func eC (eD,eE) = (eD :+ fraction(eE, eB, cs))
691+
692+ let eF = ez
693+ let eG = size(eF)
694+ let eH = nil
695+ func eI (eJ,eK) = if ((eK >= eG))
696+ then eJ
697+ else eC(eJ, eF[eK])
698+
699+ func eL (eJ,eK) = if ((eK >= eG))
700+ then eJ
686701 else throw("List size exceeds 6")
687702
688- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
689- }
690- }
691-
692-
693-func eD (ep) = {
694- let eE = split(value(getString(de())), "_")
695- if ((size(eE) != aD))
703+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
704+ }
705+ }
706+
707+
708+func eM (ey) = {
709+ let eN = split(value(getString(dg())), "_")
710+ if ((size(eN) != aF))
696711 then throw("Wrong proportions data")
697712 else {
698- let eF = [parseIntValue(eE[0]), parseIntValue(eE[1]), parseIntValue(eE[2]), parseIntValue(eE[3]), parseIntValue(eE[4]), parseIntValue(eE[5])]
699- eo(ep, eF)
700- }
701- }
702-
703-
704-func eG (eH,eI,eJ) = {
705- let eK = eD(eJ)
706- func eL (eu,cN) = {
707- let eM = (parseIntValue(eI[cN]) - eK[cN])
708- if ((0 > eM))
709- then throw(((((("Not enough material idx=" + toString(cN)) + ", you have ") + eI[cN]) + ", but need ") + toString(eK[cN])))
710- else (eu :+ toString(eM))
713+ let eO = [parseIntValue(eN[0]), parseIntValue(eN[1]), parseIntValue(eN[2]), parseIntValue(eN[3]), parseIntValue(eN[4]), parseIntValue(eN[5])]
714+ ex(ey, eO)
715+ }
716+ }
717+
718+
719+func eP (eQ,eR,eS) = {
720+ let eT = eM(eS)
721+ func eU (eD,cP) = {
722+ let eV = (parseIntValue(eR[cP]) - eT[cP])
723+ if ((0 > eV))
724+ then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eR[cP]) + ", but need ") + toString(eT[cP])))
725+ else (eD :+ toString(eV))
711726 }
712727
713- if (eH)
728+ if (eQ)
714729 then {
715- let ew = cx
716- let ex = size(ew)
717- let ey = nil
718- func ez (eA,eB) = if ((eB >= ex))
719- then eA
720- else eL(eA, ew[eB])
721-
722- func eC (eA,eB) = if ((eB >= ex))
723- then eA
730+ let eF = cz
731+ let eG = size(eF)
732+ let eH = nil
733+ func eI (eJ,eK) = if ((eK >= eG))
734+ then eJ
735+ else eU(eJ, eF[eK])
736+
737+ func eL (eJ,eK) = if ((eK >= eG))
738+ then eJ
724739 else throw("List size exceeds 6")
725740
726- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
727- }
728- else eI
729- }
730-
731-
732-func eN (eO,eP) = if ((eP == ""))
733- then $Tuple2(eO, false)
741+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
742+ }
743+ else eR
744+ }
745+
746+
747+func eW (eX,eY) = if ((eY == ""))
748+ then $Tuple2(eX, false)
734749 else {
735- func eQ (eu,eR) = {
736- let eS = split(eR, ",")
737- if ((size(eS) != 2))
750+ func eZ (eD,fa) = {
751+ let fb = split(fa, ",")
752+ if ((size(fb) != 2))
738753 then throw("Incorrect format, should be index,amount")
739754 else {
740- let cN = parseIntValue(eS[0])
741- if (if ((0 > cN))
755+ let cP = parseIntValue(fb[0])
756+ if (if ((0 > cP))
742757 then true
743- else (cN >= size(aQ)))
758+ else (cP >= size(aR)))
744759 then throw("Unknown product idx")
745760 else {
746- let eT = parseIntValue(eS[1])
747- let eU = split(eu._1, (eS[0] + ":"))
748- if ((size(eU) != 2))
749- then throw((("You don't have " + aM[cN]) + " equipped"))
761+ let fc = parseIntValue(fb[1])
762+ let fd = split(eD._1, (fb[0] + ":"))
763+ if ((size(fd) != 2))
764+ then throw((("You don't have " + aN[cP]) + " equipped"))
750765 else {
751- let eV = eU[1]
752- let eW = if (dr(take(drop(eV, 1), 1)))
766+ let fe = fd[1]
767+ let ff = if (dt(take(drop(fe, 1), 1)))
753768 then 2
754769 else 1
755- let eX = parseIntValue(take(eV, eW))
756- let eY = drop(eV, eW)
757- let eZ = if ((eX >= eT))
758- then (eX - eT)
759- else throw(((((("You equipped " + toString(eX)) + " of ") + aM[cN]) + ", but tried to use ") + toString(eT)))
760- $Tuple2(((((eU[0] + eS[0]) + ":") + toString(eZ)) + eY), if (eu._2)
770+ let fg = parseIntValue(take(fe, ff))
771+ let fh = drop(fe, ff)
772+ let fi = if ((fg >= fc))
773+ then (fg - fc)
774+ else throw(((((("You equipped " + toString(fg)) + " of ") + aN[cP]) + ", but tried to use ") + toString(fc)))
775+ $Tuple2(((((fd[0] + fb[0]) + ":") + toString(fi)) + fh), if (eD._2)
761776 then true
762- else if (if ((cN >= 6))
763- then (8 >= cN)
777+ else if (if ((cP >= 6))
778+ then (8 >= cP)
764779 else false)
765- then (eZ == 0)
780+ then (fi == 0)
766781 else false)
767782 }
768783 }
769784 }
770785 }
771786
772- let ew = split(eP, "_")
773- let ex = size(ew)
774- let ey = $Tuple2(eO, false)
775- func ez (eA,eB) = if ((eB >= ex))
776- then eA
777- else eQ(eA, ew[eB])
778-
779- func eC (eA,eB) = if ((eB >= ex))
780- then eA
787+ let eF = split(eY, "_")
788+ let eG = size(eF)
789+ let eH = $Tuple2(eX, false)
790+ func eI (eJ,eK) = if ((eK >= eG))
791+ then eJ
792+ else eZ(eJ, eF[eK])
793+
794+ func eL (eJ,eK) = if ((eK >= eG))
795+ then eJ
781796 else throw("List size exceeds 10")
782797
783- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
798+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
784799 }
785800
786801
787-func fa (fb) = {
788- let fc = if ((fb == ""))
802+func fj (fk) = {
803+ let fl = if ((fk == ""))
789804 then nil
790- else split_4C(fb, "_")
791- func fd (eu,cf) = {
792- let fe = (size(eu) / 8)
793- let eX = if ((size(fc) > fe))
794- then parseIntValue(fc[fe])
805+ else split_4C(fk, "_")
806+ func fm (eD,ch) = {
807+ let fn = (size(eD) / 8)
808+ let fg = if ((size(fl) > fn))
809+ then parseIntValue(fl[fn])
795810 else 0
796- (eu + toBytes(eX))
811+ (eD + toBytes(fg))
797812 }
798813
799- let ew = aQ
800- let ex = size(ew)
801- let ey = base58''
802- func ez (eA,eB) = if ((eB >= ex))
803- then eA
804- else fd(eA, ew[eB])
805-
806- func eC (eA,eB) = if ((eB >= ex))
807- then eA
814+ let eF = aR
815+ let eG = size(eF)
816+ let eH = base58''
817+ func eI (eJ,eK) = if ((eK >= eG))
818+ then eJ
819+ else fm(eJ, eF[eK])
820+
821+ func eL (eJ,eK) = if ((eK >= eG))
822+ then eJ
808823 else throw("List size exceeds 50")
809824
810- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
811- }
812-
813-
814-func ff (fg) = {
815- func fh (eu,cf) = {
816- let fe = size(eu)
817- let fi = take(drop(fg, (8 * fe)), 8)
818- (eu :+ toString(toInt(fi)))
825+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
826+ }
827+
828+
829+func fo (fp) = {
830+ func fq (eD,ch) = {
831+ let fn = size(eD)
832+ let fr = take(drop(fp, (8 * fn)), 8)
833+ (eD :+ toString(toInt(fr)))
819834 }
820835
821836 makeString_2C({
822- let ew = aQ
823- let ex = size(ew)
824- let ey = nil
825- func ez (eA,eB) = if ((eB >= ex))
826- then eA
827- else fh(eA, ew[eB])
828-
829- func eC (eA,eB) = if ((eB >= ex))
830- then eA
837+ let eF = aR
838+ let eG = size(eF)
839+ let eH = nil
840+ func eI (eJ,eK) = if ((eK >= eG))
841+ then eJ
842+ else fq(eJ, eF[eK])
843+
844+ func eL (eJ,eK) = if ((eK >= eG))
845+ then eJ
831846 else throw("List size exceeds 50")
832847
833- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
848+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
834849 }, "_")
835850 }
836851
837852
838-func fj (fk,fl) = {
839- func fm (eu,fe) = {
840- let fn = if ((size(fk) > (7 + fe)))
841- then fk[(7 + fe)]
853+func fs (ft,fu) = {
854+ func fv (eD,fn) = {
855+ let fw = if ((size(ft) > (7 + fn)))
856+ then ft[(7 + fn)]
842857 else 0
843- if ((parseIntValue(fl[fe]) > (fk[fe] + fn)))
844- then throw(("Requirement not satisfied: " + i[fe]))
858+ if ((parseIntValue(fu[fn]) > (ft[fn] + fw)))
859+ then throw(("Requirement not satisfied: " + j[fn]))
845860 else true
846861 }
847862
848- let ew = [0, 1, 2, 3, 4, 5, 6]
849- let ex = size(ew)
850- let ey = false
851- func ez (eA,eB) = if ((eB >= ex))
852- then eA
853- else fm(eA, ew[eB])
854-
855- func eC (eA,eB) = if ((eB >= ex))
856- then eA
863+ let eF = [0, 1, 2, 3, 4, 5, 6]
864+ let eG = size(eF)
865+ let eH = false
866+ func eI (eJ,eK) = if ((eK >= eG))
867+ then eJ
868+ else fv(eJ, eF[eK])
869+
870+ func eL (eJ,eK) = if ((eK >= eG))
871+ then eJ
857872 else throw("List size exceeds 7")
858873
859- eC(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7)
860- }
861-
862-
863-func fo (fp,fc,fq,fk,fr,fs) = {
864- let eS = split(fp, ":")
865- if ((size(eS) != 2))
874+ eL(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7)
875+ }
876+
877+
878+func fx (fy,fl,fz,ft,fA,fB) = {
879+ let fb = split(fy, ":")
880+ if ((size(fb) != 2))
866881 then throw("Incorrect format, should be index:amount")
867- else if (if (!(fq))
868- then (size(eS[0]) != 2)
882+ else if (if (!(fz))
883+ then (size(fb[0]) != 2)
869884 else false)
870885 then throw("Product idx should be 2 digits, zero padded")
871886 else {
872- let ft = parseIntValue(eS[0])
873- let fu = parseIntValue(eS[1])
874- if (!(containsElement(aP, ft)))
875- then throw((("Product '" + aM[ft]) + "' cannot be used for land defense"))
876- else if ((0 > fu))
887+ let fC = parseIntValue(fb[0])
888+ let fD = parseIntValue(fb[1])
889+ if (!(containsElement(aQ, fC)))
890+ then throw((("Product '" + aN[fC]) + "' cannot be used for land defense"))
891+ else if ((0 > fD))
877892 then throw("Count can't be negative")
878- else if ((fu > s))
879- then throw(((("Can't put more than " + toString(s)) + " of ") + aM[ft]))
880- else if ((fu == 0))
881- then $Tuple3(fc, fr, fs)
893+ else if ((fD > t))
894+ then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
895+ else if ((fD == 0))
896+ then $Tuple3(fl, fA, fB)
882897 else {
883- let fv = take(fc, (8 * ft))
884- let eX = toInt(take(drop(fc, (8 * ft)), 8))
885- let eY = drop(fc, (8 * (ft + 1)))
886- let cf = split(aQ[ft], "_")
887- if (if (!(fq))
888- then (fu > eX)
898+ let fE = take(fl, (8 * fC))
899+ let fg = toInt(take(drop(fl, (8 * fC)), 8))
900+ let fh = drop(fl, (8 * (fC + 1)))
901+ let ch = split(aR[fC], "_")
902+ if (if (!(fz))
903+ then (fD > fg)
889904 else false)
890- then throw(((((("You have " + toString(eX)) + " of ") + aM[ft]) + ", but tried to use ") + toString(fu)))
905+ then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
891906 else {
892- let eZ = if (if (!(fq))
893- then fj(fk, split(cf[aT], ","))
907+ let fi = if (if (!(fz))
908+ then fs(ft, split(ch[aU], ","))
894909 else false)
895- then (eX - fu)
896- else (eX + fu)
897- let fw = (ek(eZ, aV) - ek(eX, aV))
898- $Tuple3(((fv + toBytes(eZ)) + eY), (fr + fw), (fs - fw))
910+ then (fg - fD)
911+ else (fg + fD)
912+ let fF = (et(fi, aW) - et(fg, aW))
913+ $Tuple3(((fE + toBytes(fi)) + fh), (fA + fF), (fB - fF))
899914 }
900915 }
901916 }
902917 }
903918
904919
905-func fx (fp,fc,fq,fy,fz,fA,fk) = {
906- let eS = split(fp, ":")
907- if ((size(eS) != 2))
920+func fG (fy,fl,fz,fH,fI,fJ,ft) = {
921+ let fb = split(fy, ":")
922+ if ((size(fb) != 2))
908923 then throw("Incorrect format, should be index:amount")
909- else if (if (!(fq))
910- then (size(eS[0]) != 2)
924+ else if (if (!(fz))
925+ then (size(fb[0]) != 2)
911926 else false)
912927 then throw("Product idx should be 2 digits, zero padded")
913928 else {
914- let ft = parseIntValue(eS[0])
915- let fu = parseIntValue(eS[1])
916- if (if ((0 > ft))
929+ let fC = parseIntValue(fb[0])
930+ let fD = parseIntValue(fb[1])
931+ if (if ((0 > fC))
917932 then true
918- else (ft >= size(aQ)))
933+ else (fC >= size(aR)))
919934 then throw("Unknown product idx")
920- else if ((0 > fu))
935+ else if ((0 > fD))
921936 then throw("Count can't be negative")
922- else if ((fu > s))
923- then throw(((("Can't put more than " + toString(s)) + " of ") + aM[ft]))
924- else if ((fu == 0))
925- then $Tuple2(fc, false)
937+ else if ((fD > t))
938+ then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC]))
939+ else if ((fD == 0))
940+ then $Tuple2(fl, false)
926941 else {
927- let fv = take(fc, (8 * ft))
928- let eX = toInt(take(drop(fc, (8 * ft)), 8))
929- let eY = drop(fc, (8 * (ft + 1)))
930- let cf = split(aQ[ft], "_")
931- if (if (!(fq))
932- then (fu > eX)
942+ let fE = take(fl, (8 * fC))
943+ let fg = toInt(take(drop(fl, (8 * fC)), 8))
944+ let fh = drop(fl, (8 * (fC + 1)))
945+ let ch = split(aR[fC], "_")
946+ if (if (!(fz))
947+ then (fD > fg)
933948 else false)
934- then throw(((((("You have " + toString(eX)) + " of ") + aM[ft]) + ", but tried to use ") + toString(fu)))
949+ then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD)))
935950 else {
936- let fB = if (if (!(fq))
937- then fj(fk, split(cf[aT], ","))
951+ let fK = if (if (!(fz))
952+ then fs(ft, split(ch[aU], ","))
938953 else false)
939954 then {
940- let fC = cf[aU]
941- if ((fC == ""))
955+ let fL = ch[aV]
956+ if ((fL == ""))
942957 then throw("Item cannot be equipped")
943958 else {
944- let fD = parseIntValue(fC)
945- let fE = (fD / 100)
946- if ((fy != fE))
959+ let fM = parseIntValue(fL)
960+ let fN = (fM / 100)
961+ if ((fH != fN))
947962 then throw("Segment incompatible")
948963 else {
949- let fF = ((fD % 100) / 10)
950- if ((fz != fF))
964+ let fO = ((fM % 100) / 10)
965+ if ((fI != fO))
951966 then throw("Slot incompatible")
952967 else {
953- let fG = (fD % 10)
954- if (if ((fA != 0))
955- then (fG > 1)
968+ let fP = (fM % 10)
969+ if (if ((fJ != 0))
970+ then (fP > 1)
956971 else false)
957972 then throw("Big items should occupy slot 0")
958- else (fG > 1)
973+ else (fP > 1)
959974 }
960975 }
961976 }
962977 }
963978 else false
964- $Tuple2(((fv + toBytes((eX + (if (fq)
965- then fu
966- else -(fu))))) + eY), fB)
979+ $Tuple2(((fE + toBytes((fg + (if (fz)
980+ then fD
981+ else -(fD))))) + fh), fK)
967982 }
968983 }
969984 }
970985 }
971986
972987
973-func fH (fI,fJ,fq,fy,fz,fK) = if ((fI != ""))
988+func fQ (fR,fS,fz,fH,fI,fT) = if ((fR != ""))
974989 then {
975- let fL = split(fI, ",")
976- if ((size(fL) > r))
990+ let fU = split(fR, ",")
991+ if ((size(fU) > s))
977992 then throw("Wrong slots format")
978993 else {
979- let fM = fL[0]
980- let fN = if ((size(fL) > 1))
981- then fL[1]
994+ let fV = fU[0]
995+ let fW = if ((size(fU) > 1))
996+ then fU[1]
982997 else ""
983- if (if ((fM == ""))
984- then (fN == "")
998+ if (if ((fV == ""))
999+ then (fW == "")
9851000 else false)
986- then fJ
1001+ then fS
9871002 else {
988- let fO = if ((fM != ""))
989- then fx(fM, fJ, fq, fy, fz, 0, fK)
990- else $Tuple2(fJ, false)
991- if ((fN != ""))
992- then if (fO._2)
1003+ let fX = if ((fV != ""))
1004+ then fG(fV, fS, fz, fH, fI, 0, fT)
1005+ else $Tuple2(fS, false)
1006+ if ((fW != ""))
1007+ then if (fX._2)
9931008 then throw("Big item already occupies slot")
994- else fx(fN, fO._1, fq, fy, fz, 1, fK)._1
995- else fO._1
1009+ else fG(fW, fX._1, fz, fH, fI, 1, fT)._1
1010+ else fX._1
9961011 }
9971012 }
9981013 }
999- else fJ
1000-
1001-
1002-func fP (fQ,fR,fq,fK) = {
1003- func fy (eu,fS) = {
1004- let fe = eu._1
1005- let fz = split(fS, ";")
1006- if ((size(fz) != q))
1014+ else fS
1015+
1016+
1017+func fY (fZ,ga,fz,fT) = {
1018+ func fH (eD,gb) = {
1019+ let fn = eD._1
1020+ let fI = split(gb, ";")
1021+ if ((size(fI) != r))
10071022 then throw("Wrong segment format")
10081023 else {
1009- let fT = fz[0]
1010- let fU = fz[1]
1011- if (if ((fT == ""))
1012- then (fU == "")
1024+ let gc = fI[0]
1025+ let gd = fI[1]
1026+ if (if ((gc == ""))
1027+ then (gd == "")
10131028 else false)
1014- then $Tuple2((fe + 1), eu._2)
1029+ then $Tuple2((fn + 1), eD._2)
10151030 else {
1016- let fV = fH(fT, eu._2, fq, fe, 0, fK)
1017- $Tuple2((fe + 1), fH(fU, fV, fq, fe, 1, fK))
1031+ let ge = fQ(gc, eD._2, fz, fn, 0, fT)
1032+ $Tuple2((fn + 1), fQ(gd, ge, fz, fn, 1, fT))
10181033 }
10191034 }
10201035 }
10211036
1022-( let ew = fQ
1023- let ex = size(ew)
1024- let ey = $Tuple2(0, fR)
1025- func ez (eA,eB) = if ((eB >= ex))
1026- then eA
1027- else fy(eA, ew[eB])
1028-
1029- func eC (eA,eB) = if ((eB >= ex))
1030- then eA
1037+( let eF = fZ
1038+ let eG = size(eF)
1039+ let eH = $Tuple2(0, ga)
1040+ func eI (eJ,eK) = if ((eK >= eG))
1041+ then eJ
1042+ else fH(eJ, eF[eK])
1043+
1044+ func eL (eJ,eK) = if ((eK >= eG))
1045+ then eJ
10311046 else throw("List size exceeds 6")
10321047
1033- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6))._2
1034- }
1035-
1036-
1037-func fW (fQ,fR,fr,fs,fq,fk) = if ((3 > size(fQ)))
1048+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6))._2
1049+ }
1050+
1051+
1052+func gf (fZ,ga,fA,fB,fz,ft) = if ((3 > size(fZ)))
10381053 then throw("At least duck, mines and traps parts are required")
10391054 else {
1040- func fy (eu,fS) = {
1041- let fe = eu._1
1042- if ((fe == 0))
1043- then $Tuple4((fe + 1), eu._2, eu._3, eu._4)
1055+ func fH (eD,gb) = {
1056+ let fn = eD._1
1057+ if ((fn == 0))
1058+ then $Tuple4((fn + 1), eD._2, eD._3, eD._4)
10441059 else {
1045- let fX = fo(fS, eu._2, fq, fk, eu._3, eu._4)
1046- $Tuple4((fe + 1), fX._1, fX._2, fX._3)
1060+ let gg = fx(gb, eD._2, fz, ft, eD._3, eD._4)
1061+ $Tuple4((fn + 1), gg._1, gg._2, gg._3)
10471062 }
10481063 }
10491064
1050- let fY = {
1051- let ew = fQ
1052- let ex = size(ew)
1053- let ey = $Tuple4(0, fR, fr, fs)
1054- func ez (eA,eB) = if ((eB >= ex))
1055- then eA
1056- else fy(eA, ew[eB])
1057-
1058- func eC (eA,eB) = if ((eB >= ex))
1059- then eA
1065+ let gh = {
1066+ let eF = fZ
1067+ let eG = size(eF)
1068+ let eH = $Tuple4(0, ga, fA, fB)
1069+ func eI (eJ,eK) = if ((eK >= eG))
1070+ then eJ
1071+ else fH(eJ, eF[eK])
1072+
1073+ func eL (eJ,eK) = if ((eK >= eG))
1074+ then eJ
10601075 else throw("List size exceeds 10")
10611076
1062- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1063- }
1064- $Tuple3(fY._2, fY._3, fY._4)
1077+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1078+ }
1079+ $Tuple3(gh._2, gh._3, gh._4)
10651080 }
10661081
10671082
1068-func fZ (z) = {
1069- let ga = E(z)
1070- let gb = split(valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1071- let gc = fP(gb, dD, true, nil)
1072- let gd = split(gb[o], ";")[1]
1073- let am = if ((gd == ""))
1083+func gi (A) = {
1084+ let gj = F(A)
1085+ let gk = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1086+ let gl = fY(gk, dL, true, nil)
1087+ let gm = split(gk[p], ";")[1]
1088+ let ao = if ((gm == ""))
10741089 then 0
10751090 else {
1076- let ge = split(gd, ",")[0]
1077- if ((ge == ""))
1091+ let gn = split(gm, ",")[0]
1092+ if ((gn == ""))
10781093 then 0
10791094 else {
1080- let fp = split(ge, ":")
1081- let cN = fp[0]
1082- let gf = fp[1]
1083- if (if (if (if (if ((cN == "06"))
1095+ let fy = split(gn, ":")
1096+ let cP = fy[0]
1097+ let go = fy[1]
1098+ if (if (if (if (if ((cP == "06"))
10841099 then true
1085- else (cN == "07"))
1100+ else (cP == "07"))
10861101 then true
1087- else (cN == "08"))
1088- then (gf != "")
1102+ else (cP == "08"))
1103+ then (go != "")
10891104 else false)
1090- then (parseIntValue(gf) > 0)
1105+ then (parseIntValue(go) > 0)
10911106 else false)
1092- then parseIntValue(split(aQ[parseIntValue(cN)], "_")[aS])
1107+ then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
10931108 else 0
10941109 }
10951110 }
1096- let fK = ak(this, z, am, true)
1097- let gg = fP(gb, gc, false, fK)
1098- (gg == gg)
1099- }
1100-
1101-
1102-func gh (gi,gj,gk,gl) = if ((size(gi) != aD))
1111+ let fT = am(this, A, ao, true)
1112+ let gp = fY(gk, gl, false, fT)
1113+ (gp == gp)
1114+ }
1115+
1116+
1117+func gq (gr,gs,gt,gu) = if ((size(gr) != aF))
11031118 then throw("Wrong proportions data")
11041119 else {
1105- func gm (eu,gn) = {
1106- let eM = (parseIntValue(gi[gn]) + ((gl * gj[gn]) * gk))
1107- if ((0 > eM))
1108- then throw(((((((("Panic! Pieces of type=" + toString(gn)) + ", sign=") + toString(gl)) + ", terrainCounts[i]=") + toString(gj[gn])) + ", landSizeIndex=") + toString(gk)))
1109- else (eu :+ toString(eM))
1110- }
1111-
1112- let ew = cx
1113- let ex = size(ew)
1114- let ey = nil
1115- func ez (eA,eB) = if ((eB >= ex))
1116- then eA
1117- else gm(eA, ew[eB])
1118-
1119- func eC (eA,eB) = if ((eB >= ex))
1120- then eA
1120+ func gv (eD,gw) = {
1121+ let eV = (parseIntValue(gr[gw]) + ((gu * gs[gw]) * gt))
1122+ if ((0 > eV))
1123+ then throw(((((((("Panic! Pieces of type=" + toString(gw)) + ", sign=") + toString(gu)) + ", terrainCounts[i]=") + toString(gs[gw])) + ", landSizeIndex=") + toString(gt)))
1124+ else (eD :+ toString(eV))
1125+ }
1126+
1127+ let eF = cz
1128+ let eG = size(eF)
1129+ let eH = nil
1130+ func eI (eJ,eK) = if ((eK >= eG))
1131+ then eJ
1132+ else gv(eJ, eF[eK])
1133+
1134+ func eL (eJ,eK) = if ((eK >= eG))
1135+ then eJ
11211136 else throw("List size exceeds 6")
11221137
1123- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1138+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
11241139 }
11251140
11261141
1127-func go (gj,gk,gl) = {
1128- let gi = split(valueOrElse(getString(de()), "0_0_0_0_0_0"), "_")
1129- makeString(gh(gi, gj, gk, gl), "_")
1130- }
1131-
1132-
1133-func gp (gq) = [(size(split(gq, "A")) - 1), (size(split(gq, "B")) - 1), (size(split(gq, "C")) - 1), (size(split(gq, "D")) - 1), (size(split(gq, "E")) - 1), (size(split(gq, "F")) - 1)]
1134-
1135-
1136-func gr (gs,gj,gt,gk,gu) = {
1137- func gv (eu,gn) = {
1138- let gw = ((fraction(gt, gu, aG) * gj[gn]) * gk)
1139- (eu :+ toString((parseIntValue(gs[gn]) + gw)))
1142+func gx (gs,gt,gu) = {
1143+ let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1144+ makeString(gq(gr, gs, gt, gu), "_")
1145+ }
1146+
1147+
1148+func gy (gz) = [(size(split(gz, "A")) - 1), (size(split(gz, "B")) - 1), (size(split(gz, "C")) - 1), (size(split(gz, "D")) - 1), (size(split(gz, "E")) - 1), (size(split(gz, "F")) - 1)]
1149+
1150+
1151+func gA (gB,gs,gC,gt,gD) = {
1152+ func gE (eD,gw) = {
1153+ let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1154+ (eD :+ toString((parseIntValue(gB[gw]) + gF)))
11401155 }
11411156
1142- let eF = {
1143- let ew = cx
1144- let ex = size(ew)
1145- let ey = nil
1146- func ez (eA,eB) = if ((eB >= ex))
1147- then eA
1148- else gv(eA, ew[eB])
1149-
1150- func eC (eA,eB) = if ((eB >= ex))
1151- then eA
1157+ let eO = {
1158+ let eF = cz
1159+ let eG = size(eF)
1160+ let eH = nil
1161+ func eI (eJ,eK) = if ((eK >= eG))
1162+ then eJ
1163+ else gE(eJ, eF[eK])
1164+
1165+ func eL (eJ,eK) = if ((eK >= eG))
1166+ then eJ
11521167 else throw("List size exceeds 6")
11531168
1154- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1169+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
11551170 }
1156- makeString(eF, "_")
1157- }
1158-
1159-
1160-func gx (gj,gt,gk,gu) = {
1161- func gv (eu,gn) = {
1162- let gw = ((fraction(gt, gu, aG) * gj[gn]) * gk)
1163- $Tuple2((eu._1 :+ gw), (eu._2 + gw))
1171+ makeString(eO, "_")
1172+ }
1173+
1174+
1175+func gG (gs,gC,gt,gD) = {
1176+ func gE (eD,gw) = {
1177+ let gF = ((fraction(gC, gD, a) * gs[gw]) * gt)
1178+ $Tuple2((eD._1 :+ gF), (eD._2 + gF))
11641179 }
11651180
1166- let ew = cx
1167- let ex = size(ew)
1168- let ey = $Tuple2(nil, 0)
1169- func ez (eA,eB) = if ((eB >= ex))
1170- then eA
1171- else gv(eA, ew[eB])
1172-
1173- func eC (eA,eB) = if ((eB >= ex))
1174- then eA
1181+ let eF = cz
1182+ let eG = size(eF)
1183+ let eH = $Tuple2(nil, 0)
1184+ func eI (eJ,eK) = if ((eK >= eG))
1185+ then eJ
1186+ else gE(eJ, eF[eK])
1187+
1188+ func eL (eJ,eK) = if ((eK >= eG))
1189+ then eJ
11751190 else throw("List size exceeds 6")
11761191
1177- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1178- }
1179-
1180-
1181-func gy (gz,gA,gB,gC) = {
1182- let gD = gB._1
1183- let gE = gB._2
1184- if ((gE == 0))
1185- then $Tuple2(makeString(gz, "_"), makeString(gA, "_"))
1186- else if ((gC >= gE))
1192+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
1193+ }
1194+
1195+
1196+func gH (gI,gJ,gK,gL) = {
1197+ let gM = gK._1
1198+ let gN = gK._2
1199+ if ((gN == 0))
1200+ then $Tuple2(makeString(gI, "_"), makeString(gJ, "_"))
1201+ else if ((gL >= gN))
11871202 then {
1188- func gF (eu,gn) = (eu :+ toString((parseIntValue(gz[gn]) + gD[gn])))
1189-
1190- let eF = {
1191- let ew = cx
1192- let ex = size(ew)
1193- let ey = nil
1194- func ez (eA,eB) = if ((eB >= ex))
1195- then eA
1196- else gF(eA, ew[eB])
1197-
1198- func eC (eA,eB) = if ((eB >= ex))
1199- then eA
1203+ func gO (eD,gw) = (eD :+ toString((parseIntValue(gI[gw]) + gM[gw])))
1204+
1205+ let eO = {
1206+ let eF = cz
1207+ let eG = size(eF)
1208+ let eH = nil
1209+ func eI (eJ,eK) = if ((eK >= eG))
1210+ then eJ
1211+ else gO(eJ, eF[eK])
1212+
1213+ func eL (eJ,eK) = if ((eK >= eG))
1214+ then eJ
12001215 else throw("List size exceeds 6")
12011216
1202- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1217+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
12031218 }
1204- $Tuple2(makeString(eF, "_"), makeString(gA, "_"))
1219+ $Tuple2(makeString(eO, "_"), makeString(gJ, "_"))
12051220 }
12061221 else {
1207- func gG (eu,gn) = {
1208- let gH = fraction(gD[gn], gC, gE)
1209- $Tuple2((eu._1 :+ toString((parseIntValue(gz[gn]) + gH))), (eu._2 :+ toString(((parseIntValue(gA[gn]) + gD[gn]) - gH))))
1222+ func gP (eD,gw) = {
1223+ let gQ = fraction(gM[gw], gL, gN)
1224+ $Tuple2((eD._1 :+ toString((parseIntValue(gI[gw]) + gQ))), (eD._2 :+ toString(((parseIntValue(gJ[gw]) + gM[gw]) - gQ))))
12101225 }
12111226
1212- let eF = {
1213- let ew = cx
1214- let ex = size(ew)
1215- let ey = $Tuple2(nil, nil)
1216- func ez (eA,eB) = if ((eB >= ex))
1217- then eA
1218- else gG(eA, ew[eB])
1219-
1220- func eC (eA,eB) = if ((eB >= ex))
1221- then eA
1227+ let eO = {
1228+ let eF = cz
1229+ let eG = size(eF)
1230+ let eH = $Tuple2(nil, nil)
1231+ func eI (eJ,eK) = if ((eK >= eG))
1232+ then eJ
1233+ else gP(eJ, eF[eK])
1234+
1235+ func eL (eJ,eK) = if ((eK >= eG))
1236+ then eJ
12221237 else throw("List size exceeds 6")
12231238
1224- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1239+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
12251240 }
1226- $Tuple2(makeString(eF._1, "_"), makeString(eF._2, "_"))
1241+ $Tuple2(makeString(eO._1, "_"), makeString(eO._2, "_"))
12271242 }
12281243 }
12291244
12301245
1231-func gI (gJ) = if ((gJ >= toBigInt(0)))
1232- then gJ
1233- else -(gJ)
1234-
1235-
1236-let gK = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1237-
1238-func gL (dn,gM) = {
1239- let gN = toInt((dn % dM))
1240- let gO = if ((gM[0] > gN))
1246+func gR (gS) = if ((gS >= toBigInt(0)))
1247+ then gS
1248+ else -(gS)
1249+
1250+
1251+let gT = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1252+
1253+func gU (dp,gV) = {
1254+ let gW = toInt((dp % dV))
1255+ let gX = if ((gV[0] > gW))
12411256 then "A"
1242- else if ((gM[1] > gN))
1257+ else if ((gV[1] > gW))
12431258 then "B"
1244- else if ((gM[2] > gN))
1259+ else if ((gV[2] > gW))
12451260 then "C"
1246- else if ((gM[3] > gN))
1261+ else if ((gV[3] > gW))
12471262 then "D"
1248- else if ((gM[4] > gN))
1263+ else if ((gV[4] > gW))
12491264 then "E"
12501265 else "F"
1251- gO
1252- }
1253-
1254-
1255-func gP (gQ,gR) = {
1256- let gS = gK[gR]
1257- func gT (eu,ev) = $Tuple2((((((eu._1 + gL(eu._2, gS)) + gL((eu._2 / dM), gS)) + gL((eu._2 / dN), gS)) + gL((eu._2 / dO), gS)) + gL((eu._2 / dP), gS)), (eu._2 / dQ))
1258-
1259- let fY = {
1260- let ew = [1, 2, 3, 4, 5]
1261- let ex = size(ew)
1262- let ey = $Tuple2("", (gQ / dL))
1263- func ez (eA,eB) = if ((eB >= ex))
1264- then eA
1265- else gT(eA, ew[eB])
1266-
1267- func eC (eA,eB) = if ((eB >= ex))
1268- then eA
1266+ gX
1267+ }
1268+
1269+
1270+func gY (gZ,ha) = {
1271+ let hb = gT[ha]
1272+ func hc (eD,eE) = $Tuple2((((((eD._1 + gU(eD._2, hb)) + gU((eD._2 / dV), hb)) + gU((eD._2 / dW), hb)) + gU((eD._2 / dX), hb)) + gU((eD._2 / dY), hb)), (eD._2 / dZ))
1273+
1274+ let gh = {
1275+ let eF = [1, 2, 3, 4, 5]
1276+ let eG = size(eF)
1277+ let eH = $Tuple2("", (gZ / dU))
1278+ func eI (eJ,eK) = if ((eK >= eG))
1279+ then eJ
1280+ else hc(eJ, eF[eK])
1281+
1282+ func eL (eJ,eK) = if ((eK >= eG))
1283+ then eJ
12691284 else throw("List size exceeds 5")
12701285
1271- eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5)
1286+ eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
12721287 }
1273- fY._1
1274- }
1275-
1276-
1277-let gU = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1278-
1279-let gV = ["A", "B", "C", "D", "E", "F"]
1280-
1281-func gW (gX,gk) = {
1282- func gY (eu,dl) = {
1283- let fe = eu._2
1284- let gZ = parseIntValue(dl)
1285- let gJ = if ((gZ == 0))
1288+ gh._1
1289+ }
1290+
1291+
1292+let hd = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
1293+
1294+let he = ["A", "B", "C", "D", "E", "F"]
1295+
1296+func hf (hg,gt) = {
1297+ func hh (eD,dn) = {
1298+ let fn = eD._2
1299+ let hi = parseIntValue(dn)
1300+ let gS = if ((hi == 0))
12861301 then 0
1287- else if ((gZ >= (4 * gk)))
1288- then (gZ / gk)
1289- else if ((gZ > (3 * gk)))
1302+ else if ((hi >= (4 * gt)))
1303+ then (hi / gt)
1304+ else if ((hi > (3 * gt)))
12901305 then 3
1291- else (((gZ - 1) / gk) + 1)
1292- $Tuple3((eu._1 :+ gJ), (eu._2 + 1), (eu._3 + gJ))
1306+ else (((hi - 1) / gt) + 1)
1307+ $Tuple3((eD._1 :+ gS), (eD._2 + 1), (eD._3 + gS))
12931308 }
12941309
1295- let fY = {
1296- let ew = gX
1297- let ex = size(ew)
1298- let ey = $Tuple3(nil, 0, 0)
1299- func ez (eA,eB) = if ((eB >= ex))
1300- then eA
1301- else gY(eA, ew[eB])
1302-
1303- func eC (eA,eB) = if ((eB >= ex))
1304- then eA
1310+ let gh = {
1311+ let eF = hg
1312+ let eG = size(eF)
1313+ let eH = $Tuple3(nil, 0, 0)
1314+ func eI (eJ,eK) = if ((eK >= eG))
1315+ then eJ
1316+ else hh(eJ, eF[eK])
1317+
1318+ func eL (eJ,eK) = if ((eK >= eG))
1319+ then eJ
13051320 else throw("List size exceeds 6")
13061321
1307- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1322+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
13081323 }
1309- let ha = fY._1
1310- let hb = value(indexOf(ha, max(ha)))
1311- let hc = (fY._3 - 25)
1312- func hd (eu,cN) = {
1313- let he = if ((cN == hb))
1314- then (ha[cN] - hc)
1315- else ha[cN]
1316- let hf = if ((he == 0))
1324+ let hj = gh._1
1325+ let hk = value(indexOf(hj, max(hj)))
1326+ let hl = (gh._3 - 25)
1327+ func hm (eD,cP) = {
1328+ let dx = if ((cP == hk))
1329+ then (hj[cP] - hl)
1330+ else hj[cP]
1331+ let dB = if ((dx == 0))
13171332 then nil
1318- else split(drop(toString(pow(10, 0, he, 0, 0, DOWN)), 1), "")
1319- let fD = gV[cN]
1320- func hg (hh,hi) = (hh :+ fD)
1321-
1322- let hj = {
1323- let ew = hf
1324- let ex = size(ew)
1325- let ey = nil
1326- func hk (eA,eB) = if ((eB >= ex))
1327- then eA
1328- else hg(eA, ew[eB])
1329-
1330- func hl (eA,eB) = if ((eB >= ex))
1331- then eA
1333+ else split(drop(toString(pow(10, 0, dx, 0, 0, DOWN)), 1), "")
1334+ let fM = he[cP]
1335+ func hn (ho,hp) = (ho :+ fM)
1336+
1337+ let hq = {
1338+ let eF = dB
1339+ let eG = size(eF)
1340+ let eH = nil
1341+ func hr (eJ,eK) = if ((eK >= eG))
1342+ then eJ
1343+ else hn(eJ, eF[eK])
1344+
1345+ func hs (eJ,eK) = if ((eK >= eG))
1346+ then eJ
13321347 else throw("List size exceeds 25")
13331348
1334- hl(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1335- }
1336- (eu ++ hj)
1349+ hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1350+ }
1351+ (eD ++ hq)
13371352 }
13381353
1339- let eF = {
1340- let ew = cx
1341- let ex = size(ew)
1342- let ey = nil
1343- func hk (eA,eB) = if ((eB >= ex))
1344- then eA
1345- else hd(eA, ew[eB])
1346-
1347- func hl (eA,eB) = if ((eB >= ex))
1348- then eA
1354+ let eO = {
1355+ let eF = cz
1356+ let eG = size(eF)
1357+ let eH = nil
1358+ func hr (eJ,eK) = if ((eK >= eG))
1359+ then eJ
1360+ else hm(eJ, eF[eK])
1361+
1362+ func hs (eJ,eK) = if ((eK >= eG))
1363+ then eJ
13491364 else throw("List size exceeds 6")
13501365
1351- hl(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6)
1366+ hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
13521367 }
1353- func hm (eu,fe) = (eu + eF[fe])
1354-
1355- let ew = gU
1356- let ex = size(ew)
1357- let ey = ""
1358- func hn (eA,eB) = if ((eB >= ex))
1359- then eA
1360- else hm(eA, ew[eB])
1361-
1362- func ho (eA,eB) = if ((eB >= ex))
1363- then eA
1368+ func ht (eD,fn) = (eD + eO[fn])
1369+
1370+ let eF = hd
1371+ let eG = size(eF)
1372+ let eH = ""
1373+ func hu (eJ,eK) = if ((eK >= eG))
1374+ then eJ
1375+ else ht(eJ, eF[eK])
1376+
1377+ func hv (eJ,eK) = if ((eK >= eG))
1378+ then eJ
13641379 else throw("List size exceeds 25")
13651380
1366- ho(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1367- }
1368-
1369-
1370-func hp (hq) = {
1371- let fX = split(valueOrElse(getString(hq), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1372-[toString(valueOrElse(parseInt(fX[bf]), 0)), if ((size(split(fX[bg], "_")) == aD))
1373- then fX[bg]
1374- else "0_0_0_0_0_0", if ((size(split(fX[bh], "_")) == aD))
1375- then fX[bh]
1376- else "0_0_0_0_0_0", fX[bi]]
1377- }
1378-
1379-
1380-func hr (hs) = {
1381- let eS = split(hs, "_")
1382- ((aH * (parseIntValue(eS[1]) + 1)) * parseIntValue(eS[0]))
1383- }
1384-
1385-
1386-func ht (hu) = {
1387- let hv = hu[aZ]
1388- func hw (eu,hx) = (eu + parseIntValue(hx))
1389-
1390- func hy (eu,hx) = {
1391- let cN = eu._1
1392- let en = (((parseIntValue(hx) + aV) - 1) / aV)
1393- $Tuple2((cN + 1), (eu._2 + (en * cr)))
1381+ hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1382+ }
1383+
1384+
1385+func hw (hx) = {
1386+ let gg = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1387+[toString(valueOrElse(parseInt(gg[bg]), 0)), if ((size(split(gg[bh], "_")) == aF))
1388+ then gg[bh]
1389+ else "0_0_0_0_0_0", if ((size(split(gg[bi], "_")) == aF))
1390+ then gg[bi]
1391+ else "0_0_0_0_0_0", gg[bj]]
1392+ }
1393+
1394+
1395+func hy (hz) = {
1396+ let fb = split(hz, "_")
1397+ ((aI * (parseIntValue(fb[1]) + 1)) * parseIntValue(fb[0]))
1398+ }
1399+
1400+
1401+func hA (hB) = {
1402+ let hC = hB[ba]
1403+ func hD (eD,hE) = (eD + parseIntValue(hE))
1404+
1405+ func hF (eD,hE) = {
1406+ let cP = eD._1
1407+ let ew = (((parseIntValue(hE) + aW) - 1) / aW)
1408+ $Tuple2((cP + 1), (eD._2 + (ew * ct)))
13941409 }
13951410
1396- let hz = {
1397- let ew = split(hu[aX], "_")
1398- let ex = size(ew)
1399- let ey = 0
1400- func ez (eA,eB) = if ((eB >= ex))
1401- then eA
1402- else hw(eA, ew[eB])
1403-
1404- func eC (eA,eB) = if ((eB >= ex))
1405- then eA
1411+ let hG = {
1412+ let eF = split(hB[aY], "_")
1413+ let eG = size(eF)
1414+ let eH = 0
1415+ func eI (eJ,eK) = if ((eK >= eG))
1416+ then eJ
1417+ else hD(eJ, eF[eK])
1418+
1419+ func eL (eJ,eK) = if ((eK >= eG))
1420+ then eJ
14061421 else throw("List size exceeds 6")
14071422
1408- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1423+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
14091424 }
1410- let hA = {
1411- let ew = split(hu[aY], "_")
1412- let ex = size(ew)
1413- let ey = 0
1414- func hk (eA,eB) = if ((eB >= ex))
1415- then eA
1416- else hw(eA, ew[eB])
1417-
1418- func hl (eA,eB) = if ((eB >= ex))
1419- then eA
1425+ let hH = {
1426+ let eF = split(hB[aZ], "_")
1427+ let eG = size(eF)
1428+ let eH = 0
1429+ func hr (eJ,eK) = if ((eK >= eG))
1430+ then eJ
1431+ else hD(eJ, eF[eK])
1432+
1433+ func hs (eJ,eK) = if ((eK >= eG))
1434+ then eJ
14201435 else throw("List size exceeds 6")
14211436
1422- hl(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6)
1437+ hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
14231438 }
1424- let hB = if ((hv == ""))
1439+ let hI = if ((hC == ""))
14251440 then 0
1426- else ( let ew = split_4C(hv, "_")
1427- let ex = size(ew)
1428- let ey = $Tuple2(0, 0)
1429- func hn (eA,eB) = if ((eB >= ex))
1430- then eA
1431- else hy(eA, ew[eB])
1432-
1433- func ho (eA,eB) = if ((eB >= ex))
1434- then eA
1441+ else ( let eF = split_4C(hC, "_")
1442+ let eG = size(eF)
1443+ let eH = $Tuple2(0, 0)
1444+ func hu (eJ,eK) = if ((eK >= eG))
1445+ then eJ
1446+ else hF(eJ, eF[eK])
1447+
1448+ func hv (eJ,eK) = if ((eK >= eG))
1449+ then eJ
14351450 else throw("List size exceeds 50")
14361451
1437- ho(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1438- ((hz + hA) + hB)
1439- }
1440-
1441-
1442-func hC (hD,hE,hF) = {
1443- let hs = ((toString(hE) + "_") + toString(hF))
1444- let hG = hr(hs)
1445- let hH = valueOrElse(getString(hD), (hs + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1446- let hI = split_4C(hH, ":")
1447- let hJ = ht(hI)
1448- let hK = if ((5 > size(hI)))
1449- then makeString(["0", toString(hJ), toString((hG - hJ)), toString(hG)], "_")
1452+ hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1453+ ((hG + hH) + hI)
1454+ }
1455+
1456+
1457+func hJ (hK,hL,hM) = {
1458+ let hz = ((toString(hL) + "_") + toString(hM))
1459+ let hN = hy(hz)
1460+ let hO = valueOrElse(getString(hK), (hz + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1461+ let hP = split_4C(hO, ":")
1462+ let hQ = hA(hP)
1463+ let hR = if ((5 > size(hP)))
1464+ then makeString(["0", toString(hQ), toString((hN - hQ)), toString(hN)], "_")
14501465 else {
1451- let hL = split(hI[ba], "_")
1452- let hM = parseIntValue(hL[bb])
1453- let hN = if ((size(hL) > 1))
1454- then parseIntValue(hL[bc])
1455- else hJ
1456- makeString([toString(hM), toString(hN), toString(((hG - hM) - hN)), toString(hG)], "_")
1457- }
1458-[hI[aW], if ((size(split(hI[aX], "_")) == aD))
1459- then hI[aX]
1460- else "0_0_0_0_0_0", if ((size(split(hI[aY], "_")) == aD))
1461- then hI[aY]
1462- else "0_0_0_0_0_0", hI[aZ], hK]
1463- }
1464-
1465-
1466-func hO (hu) = {
1467- let hP = ht(hu)
1468- let hQ = parseIntValue(split(hu[ba], "_")[bb])
1469- ((hr(hu[aW]) - hP) - hQ)
1470- }
1471-
1472-
1473-func hR (hS,hu,hT) = if ((size(hS) != 3))
1466+ let hS = split(hP[bb], "_")
1467+ let hT = parseIntValue(hS[bc])
1468+ let hU = if ((size(hS) > 1))
1469+ then parseIntValue(hS[bd])
1470+ else hQ
1471+ makeString([toString(hT), toString(hU), toString(((hN - hT) - hU)), toString(hN)], "_")
1472+ }
1473+[hP[aX], if ((size(split(hP[aY], "_")) == aF))
1474+ then hP[aY]
1475+ else "0_0_0_0_0_0", if ((size(split(hP[aZ], "_")) == aF))
1476+ then hP[aZ]
1477+ else "0_0_0_0_0_0", hP[ba], hR]
1478+ }
1479+
1480+
1481+func hV (hB) = {
1482+ let hW = hA(hB)
1483+ let hX = parseIntValue(split(hB[bb], "_")[bc])
1484+ ((hy(hB[aX]) - hW) - hX)
1485+ }
1486+
1487+
1488+func hY (hZ,hB,ia) = if ((size(hZ) != 3))
14741489 then throw("cargoListStr should contain exactly 2 ':' separators")
14751490 else {
1476- let hU = split(hS[0], "_")
1477- let hV = split(hS[1], "_")
1478- let hW = if ((hS[2] == ""))
1491+ let ib = split(hZ[0], "_")
1492+ let ic = split(hZ[1], "_")
1493+ let id = if ((hZ[2] == ""))
14791494 then nil
1480- else split_4C(hS[2], "_")
1481- if ((size(hU) != aD))
1495+ else split_4C(hZ[2], "_")
1496+ if ((size(ib) != aF))
14821497 then throw("All 6 resources should be passed")
1483- else if ((size(hV) != aD))
1498+ else if ((size(ic) != aF))
14841499 then throw("All 6 materials should be passed")
14851500 else {
1486- let gC = hO(hu)
1487- let hX = split(hu[aX], "_")
1488- let hY = split(hu[aY], "_")
1489- let hZ = if ((hu[aZ] == ""))
1501+ let gL = hV(hB)
1502+ let ie = split(hB[aY], "_")
1503+ let if = split(hB[aZ], "_")
1504+ let ig = if ((hB[ba] == ""))
14901505 then nil
1491- else split_4C(hu[aZ], "_")
1492- let gA = split(hT[bg], "_")
1493- let ia = split(hT[bh], "_")
1494- let ib = if ((hT[bi] == ""))
1506+ else split_4C(hB[ba], "_")
1507+ let gJ = split(ia[bh], "_")
1508+ let ih = split(ia[bi], "_")
1509+ let ii = if ((ia[bj] == ""))
14951510 then nil
1496- else split_4C(hT[bi], "_")
1497- func ic (eu,hx) = {
1498- let gn = eu._1
1499- let id = parseIntValue(hx)
1500- let ie = parseIntValue(hX[gn])
1501- let if = parseIntValue(gA[gn])
1502- if ((id == 0))
1503- then $Tuple4((gn + 1), (eu._2 :+ hX[gn]), (eu._3 :+ gA[gn]), eu._4)
1504- else if ((id > 0))
1505- then if ((id > if))
1506- then throw((((("Attempt to take " + hx) + " from backpack, but only ") + toString(if)) + " available"))
1507- else $Tuple4((gn + 1), (eu._2 :+ toString((ie + id))), (eu._3 :+ toString((if - id))), (eu._4 + id))
1508- else if ((-(id) > ie))
1509- then throw((((("Attempt to take " + toString(-(id))) + " from warehouse, but only ") + toString(ie)) + " available"))
1510- else $Tuple4((gn + 1), (eu._2 :+ toString((ie + id))), (eu._3 :+ toString((if - id))), (eu._4 + id))
1511+ else split_4C(ia[bj], "_")
1512+ func ij (eD,hE) = {
1513+ let gw = eD._1
1514+ let ik = parseIntValue(hE)
1515+ let il = parseIntValue(ie[gw])
1516+ let im = parseIntValue(gJ[gw])
1517+ if ((ik == 0))
1518+ then $Tuple4((gw + 1), (eD._2 :+ ie[gw]), (eD._3 :+ gJ[gw]), eD._4)
1519+ else if ((ik > 0))
1520+ then if ((ik > im))
1521+ then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(im)) + " available"))
1522+ else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
1523+ else if ((-(ik) > il))
1524+ then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(il)) + " available"))
1525+ else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik))
15111526 }
15121527
1513- let eF = {
1514- let ew = hU
1515- let ex = size(ew)
1516- let ey = $Tuple4(0, nil, nil, 0)
1517- func ez (eA,eB) = if ((eB >= ex))
1518- then eA
1519- else ic(eA, ew[eB])
1520-
1521- func eC (eA,eB) = if ((eB >= ex))
1522- then eA
1528+ let eO = {
1529+ let eF = ib
1530+ let eG = size(eF)
1531+ let eH = $Tuple4(0, nil, nil, 0)
1532+ func eI (eJ,eK) = if ((eK >= eG))
1533+ then eJ
1534+ else ij(eJ, eF[eK])
1535+
1536+ func eL (eJ,eK) = if ((eK >= eG))
1537+ then eJ
15231538 else throw("List size exceeds 6")
15241539
1525- eC(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6)
1540+ eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6)
15261541 }
1527- func ig (eu,hx) = {
1528- let gn = eu._1
1529- let id = parseIntValue(hx)
1530- let ih = parseIntValue(hY[gn])
1531- let ii = parseIntValue(ia[gn])
1532- if ((id == 0))
1533- then $Tuple4((gn + 1), (eu._2 :+ hY[gn]), (eu._3 :+ ia[gn]), eu._4)
1534- else if ((id > 0))
1535- then if ((id > ii))
1536- then throw((((("Attempt to take " + hx) + " from backpack, but only ") + toString(ii)) + " available"))
1537- else $Tuple4((gn + 1), (eu._2 :+ toString((ih + id))), (eu._3 :+ toString((ii - id))), (eu._4 + id))
1538- else if ((-(id) > ih))
1539- then throw((((("Attempt to take " + toString(-(id))) + " from warehouse, but only ") + toString(ih)) + " available"))
1540- else $Tuple4((gn + 1), (eu._2 :+ toString((ih + id))), (eu._3 :+ toString((ii - id))), (eu._4 + id))
1542+ func in (eD,hE) = {
1543+ let gw = eD._1
1544+ let ik = parseIntValue(hE)
1545+ let io = parseIntValue(if[gw])
1546+ let ip = parseIntValue(ih[gw])
1547+ if ((ik == 0))
1548+ then $Tuple4((gw + 1), (eD._2 :+ if[gw]), (eD._3 :+ ih[gw]), eD._4)
1549+ else if ((ik > 0))
1550+ then if ((ik > ip))
1551+ then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(ip)) + " available"))
1552+ else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
1553+ else if ((-(ik) > io))
1554+ then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(io)) + " available"))
1555+ else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik))
15411556 }
15421557
1543- let fT = {
1544- let ew = hV
1545- let ex = size(ew)
1546- let ey = $Tuple4(0, nil, nil, eF._4)
1547- func hk (eA,eB) = if ((eB >= ex))
1548- then eA
1549- else ig(eA, ew[eB])
1550-
1551- func hl (eA,eB) = if ((eB >= ex))
1552- then eA
1558+ let gc = {
1559+ let eF = ic
1560+ let eG = size(eF)
1561+ let eH = $Tuple4(0, nil, nil, eO._4)
1562+ func hr (eJ,eK) = if ((eK >= eG))
1563+ then eJ
1564+ else in(eJ, eF[eK])
1565+
1566+ func hs (eJ,eK) = if ((eK >= eG))
1567+ then eJ
15531568 else throw("List size exceeds 6")
15541569
1555- hl(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6)
1570+ hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6)
15561571 }
1557- func ij (eu,hx) = {
1558- let gn = eu._1
1559- let id = parseIntValue(hx)
1560- let ik = if ((size(hZ) > gn))
1561- then parseIntValue(hZ[gn])
1572+ func iq (eD,hE) = {
1573+ let gw = eD._1
1574+ let ik = parseIntValue(hE)
1575+ let ir = if ((size(ig) > gw))
1576+ then parseIntValue(ig[gw])
15621577 else 0
1563- let il = if ((size(ib) > gn))
1564- then parseIntValue(ib[gn])
1578+ let is = if ((size(ii) > gw))
1579+ then parseIntValue(ii[gw])
15651580 else 0
1566- if ((id == 0))
1567- then $Tuple4((gn + 1), (eu._2 :+ toString(ik)), (eu._3 :+ toString(il)), eu._4)
1568- else if ((id > 0))
1569- then if ((id > il))
1570- then throw((((("Attempt to take " + hx) + " from backpack, but only ") + toString(il)) + " available"))
1581+ if ((ik == 0))
1582+ then $Tuple4((gw + 1), (eD._2 :+ toString(ir)), (eD._3 :+ toString(is)), eD._4)
1583+ else if ((ik > 0))
1584+ then if ((ik > is))
1585+ then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(is)) + " available"))
15711586 else {
1572- let fw = (ek((ik + id), aV) - ek(ik, aV))
1573- $Tuple4((gn + 1), (eu._2 :+ toString((ik + id))), (eu._3 :+ toString((il - id))), (eu._4 + fw))
1587+ let fF = (et((ir + ik), aW) - et(ir, aW))
1588+ $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
15741589 }
1575- else if ((-(id) > ik))
1576- then throw((((("Attempt to take " + toString(-(id))) + " from warehouse, but only ") + toString(ik)) + " available"))
1590+ else if ((-(ik) > ir))
1591+ then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(ir)) + " available"))
15771592 else {
1578- let fw = (ek((ik + id), aV) - ek(ik, aV))
1579- $Tuple4((gn + 1), (eu._2 :+ toString((ik + id))), (eu._3 :+ toString((il - id))), (eu._4 + fw))
1593+ let fF = (et((ir + ik), aW) - et(ir, aW))
1594+ $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF))
15801595 }
15811596 }
15821597
1583- let fX = if ((size(hW) != 0))
1598+ let gg = if ((size(id) != 0))
15841599 then {
1585- let ew = hW
1586- let ex = size(ew)
1587- let ey = $Tuple4(0, nil, nil, fT._4)
1588- func hn (eA,eB) = if ((eB >= ex))
1589- then eA
1590- else ij(eA, ew[eB])
1591-
1592- func ho (eA,eB) = if ((eB >= ex))
1593- then eA
1600+ let eF = id
1601+ let eG = size(eF)
1602+ let eH = $Tuple4(0, nil, nil, gc._4)
1603+ func hu (eJ,eK) = if ((eK >= eG))
1604+ then eJ
1605+ else iq(eJ, eF[eK])
1606+
1607+ func hv (eJ,eK) = if ((eK >= eG))
1608+ then eJ
15941609 else throw("List size exceeds 50")
15951610
1596- ho(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(hn(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1611+ hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
15971612 }
1598- else $Tuple4(0, hZ, ib, fT._4)
1599- let im = fX._4
1600- if ((im > gC))
1601- then throw((((("Attempt to put total " + toString(im)) + " stuff, but only ") + toString(gC)) + " warehouse space left"))
1602- else $Tuple7(makeString(eF._2, "_"), makeString(fT._2, "_"), makeString_2C(fX._2, "_"), makeString(eF._3, "_"), makeString(fT._3, "_"), makeString_2C(fX._3, "_"), im)
1613+ else $Tuple4(0, ig, ii, gc._4)
1614+ let it = gg._4
1615+ if ((it > gL))
1616+ then throw((((("Attempt to put total " + toString(it)) + " stuff, but only ") + toString(gL)) + " warehouse space left"))
1617+ else $Tuple7(makeString(eO._2, "_"), makeString(gc._2, "_"), makeString_2C(gg._2, "_"), makeString(eO._3, "_"), makeString(gc._3, "_"), makeString_2C(gg._3, "_"), it)
16031618 }
16041619 }
16051620
16061621
1607-func in (io,ip) = {
1608- let bJ = toString(io)
1609- let iq = gI(toBigInt(ip))
1610- let ir = valueOrElse(getInteger(dS()), (dR + 1))
1611- let dW = toString(ir)
1612- let gR = toInt((iq % dL))
1613- let gq = gP(iq, gR)
1614- let dg = aN[gR]
1615- let is = Issue(ej(dW, "S"), makeString([dW, "S", gq, dg], "_"), 1, 0, false)
1616- let bn = calculateAssetId(is)
1617- let it = toBase58String(bn)
1618- $Tuple2([IntegerEntry(dS(), (ir + 1)), is, StringEntry(dV(dW), it), StringEntry(bm(it), bJ), StringEntry(dY(dW), bJ), IntegerEntry(bw(it), 0), IntegerEntry(dX(it, bJ), 0), ScriptTransfer(io, 1, bn)], $Tuple2(it, dg))
1619- }
1620-
1621-
1622-func iu (bJ,iv,iw) = if (!(sigVerify_8Kb(iv, iw, dC)))
1622+func iu (iv,iw) = {
1623+ let bK = toString(iv)
1624+ let ix = gR(toBigInt(iw))
1625+ let iy = valueOrElse(getInteger(eb()), (ea + 1))
1626+ let ef = toString(iy)
1627+ let ha = toInt((ix % dU))
1628+ let gz = gY(ix, ha)
1629+ let di = aO[ha]
1630+ let iz = Issue(es(ef, "S"), makeString([ef, "S", gz, di], "_"), 1, 0, false)
1631+ let bo = calculateAssetId(iz)
1632+ let iA = toBase58String(bo)
1633+ $Tuple2([IntegerEntry(eb(), (iy + 1)), iz, StringEntry(ee(ef), iA), StringEntry(bn(iA), bK), StringEntry(eh(ef), bK), IntegerEntry(bx(iA), 0), IntegerEntry(eg(iA, bK), 0), ScriptTransfer(iv, 1, bo)], $Tuple2(iA, di))
1634+ }
1635+
1636+
1637+func iB (bK,iC,iD) = if (!(sigVerify_8Kb(iC, iD, dK)))
16231638 then throw("signature does not match")
16241639 else {
1625- let eS = split_4C(toUtf8String(iv), ";")
1626- let ix = split_4C(eS[0], "|")
1627- let iy = split(ix[ef], "_")
1628- let iz = parseIntValue(iy[0])
1629- let iA = parseIntValue(iy[1])
1630- let iB = split(eS[1], ":")
1631- let iC = iB[0]
1632- let iD = parseIntValue(ix[eg])
1633- if (if ((iD > (lastBlock.timestamp + dE)))
1640+ let fb = split_4C(toUtf8String(iC), ";")
1641+ let iE = split_4C(fb[0], "|")
1642+ let iF = split(iE[eo], "_")
1643+ let iG = parseIntValue(iF[0])
1644+ let iH = parseIntValue(iF[1])
1645+ let iI = split(fb[1], ":")
1646+ let iJ = iI[0]
1647+ let iK = parseIntValue(iE[ep])
1648+ if (if ((iK > (lastBlock.timestamp + dM)))
16341649 then true
1635- else ((lastBlock.timestamp - dE) > iD))
1636- then throw(((("signature outdated: logTime=" + toString(iD)) + ", bcTime=") + toString(lastBlock.timestamp)))
1650+ else ((lastBlock.timestamp - dM) > iK))
1651+ then throw(((("signature outdated: logTime=" + toString(iK)) + ", bcTime=") + toString(lastBlock.timestamp)))
16371652 else {
1638- let iE = iB[1]
1639- let iF = valueOrElse(getString(dt(bJ)), "")
1640- if ((iF != iE))
1641- then throw(((("Tx ids don't match! In state: " + iF) + ", in msg: ") + iE))
1653+ let iL = iI[1]
1654+ let iM = valueOrElse(getString(dv(bK)), "")
1655+ if ((iM != iL))
1656+ then throw(((("Tx ids don't match! In state: " + iM) + ", in msg: ") + iL))
16421657 else {
1643- let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked")
1644- let iG = y(z)
1645- let iH = ae(valueOrElse(getInteger(C(z)), 0))
1646- let iI = valueOrElse(getInteger(iG), iH)
1647- if ((iI != iz))
1648- then throw(((("oldHealth=" + toString(iI)) + " from state does not match one from flight log=") + toString(iz)))
1649- else if ((0 >= iz))
1658+ let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
1659+ let iN = z(A)
1660+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
1661+ let iP = valueOrElse(getInteger(iN), iO)
1662+ if ((iP != iG))
1663+ then throw(((("oldHealth=" + toString(iP)) + " from state does not match one from flight log=") + toString(iG)))
1664+ else if ((0 >= iG))
16501665 then throw("You can't fly with zero health")
1651- else if (!(fZ(z)))
1666+ else if (!(gi(A)))
16521667 then throw("Equipment incompatible")
16531668 else {
1654- let iJ = if ((size(ix) > eh))
1655- then ix[eh]
1669+ let iQ = if ((size(iE) > eq))
1670+ then iE[eq]
16561671 else ""
1657- let iK = if ((size(ix) > ei))
1658- then ix[ei]
1672+ let iR = if ((size(iE) > er))
1673+ then iE[er]
16591674 else ""
1660- let iL = if (if ((iA > 0))
1661- then (iJ == "$")
1675+ let iS = if (if ((iH > 0))
1676+ then (iQ == "$")
16621677 else false)
1663- then dm(invoke(cO, "sendUsdtPrize", [bJ], nil))
1678+ then do(invoke(cQ, "sendUsdtPrize", [bK], nil))
16641679 else 0
1665- $Tuple5(iA, z, iL, iC, iK)
1680+ $Tuple5(iH, A, iS, iJ, iR)
16661681 }
16671682 }
16681683 }
16691684 }
16701685
16711686
1672-func iM (O,iN) = {
1673- let hF = valueOrElse(getInteger(bw(O)), 0)
1674- let iO = valueOrElse(getInteger(bq(aC, O)), 0)
1675- let iP = (hF / 6)
1676- let iQ = (hF / 7)
1677- ((aF + fraction(aF, ((hF + iP) + (2 * iQ)), 5)) + fraction(aF, iO, (iN * 5)))
1678- }
1679-
1680-
1681-func iR (b,iS,iT) = {
1682- let iU = if ((iS == ec))
1683- then $Tuple2(iT, valueOrElse(getString(bF(b)), ""))
1687+func iT (P,iU) = {
1688+ let hM = valueOrElse(getInteger(bx(P)), 0)
1689+ let iV = valueOrElse(getInteger(br(aE, P)), 0)
1690+ let iW = (hM / 6)
1691+ let iX = (hM / 7)
1692+ ((aH + fraction(aH, ((hM + iW) + (2 * iX)), 5)) + fraction(aH, iV, (iU * 5)))
1693+ }
1694+
1695+
1696+func iY (c,iZ,ja) = {
1697+ let jb = if ((iZ == el))
1698+ then $Tuple2(ja, valueOrElse(getString(bG(c)), ""))
16841699 else {
1685- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
1686- let iV = valueOrElse(getString(bH(z)), aI)
1687- let cc = split(value(iV), "_")
1688- if ((cc[bk] != "L"))
1689- then throw((("Duck location type is " + cc[bk]) + ", but should be L"))
1690- else $Tuple2(cc[bl], z)
1691- }
1692- let O = iU._1
1693- let iW = iU._2
1694- let iX = value(assetInfo(fromBase58String(O)))
1695- let iY = bp(O)
1696- let iZ = valueOrErrorMessage(getInteger(iY), (("Land " + iX.name) + " is not staked"))
1697- let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned"))
1698- if ((ja != b))
1699- then throw((aA + " is not yours"))
1700+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1701+ let jc = valueOrElse(getString(bI(A)), aJ)
1702+ let ce = split(value(jc), "_")
1703+ if ((ce[bl] != "L"))
1704+ then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
1705+ else $Tuple2(ce[bm], A)
1706+ }
1707+ let P = jb._1
1708+ let jd = jb._2
1709+ let je = value(assetInfo(fromBase58String(P)))
1710+ let jf = bq(P)
1711+ let jg = valueOrErrorMessage(getInteger(jf), (("Land " + je.name) + " is not staked"))
1712+ let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1713+ if ((jh != c))
1714+ then throw((aC + " is not yours"))
17001715 else {
1701- let jb = split(iX.description, "_")
1702- $Tuple4(iW, O, jb, iZ)
1703- }
1704- }
1705-
1706-
1707-func jc (b,el,iS,iT) = if ((0 > el))
1716+ let ji = split(je.description, "_")
1717+ $Tuple4(jd, P, ji, jg)
1718+ }
1719+ }
1720+
1721+
1722+func jj (c,eu,iZ,ja) = if ((0 > eu))
17081723 then throw("Negative amount")
17091724 else {
1710- let fD = iR(b, iS, iT)
1711- let dq = fD._3[cV]
1712- let gj = gp(fD._3[cW])
1713- let gt = (lastBlock.timestamp - fD._4)
1714- if ((0 > gt))
1715- then throw(((("Saved timestamp is in future, saved = " + toString(fD._4)) + ", current = ") + toString(lastBlock.timestamp)))
1725+ let fM = iY(c, iZ, ja)
1726+ let ds = fM._3[cX]
1727+ let gs = gy(fM._3[cY])
1728+ let gC = (lastBlock.timestamp - fM._4)
1729+ if ((0 > gC))
1730+ then throw(((("Saved timestamp is in future, saved = " + toString(fM._4)) + ", current = ") + toString(lastBlock.timestamp)))
17161731 else {
1717- let iN = dp(dq)
1718- let jd = iM(fD._2, iN)
1719- let je = fraction(gt, (jd * iN), aG)
1720- if ((el > je))
1721- then throw(((("Not enough resources, available = " + toString(je)) + ", requested = ") + toString(el)))
1732+ let iU = dr(ds)
1733+ let jk = iT(fM._2, iU)
1734+ let jl = fraction(gC, (jk * iU), a)
1735+ if ((eu > jl))
1736+ then throw(((("Not enough resources, available = " + toString(jl)) + ", requested = ") + toString(eu)))
17221737 else {
1723- let jf = fraction((je - el), aG, (jd * iN))
1724- let jg = (lastBlock.timestamp - jf)
1725- let hE = (iN / cs)
1726- let gB = gx(gj, (gt - jf), hE, jd)
1727- let hD = bv(fD._2)
1728- let hF = valueOrElse(getInteger(bw(fD._2)), 0)
1729- let hu = hC(hD, hE, hF)
1730- let hL = split(hu[ba], "_")
1731- let gC = parseIntValue(hL[bd])
1732- if (if ((iS == ec))
1733- then (el > gC)
1738+ let jm = fraction((jl - eu), a, (jk * iU))
1739+ let jn = (lastBlock.timestamp - jm)
1740+ let hL = (iU / cu)
1741+ let gK = gG(gs, (gC - jm), hL, jk)
1742+ let hK = bw(fM._2)
1743+ let hM = valueOrElse(getInteger(bx(fM._2)), 0)
1744+ let hB = hJ(hK, hL, hM)
1745+ let hS = split(hB[bb], "_")
1746+ let gL = parseIntValue(hS[be])
1747+ if (if ((iZ == el))
1748+ then (eu > gL)
17341749 else false)
1735- then throw((("Only " + toString(gC)) + " space left in warehouse"))
1750+ then throw((("Only " + toString(gL)) + " space left in warehouse"))
17361751 else {
1737- let hq = bG(fD._1)
1738- let hT = hp(hq)
1739- let gA = split(hT[bg], "_")
1740- let gz = split(hu[aX], "_")
1741- let jh = if ((iS == ec))
1742- then $Tuple4(gr(gz, gj, (gt - jf), hE, jd), hT[bg], (parseIntValue(hL[bc]) + gB._2), (parseIntValue(hL[bd]) - gB._2))
1743- else if ((iS == ed))
1744- then $Tuple4(hu[aX], gr(gA, gj, (gt - jf), hE, jd), parseIntValue(hL[bc]), parseIntValue(hL[bd]))
1752+ let hx = bH(fM._1)
1753+ let ia = hw(hx)
1754+ let gJ = split(ia[bh], "_")
1755+ let gI = split(hB[aY], "_")
1756+ let jo = if ((iZ == el))
1757+ then $Tuple4(gA(gI, gs, (gC - jm), hL, jk), ia[bh], (parseIntValue(hS[bd]) + gK._2), (parseIntValue(hS[be]) - gK._2))
1758+ else if ((iZ == em))
1759+ then $Tuple4(hB[aY], gA(gJ, gs, (gC - jm), hL, jk), parseIntValue(hS[bd]), parseIntValue(hS[be]))
17451760 else {
1746- let ji = gy(gz, gA, gB, gC)
1747- let jj = min([parseIntValue(hL[bd]), gB._2])
1748- $Tuple4(ji._1, ji._2, (parseIntValue(hL[bc]) + jj), (parseIntValue(hL[bd]) - jj))
1761+ let jp = gH(gI, gJ, gK, gL)
1762+ let jq = min([parseIntValue(hS[be]), gK._2])
1763+ $Tuple4(jp._1, jp._2, (parseIntValue(hS[bd]) + jq), (parseIntValue(hS[be]) - jq))
17491764 }
1750- let jk = jh._1
1751- let jl = jh._2
1752- let jm = jh._3
1753- let jn = jh._4
1754- $Tuple5([IntegerEntry(bp(fD._2), jg), IntegerEntry(bs(aA, fD._2, b), jg)], hq, [hT[bf], jl, hT[bh], hT[bi]], hD, [hu[aW], jk, hu[aY], hu[aZ], makeString([hL[bb], toString(jm), toString(jn), hL[be]], "_")])
1765+ let jr = jo._1
1766+ let js = jo._2
1767+ let jt = jo._3
1768+ let ju = jo._4
1769+ $Tuple5([IntegerEntry(bq(fM._2), jn), IntegerEntry(bt(aC, fM._2, c), jn)], hx, [ia[bg], js, ia[bi], ia[bj]], hK, [hB[aX], jr, hB[aZ], hB[ba], makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")])
17551770 }
17561771 }
17571772 }
17581773 }
17591774
17601775
1761-func jo (b,O,iN,iS) = {
1762- let iY = bp(O)
1763- let iZ = value(getInteger(iY))
1764- let je = (fraction((lastBlock.timestamp - iZ), iM(O, iN), aG) * iN)
1765- jc(b, je, iS, O)
1766- }
1767-
1768-
1769-func jp (eH,io,jq,O) = {
1770- let b = toString(io)
1771- let fD = iR(b, ee, O)
1772- let iN = dp(fD._3[cV])
1773- let jr = bw(fD._2)
1774- let js = valueOrElse(getInteger(jr), 0)
1775- if (if (!(ch))
1776- then (js >= 3)
1776+func jv (c,P,iU,iZ) = {
1777+ let jf = bq(P)
1778+ let jg = value(getInteger(jf))
1779+ let jl = (fraction((lastBlock.timestamp - jg), iT(P, iU), a) * iU)
1780+ jj(c, jl, iZ, P)
1781+ }
1782+
1783+
1784+func jw (eQ,iv,jx,P) = {
1785+ let c = toString(iv)
1786+ let fM = iY(c, en, P)
1787+ let iU = dr(fM._3[cX])
1788+ let jy = bx(fM._2)
1789+ let jz = valueOrElse(getInteger(jy), 0)
1790+ if (if (!(cj))
1791+ then (jz >= 3)
17771792 else false)
17781793 then throw("Currently max infrastructure level = 3")
17791794 else {
1780- let jt = ((sqrt(iN, 0, 0, DOWN) / 5) + 2)
1781- let aj = (js + 1)
1782- if (if (ch)
1783- then (aj > jt)
1795+ let jA = ((sqrt(iU, 0, 0, DOWN) / 5) + 2)
1796+ let al = (jz + 1)
1797+ if (if (cj)
1798+ then (al > jA)
17841799 else false)
1785- then throw(("Currently max infrastructure level = " + toString(jt)))
1800+ then throw(("Currently max infrastructure level = " + toString(jA)))
17861801 else {
1787- let ju = fraction(dH, (iN * aj), cs)
1788- if (if (!(eH))
1789- then (jq != ju)
1802+ let jB = fraction(dQ, (iU * al), cu)
1803+ if (if (!(eQ))
1804+ then (jx != jB)
17901805 else false)
1791- then throw(("Payment attached should be " + toString(ju)))
1806+ then throw(("Payment attached should be " + toString(jB)))
17921807 else {
1793- let hq = bG(fD._1)
1794- let hT = hp(hq)
1795- let jv = split(hT[bh], "_")
1796- let jw = fraction(cn, (iN * aj), cs)
1797- let jx = makeString(eG(eH, jv, jw), "_")
1798- let jy = jo(b, fD._2, iN, ee)
1799- let jz = jy._5
1800- let jA = hr(jz[aW])
1801- let jB = makeString([split(jz[aW], "_")[0], toString(aj)], "_")
1802- let jC = hr(jB)
1803- let hL = split(jz[ba], "_")
1804- let jD = makeString([hL[bb], hL[bc], toString(((parseIntValue(hL[bd]) + jC) - jA)), toString(jC)], "_")
1805- $Tuple3(([IntegerEntry(jr, aj), IntegerEntry(dX(fD._2, b), aj), StringEntry(hq, makeString([hT[bf], jy._3[bg], jx, hT[bi]], ":")), StringEntry(jy._4, makeString([jB, jz[aX], jz[aY], jz[aZ], jD], ":"))] ++ jy._1), aj, jw)
1808+ let hx = bH(fM._1)
1809+ let ia = hw(hx)
1810+ let jC = split(ia[bi], "_")
1811+ let jD = fraction(cp, (iU * al), cu)
1812+ let jE = makeString(eP(eQ, jC, jD), "_")
1813+ let jF = jv(c, fM._2, iU, en)
1814+ let jG = jF._5
1815+ let jH = hy(jG[aX])
1816+ let jI = makeString([split(jG[aX], "_")[0], toString(al)], "_")
1817+ let jJ = hy(jI)
1818+ let hS = split(jG[bb], "_")
1819+ let jK = makeString([hS[bc], hS[bd], toString(((parseIntValue(hS[be]) + jJ) - jH)), toString(jJ)], "_")
1820+ $Tuple3(([IntegerEntry(jy, al), IntegerEntry(eg(fM._2, c), al), StringEntry(hx, makeString([ia[bg], jF._3[bh], jE, ia[bj]], ":")), StringEntry(jF._4, makeString([jI, jG[aY], jG[aZ], jG[ba], jK], ":"))] ++ jF._1), al, jD)
18061821 }
18071822 }
18081823 }
18091824 }
18101825
18111826
1812-func jE (z,jF) = {
1813- let jG = C(z)
1814- let jH = B(z)
1815- let ad = valueOrElse(getInteger(al, jH), 0)
1816- let ai = (ad + jF)
1817- let jI = ag(valueOrElse(getInteger(al, jG), 0), ai)
1818- let jJ = D(z)
1819- $Tuple2([IntegerEntry(jG, jI[0]), IntegerEntry(jH, ai), IntegerEntry(jJ, (valueOrElse(getInteger(jJ), 0) + jI[1]))], ai)
1820- }
1821-
1822-
1823-func jK (b,jF) = {
1824- let jG = G(b)
1825- let jH = F(b)
1826- let ad = valueOrElse(getInteger(al, jH), 0)
1827- let ai = (ad + jF)
1828- let jI = ag(valueOrElse(getInteger(al, jG), 0), ai)
1829- let jJ = H(b)
1830- $Tuple2([IntegerEntry(jG, jI[0]), IntegerEntry(jH, ai), IntegerEntry(jJ, (valueOrElse(getInteger(jJ), 0) + jI[1]))], ai)
1831- }
1832-
1833-
1834-func jL (b) = {
1835- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
1836- let jM = bA(b)
1837- let jN = getString(jM)
1838- if (!(isDefined(jN)))
1827+func jL (A,jM) = {
1828+ let jN = D(A)
1829+ let jO = C(A)
1830+ let af = valueOrElse(getInteger(an, jO), 0)
1831+ let ak = (af + jM)
1832+ let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1833+ let jQ = E(A)
1834+ $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1835+ }
1836+
1837+
1838+func jR (c,jM) = {
1839+ let jN = H(c)
1840+ let jO = G(c)
1841+ let af = valueOrElse(getInteger(an, jO), 0)
1842+ let ak = (af + jM)
1843+ let jP = ai(valueOrElse(getInteger(an, jN), 0), ak)
1844+ let jQ = I(c)
1845+ $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak)
1846+ }
1847+
1848+
1849+func jS (c) = {
1850+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1851+ let jT = bB(c)
1852+ let jU = getString(jT)
1853+ if (!(isDefined(jU)))
18391854 then throw("You are not eligible for ONBOARD artifact")
18401855 else {
1841- let jO = bC(b)
1842- let jP = getString(jO)
1843- if (isDefined(jP))
1844- then throw(("You already used your ONBOARD artifact on duck " + value(jP)))
1856+ let jV = bD(c)
1857+ let jW = getString(jV)
1858+ if (isDefined(jW))
1859+ then throw(("You already used your ONBOARD artifact on duck " + value(jW)))
18451860 else {
1846- let jQ = bB(z)
1847- let jR = getString(jQ)
1848- if (isDefined(jR))
1849- then throw(((("The duck " + z) + " already got points from ONBOARD artifact from user ") + value(jR)))
1850- else ([StringEntry(jO, z), StringEntry(jQ, b)] ++ jE(z, aa)._1)
1861+ let jX = bC(A)
1862+ let jY = getString(jX)
1863+ if (isDefined(jY))
1864+ then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(jY)))
1865+ else ([StringEntry(jV, A), StringEntry(jX, c)] ++ jL(A, ac)._1)
18511866 }
18521867 }
18531868 }
18541869
18551870
1856-func jS (b,iT) = {
1857- let fD = iR(b, ee, iT)
1858- let O = fD._2
1859- let iN = dp(fD._3[cV])
1860- let jT = bq(aC, O)
1861- if ((valueOrElse(getInteger(jT), 0) > 0))
1871+func jZ (c,ja) = {
1872+ let fM = iY(c, en, ja)
1873+ let P = fM._2
1874+ let iU = dr(fM._3[cX])
1875+ let ka = br(aE, P)
1876+ if ((valueOrElse(getInteger(ka), 0) > 0))
18621877 then throw("Presale artifact is already activated")
1863- else if ((parseIntValue(fD._3[cU]) > dR))
1864- then throw((((aA + " ") + O) + " is not eligible for presale artifact"))
1878+ else if ((parseIntValue(fM._3[cW]) > ea))
1879+ then throw((((aC + " ") + P) + " is not eligible for presale artifact"))
18651880 else {
1866- let jy = jo(b, O, iN, ee)
1867- (((jy._1 :+ IntegerEntry(jT, iN)) :+ StringEntry(jy._2, makeString(jy._3, ":"))) :+ StringEntry(jy._4, makeString(jy._5, ":")))
1881+ let jF = jv(c, P, iU, en)
1882+ (((jF._1 :+ IntegerEntry(ka, iU)) :+ StringEntry(jF._2, makeString(jF._3, ":"))) :+ StringEntry(jF._4, makeString(jF._5, ":")))
18681883 }
18691884 }
18701885
18711886
1872-func jU (z) = {
1873- let cb = valueOrElse(getInteger(cS, bM), 0)
1874- let iV = split(valueOrElse(getString(bH(z)), aI), "_")
1875- let av = lastBlock.timestamp
1876- let cd = bV(cS, cb)
1877- let bX = cd[bR]
1878- let bY = cd[bS]
1879- if ((iV[bk] != "T"))
1887+func kb (A) = {
1888+ let cd = valueOrElse(getInteger(cU, bO), 0)
1889+ let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1890+ let ax = lastBlock.timestamp
1891+ let cf = bX(cU, cd)
1892+ let bZ = cf[bT]
1893+ let ca = cf[bU]
1894+ if ((jc[bl] != "T"))
18801895 then false
1881- else if (if (if ((parseIntValue(iV[bj]) == cb))
1882- then (bY[bU] == "INPROGRESS")
1896+ else if (if (if ((parseIntValue(jc[bk]) == cd))
1897+ then (ca[bW] == "INPROGRESS")
18831898 else false)
1884- then (parseIntValue(bX[bT]) > av)
1899+ then (parseIntValue(bZ[bV]) > ax)
18851900 else false)
18861901 then throw("Your duck is taking part in the tournament")
1887- else do(invoke(this, "exitTournamentInternal", [z], nil))
1888- }
1889-
1890-
1891-func jV (jW,aj,jX,b,jY,jZ) = {
1892- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
1893- if (jU(z))
1902+ else dq(invoke(this, "exitTournamentInternal", [A], nil))
1903+ }
1904+
1905+
1906+func kc (A) = {
1907+ let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
1908+ let ax = lastBlock.timestamp
1909+ if ((jc[bl] != "D"))
1910+ then false
1911+ else {
1912+ let kd = parseIntValue(jc[bk])
1913+ let ke = parseIntValue(jc[bm])
1914+ if (if ((ax > (kd + dN)))
1915+ then (3 > ke)
1916+ else false)
1917+ then throw("Your duck is on delivery mission")
1918+ else dq(invoke(this, "exitDeliveryInternal", [A], nil))
1919+ }
1920+ }
1921+
1922+
1923+func kf (kg,al,kh,c,ki,kj) = {
1924+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
1925+ if (kb(A))
18941926 then throw("mergeInternal_checkTournament")
1927+ else if (kc(A))
1928+ then throw("mergeInternal_checkDelivery")
1929+ else {
1930+ func kk (eD,P) = {
1931+ let je = value(assetInfo(fromBase58String(P)))
1932+ let jf = bq(P)
1933+ let jg = valueOrErrorMessage(getInteger(jf), (("NFT " + je.name) + " is not staked"))
1934+ let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
1935+ if ((jh != c))
1936+ then throw((aC + " is not yours"))
1937+ else {
1938+ let ji = split(je.description, "_")
1939+ let di = ji[cZ]
1940+ if (if ((eD._3 != ""))
1941+ then (eD._3 != di)
1942+ else false)
1943+ then throw("Lands should be on the same continent to merge")
1944+ else {
1945+ let ds = ji[cX]
1946+ let kl = eD._1
1947+ let gw = valueOrErrorMessage(indexOf(kl, ds), "You haven't passed all the lands needed")
1948+ let km = (take(kl, gw) + drop(kl, (gw + 1)))
1949+ let iU = dr(ds)
1950+ let kn = (eD._2 + valueOrElse(getInteger(br(aE, P)), 0))
1951+ let hM = valueOrElse(getInteger(bx(P)), 0)
1952+ let ko = {
1953+ let cn = ds
1954+ if (("S" == cn))
1955+ then 3
1956+ else if (("M" == cn))
1957+ then 4
1958+ else if (("L" == cn))
1959+ then 5
1960+ else if (("XL" == cn))
1961+ then 6
1962+ else throw("Only S, M, L, XL can merge")
1963+ }
1964+ if ((hM != ko))
1965+ then throw("All lands should be maxed to merge")
1966+ else {
1967+ let ef = ji[cW]
1968+ let gs = gy(ji[cY])
1969+ let gC = (lastBlock.timestamp - jg)
1970+ if ((0 > gC))
1971+ then throw(((("Saved timestamp is in future, saved = " + toString(jg)) + ", current = ") + toString(lastBlock.timestamp)))
1972+ else {
1973+ let jk = iT(P, iU)
1974+ let hL = (iU / cu)
1975+ let js = gA(split(eD._4, "_"), gs, gC, hL, jk)
1976+ let eN = gq(eD._6, gs, hL, -1)
1977+ let kp = gq(eD._10, gs, hL, -1)
1978+ let hg = gq(eD._9, gs, hL, 1)
1979+ let kq = eD._7
1980+ let cP = indexOf(kq, P)
1981+ if (!(isDefined(cP)))
1982+ then throw(("Your staked lands don't contain " + P))
1983+ else {
1984+ let kr = bp(P)
1985+ let ks = valueOrElse(getString(kr), "")
1986+ $Tuple10(km, kn, di, js, ((((((((((((eD._5 :+ DeleteEntry(bq(P))) :+ DeleteEntry(bt(aC, P, c))) :+ DeleteEntry(ee(ef))) :+ DeleteEntry(bn(P))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(eg(P, c))) :+ DeleteEntry(br(aE, P))) :+ DeleteEntry(eh(ef))) :+ DeleteEntry(bw(P))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(P), 1)) ++ (if ((ks != ""))
1987+ then [DeleteEntry(ec(ks))]
1988+ else nil)), eN, removeByIndex(kq, value(cP)), (eD._8 + iU), hg, kp)
1989+ }
1990+ }
1991+ }
1992+ }
1993+ }
1994+ }
1995+
1996+ let hx = bH(A)
1997+ let ia = hw(hx)
1998+ let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1999+ let kt = dj(c)
2000+ let ku = getString(kt)
2001+ let kv = if (isDefined(ku))
2002+ then split_51C(value(ku), "_")
2003+ else nil
2004+ let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
2005+ let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
2006+ let eO = {
2007+ let eF = ki
2008+ let eG = size(eF)
2009+ let eH = $Tuple10(kh, 0, "", ia[bh], nil, gr, kv, 0, split("0_0_0_0_0_0", "_"), kx)
2010+ func eI (eJ,eK) = if ((eK >= eG))
2011+ then eJ
2012+ else kk(eJ, eF[eK])
2013+
2014+ func eL (eJ,eK) = if ((eK >= eG))
2015+ then eJ
2016+ else throw("List size exceeds 5")
2017+
2018+ eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2019+ }
2020+ let di = eO._3
2021+ let ha = valueOrErrorMessage(indexOf(aO, di), ("Unknown continent: " + di))
2022+ let gz = hf(eO._9, (dr(kg) / cu))
2023+ let iy = valueOrElse(getInteger(eb()), (ea + 1))
2024+ let ky = toString(iy)
2025+ let iz = Issue(es(ky, kg), makeString([ky, kg, gz, di], "_"), 1, 0, false)
2026+ let bo = calculateAssetId(iz)
2027+ let kz = toBase58String(bo)
2028+ let jE = makeString(eP((kj > 0), split(ia[bi], "_"), kj), "_")
2029+ let kA = dk(c)
2030+ let kB = valueOrElse(getInteger(kA), 0)
2031+ $Tuple2((((((((((((((((eO._5 :+ (if ((size(eO._7) > 0))
2032+ then StringEntry(kt, makeString_11C(eO._7, "_"))
2033+ else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eO._8 > kB))
2034+ then 0
2035+ else (kB - eO._8))) :+ IntegerEntry(eb(), (iy + 1))) :+ iz) :+ StringEntry(ee(ky), kz)) :+ StringEntry(bn(kz), c)) :+ StringEntry(eh(ky), c)) :+ IntegerEntry(br(aE, kz), eO._2)) :+ IntegerEntry(bx(kz), al)) :+ IntegerEntry(eg(kz, c), al)) :+ StringEntry(hx, makeString([ia[bg], eO._4, jE, ia[bj]], ":"))) :+ StringEntry(dg(), makeString(eO._6, "_"))) :+ StringEntry(dh(di), makeString(eO._10, "_"))) :+ StringEntry(bI(A), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bo)), kz)
2036+ }
2037+ }
2038+
2039+
2040+func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
2041+
2042+
2043+func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
2044+
2045+
2046+func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
2047+
2048+
2049+func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
2050+
2051+
2052+func kG (c,ki) = {
2053+ let cn = size(ki)
2054+ if ((4 == cn))
2055+ then kC(c, ki)
2056+ else if ((3 == cn))
2057+ then kD(c, ki)
2058+ else if ((5 == cn))
2059+ then kE(c, ki)
2060+ else if ((2 == cn))
2061+ then kF(c, ki)
2062+ else throw("Unknown merge")
2063+ }
2064+
2065+
2066+func kH (gw) = if (if ((gw.originCaller != cQ))
2067+ then valueOrElse(getBoolean(du()), false)
2068+ else false)
2069+ then throw("Contracts are under maintenance")
2070+ else StringEntry(dv(toString(gw.originCaller)), toBase58String(gw.transactionId))
2071+
2072+
2073+@Callable(gw)
2074+func constructorV1 (kI) = if ((gw.caller != this))
2075+ then throw("Permission denied")
2076+ else [StringEntry(cK(), kI)]
2077+
2078+
2079+
2080+@Callable(gw)
2081+func setBlocked (kJ) = if ((gw.caller != this))
2082+ then throw("permission denied")
2083+ else [BooleanEntry(du(), kJ)]
2084+
2085+
2086+
2087+@Callable(gw)
2088+func stakeLand () = {
2089+ let kK = kH(gw)
2090+ if ((size(gw.payments) != 1))
2091+ then throw("Exactly one payment required")
18952092 else {
1896- func ka (eu,O) = {
1897- let iX = value(assetInfo(fromBase58String(O)))
1898- let iY = bp(O)
1899- let iZ = valueOrErrorMessage(getInteger(iY), (("NFT " + iX.name) + " is not staked"))
1900- let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned"))
1901- if ((ja != b))
1902- then throw((aA + " is not yours"))
2093+ let kL = value(gw.payments[0])
2094+ let bo = value(kL.assetId)
2095+ let cB = toString(gw.caller)
2096+ if ((kL.amount != 1))
2097+ then throw((("NFT " + aC) + " token should be attached as payment"))
2098+ else {
2099+ let je = value(assetInfo(bo))
2100+ if ((je.issuer != this))
2101+ then throw("Unknown issuer of token")
2102+ else if (!(contains(je.name, aC)))
2103+ then throw((("Only NFT " + aC) + " tokens are accepted"))
2104+ else {
2105+ let kM = drop(je.name, 4)
2106+ let ef = if (contains(kM, "XXL"))
2107+ then dropRight(kM, 3)
2108+ else if (contains(kM, "XL"))
2109+ then dropRight(kM, 2)
2110+ else dropRight(kM, 1)
2111+ if (!(isDefined(parseInt(ef))))
2112+ then throw(("Cannot parse land number from " + je.name))
2113+ else {
2114+ let P = toBase58String(bo)
2115+ let jf = bq(P)
2116+ if (isDefined(getInteger(jf)))
2117+ then throw((("NFT " + je.name) + " is already staked"))
2118+ else {
2119+ let ji = split(je.description, "_")
2120+ let gs = gy(ji[cY])
2121+ let iU = dr(ji[cX])
2122+ let hL = (iU / cu)
2123+ let eN = gx(gs, hL, 1)
2124+ let kN = dh(ji[cZ])
2125+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2126+ let kO = makeString(gq(kx, gs, hL, 1), "_")
2127+ let kt = dj(cB)
2128+ let ku = getString(kt)
2129+ let kq = if (isDefined(ku))
2130+ then split_51C(value(ku), "_")
2131+ else nil
2132+ if (containsElement(kq, P))
2133+ then throw(("Your staked lands already contain " + P))
2134+ else if ((size(kq) >= aG))
2135+ then throw((("Your already staked max (" + toString(aG)) + ") lands"))
2136+ else {
2137+ let hM = valueOrElse(getInteger(bx(P)), 0)
2138+ let kA = dk(cB)
2139+ let kP = valueOrElse(getInteger(kA), 0)
2140+ let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2141+ $Tuple2([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aC, P, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ P), "_")), IntegerEntry(kA, (kP + iU)), StringEntry(bn(P), cB), StringEntry(eh(ef), cB), IntegerEntry(eg(P, cB), hM), StringEntry(dg(), eN), StringEntry(kN, kO), kK], kQ)
2142+ }
2143+ }
2144+ }
2145+ }
2146+ }
2147+ }
2148+ }
2149+
2150+
2151+
2152+@Callable(gw)
2153+func unstakeLand (ja) = {
2154+ let kK = kH(gw)
2155+ if ((size(gw.payments) != 0))
2156+ then throw("No payments required")
2157+ else {
2158+ let c = toString(gw.caller)
2159+ let fM = iY(c, em, ja)
2160+ let P = fM._2
2161+ let ji = fM._3
2162+ let kt = dj(c)
2163+ let gs = gy(ji[cY])
2164+ let iU = dr(ji[cX])
2165+ let hL = (iU / cu)
2166+ let eN = gx(gs, hL, -1)
2167+ let kN = dh(ji[cZ])
2168+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2169+ let kO = makeString(gq(kx, gs, hL, -1), "_")
2170+ let jF = jv(c, P, iU, em)
2171+ let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2172+ let cP = indexOf(kq, P)
2173+ if (!(isDefined(cP)))
2174+ then throw(("Your staked lands don't contain " + P))
2175+ else {
2176+ let ax = lastBlock.timestamp
2177+ let kR = valueOrElse(getInteger(cS, bJ(c)), 0)
2178+ if ((kR >= ax))
2179+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
2180+ else {
2181+ let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2182+ if ((kS > ax))
2183+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
2184+ else {
2185+ let kA = dk(c)
2186+ let kB = valueOrElse(getInteger(kA), 0)
2187+ let kT = if ((iU > kB))
2188+ then 0
2189+ else (kB - iU)
2190+ let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2191+ $Tuple2([ScriptTransfer(gw.caller, 1, fromBase58String(P)), DeleteEntry(bq(P)), DeleteEntry(bt(aC, P, c)), StringEntry(dg(), eN), StringEntry(kN, kO), StringEntry(jF._2, makeString(jF._3, ":")), if ((size(kq) > 1))
2192+ then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2193+ else DeleteEntry(kt), IntegerEntry(kA, kT), kK], kQ)
2194+ }
2195+ }
2196+ }
2197+ }
2198+ }
2199+
2200+
2201+
2202+@Callable(gw)
2203+func stakeDuck () = {
2204+ let kK = kH(gw)
2205+ if ((size(gw.payments) != 1))
2206+ then throw("Exactly one payment required")
2207+ else {
2208+ let kL = value(gw.payments[0])
2209+ let bo = value(kL.assetId)
2210+ let cB = toString(gw.caller)
2211+ if ((kL.amount != 1))
2212+ then throw((("NFT " + aD) + " token should be attached as payment"))
2213+ else {
2214+ let je = value(assetInfo(bo))
2215+ if (if ((je.issuer != dI))
2216+ then (je.issuer != dJ)
2217+ else false)
2218+ then throw((("Unknown issuer of " + aD) + " token"))
2219+ else if (!(contains(je.name, aD)))
2220+ then throw((("Only NFT " + aD) + " tokens are accepted"))
2221+ else {
2222+ let kU = toBase58String(bo)
2223+ let jf = bq(kU)
2224+ if (isDefined(getInteger(jf)))
2225+ then throw((("NFT " + je.name) + " is already staked"))
2226+ else if (isDefined(getString(bG(cB))))
2227+ then throw(("You already staked one duck: " + je.name))
2228+ else {
2229+ let kV = bI(kU)
2230+ let cc = getString(kV)
2231+ let hx = bH(kU)
2232+ let kW = getString(hx)
2233+ let iN = z(kU)
2234+ let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2235+ let kX = valueOrElse(getInteger(iN), iO)
2236+ ([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aD, toBase58String(bo), cB), lastBlock.timestamp), StringEntry(bF(kU), cB), StringEntry(bG(cB), kU)] ++ (if (isDefined(cc))
2237+ then nil
2238+ else ([StringEntry(kV, aJ)] ++ (if (isDefined(kW))
2239+ then nil
2240+ else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iN, kX)) :+ kK)))))
2241+ }
2242+ }
2243+ }
2244+ }
2245+ }
2246+
2247+
2248+
2249+@Callable(gw)
2250+func unstakeDuck (kU) = {
2251+ let kK = kH(gw)
2252+ if ((size(gw.payments) != 0))
2253+ then throw("No payments required")
2254+ else {
2255+ let bo = fromBase58String(kU)
2256+ let cB = toString(gw.caller)
2257+ let je = value(assetInfo(bo))
2258+ let jf = bq(kU)
2259+ if (!(isDefined(getInteger(jf))))
2260+ then throw((("NFT " + je.name) + " is not staked"))
2261+ else if (!(isDefined(getString(bG(cB)))))
2262+ then throw((("The duck " + je.name) + " is not staked"))
19032263 else {
1904- let jb = split(iX.description, "_")
1905- let dg = jb[cX]
1906- if (if ((eu._3 != ""))
1907- then (eu._3 != dg)
1908- else false)
1909- then throw("Lands should be on the same continent to merge")
2264+ let jh = valueOrErrorMessage(getString(bF(kU)), (("NFT " + je.name) + " is orphaned"))
2265+ if ((jh != cB))
2266+ then throw("Staked NFT is not yours")
2267+ else if (kb(kU))
2268+ then throw("unstakeDuck_checkTournament")
2269+ else if (kc(kU))
2270+ then throw("unstakeDuck_checkDelivery")
2271+ else {
2272+ let iN = z(kU)
2273+ let iO = ag(valueOrElse(getInteger(D(kU)), 0))
2274+ let as = valueOrElse(getInteger(iN), iO)
2275+ if ((iO > as))
2276+ then throw((("Please heal your duck to " + toString(iO)) + "hp before unstaking"))
2277+ else [ScriptTransfer(gw.caller, 1, bo), DeleteEntry(jf), DeleteEntry(iN), DeleteEntry(bI(kU)), DeleteEntry(bF(kU)), DeleteEntry(bt(aD, kU, cB)), DeleteEntry(bG(cB)), kK]
2278+ }
2279+ }
2280+ }
2281+ }
2282+
2283+
2284+
2285+@Callable(gw)
2286+func claimRes (eu,kY) = {
2287+ let kK = kH(gw)
2288+ if ((size(gw.payments) != 0))
2289+ then throw("No payments required")
2290+ else {
2291+ let c = toString(gw.originCaller)
2292+ let eV = jj(c, eu, em, kY)
2293+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2294+ $Tuple2(((((eV._1 ++ jL(A, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._3[bh])
2295+ }
2296+ }
2297+
2298+
2299+
2300+@Callable(gw)
2301+func claimResToWH (eu,kY) = {
2302+ let kK = kH(gw)
2303+ if ((size(gw.payments) != 0))
2304+ then throw("No payments required")
2305+ else {
2306+ let c = toString(gw.originCaller)
2307+ let eV = jj(c, eu, el, kY)
2308+ $Tuple2(((((eV._1 ++ jR(c, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._5[aY])
2309+ }
2310+ }
2311+
2312+
2313+
2314+@Callable(gw)
2315+func flight (iC,iD) = {
2316+ let kK = kH(gw)
2317+ if ((size(gw.payments) != 0))
2318+ then throw("No payments required")
2319+ else {
2320+ let bK = toString(gw.caller)
2321+ let hb = iB(bK, iC, iD)
2322+ let iH = hb._1
2323+ let A = hb._2
2324+ let kV = bI(A)
2325+ let jc = valueOrElse(getString(kV), aJ)
2326+ let iJ = hb._4
2327+ if ((iJ == jc))
2328+ then throw("You can't fly to the same location")
2329+ else {
2330+ let kZ = split(iJ, "_")
2331+ let la = (kZ[bl] == "T")
2332+ let gj = F(A)
2333+ let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2334+ let lc = eW(lb, hb._5)
2335+ let ld = lc._1
2336+ let le = lc._2
2337+ let lf = if (!(cb(cU, jc)))
2338+ then if (la)
2339+ then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2340+ else if ((iH > 0))
2341+ then iJ
2342+ else jc
2343+ else if (!(cb(cU, iJ)))
2344+ then throw("Your duck is taking part in the tournament")
19102345 else {
1911- let dq = jb[cV]
1912- let kb = eu._1
1913- let gn = valueOrErrorMessage(indexOf(kb, dq), "You haven't passed all the lands needed")
1914- let kc = (take(kb, gn) + drop(kb, (gn + 1)))
1915- let iN = dp(dq)
1916- let kd = (eu._2 + valueOrElse(getInteger(bq(aC, O)), 0))
1917- let hF = valueOrElse(getInteger(bw(O)), 0)
1918- let ke = {
1919- let cl = dq
1920- if (("S" == cl))
1921- then 3
1922- else if (("M" == cl))
1923- then 4
1924- else if (("L" == cl))
1925- then 5
1926- else if (("XL" == cl))
1927- then 6
1928- else throw("Only S, M, L, XL can merge")
2346+ let lg = parseIntValue(kZ[bm])
2347+ let lh = split(jc, "_")
2348+ let cd = valueOrElse(getInteger(cU, bO), 0)
2349+ if ((lg != (parseIntValue(lh[bm]) + 1)))
2350+ then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ))
2351+ else if ((iH > 0))
2352+ then {
2353+ let li = valueOrElse(getInteger(cU, bS(cd, A)), 0)
2354+ let lj = if ((lg > li))
2355+ then invoke(cU, "saveDuckResult", [A, lg], nil)
2356+ else unit
2357+ if ((lj == lj))
2358+ then iJ
2359+ else throw("Strict value is not equal to itself.")
2360+ }
2361+ else jc
2362+ }
2363+ $Tuple2(([StringEntry(kV, lf), StringEntry(gj, ld), IntegerEntry(z(A), iH), kK] ++ (if (le)
2364+ then [StringEntry(L(A), "0_0_0_0_0")]
2365+ else (nil ++ jL(A, if ((iH > 0))
2366+ then V
2367+ else W)._1))), hb._3)
2368+ }
2369+ }
2370+ }
2371+
2372+
2373+
2374+@Callable(gw)
2375+func heal (lk,ll,lm) = {
2376+ let kK = kH(gw)
2377+ if (if (if ((0 > lk))
2378+ then true
2379+ else (0 > ll))
2380+ then true
2381+ else (0 > lm))
2382+ then throw("Quantity cannot be negative")
2383+ else {
2384+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2385+ if (kb(A))
2386+ then throw("heal_checkTournament")
2387+ else if (kc(A))
2388+ then throw("heal_checkDelivery")
2389+ else {
2390+ let ln = [lk, ll, lm]
2391+ let iN = z(A)
2392+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
2393+ let lo = valueOrElse(getInteger(iN), iO)
2394+ if ((lo >= iO))
2395+ then throw((("HP should be < " + toString(iO)) + " to heal"))
2396+ else {
2397+ let hx = bH(A)
2398+ let ia = hw(hx)
2399+ let lp = if ((ia[bj] == ""))
2400+ then nil
2401+ else split_4C(ia[bj], "_")
2402+ func lq (eD,ch) = {
2403+ let dp = eD._2
2404+ let gS = if ((size(lp) > dp))
2405+ then parseIntValue(lp[dp])
2406+ else 0
2407+ if ((3 > dp))
2408+ then {
2409+ let lr = ln[dp]
2410+ if ((lr > gS))
2411+ then throw(((("You have only " + toString(gS)) + " of ") + aN[dp]))
2412+ else $Tuple3((eD._1 :+ toString((gS - lr))), (dp + 1), (eD._3 + (parseIntValue(split(ch, "_")[aT]) * lr)))
2413+ }
2414+ else $Tuple3((eD._1 :+ toString(gS)), (dp + 1), eD._3)
19292415 }
1930- if ((hF != ke))
1931- then throw("All lands should be maxed to merge")
2416+
2417+ let eV = {
2418+ let eF = aR
2419+ let eG = size(eF)
2420+ let eH = $Tuple3(nil, 0, 0)
2421+ func eI (eJ,eK) = if ((eK >= eG))
2422+ then eJ
2423+ else lq(eJ, eF[eK])
2424+
2425+ func eL (eJ,eK) = if ((eK >= eG))
2426+ then eJ
2427+ else throw("List size exceeds 50")
2428+
2429+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
2430+ }
2431+ let ls = min([iO, (lo + eV._3)])
2432+ $Tuple2(([IntegerEntry(iN, ls), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], makeString(eV._1, "_")], ":")), kK] ++ jL(A, (ad * ((lk + ll) + lm)))._1), ls)
2433+ }
2434+ }
2435+ }
2436+ }
2437+
2438+
2439+
2440+@Callable(gw)
2441+func healES () = {
2442+ let kK = kH(gw)
2443+ if ((size(gw.payments) != 1))
2444+ then throw("Exactly one payment required")
2445+ else {
2446+ let kL = value(gw.payments[0])
2447+ if ((kL.assetId != cm))
2448+ then throw("Allowed USDT payment only!")
2449+ else {
2450+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2451+ if (kb(A))
2452+ then throw("healES_checkTournament")
2453+ else if (kc(A))
2454+ then throw("healES_checkDelivery")
2455+ else {
2456+ let iN = z(A)
2457+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
2458+ let lo = valueOrElse(getInteger(iN), iO)
2459+ if ((lo > 0))
2460+ then throw("HP should be 0 to call Emergency Service")
19322461 else {
1933- let dW = jb[cU]
1934- let gj = gp(jb[cW])
1935- let gt = (lastBlock.timestamp - iZ)
1936- if ((0 > gt))
1937- then throw(((("Saved timestamp is in future, saved = " + toString(iZ)) + ", current = ") + toString(lastBlock.timestamp)))
2462+ let hx = bH(A)
2463+ let ia = hw(hx)
2464+ let lp = if ((ia[bj] == ""))
2465+ then nil
2466+ else split_4C(ia[bj], "_")
2467+ let lt = if ((size(lp) > 0))
2468+ then parseIntValue(lp[0])
2469+ else 0
2470+ let lu = if ((size(lp) > 1))
2471+ then parseIntValue(lp[1])
2472+ else 0
2473+ let lv = if ((size(lp) > 2))
2474+ then parseIntValue(lp[2])
2475+ else 0
2476+ if (if (if ((lt > 0))
2477+ then true
2478+ else (lu > 0))
2479+ then true
2480+ else (lv > 0))
2481+ then throw("You have to use own Medical Kit")
19382482 else {
1939- let jd = iM(O, iN)
1940- let hE = (iN / cs)
1941- let jl = gr(split(eu._4, "_"), gj, gt, hE, jd)
1942- let eE = gh(eu._6, gj, hE, -1)
1943- let kf = gh(eu._10, gj, hE, -1)
1944- let gX = gh(eu._9, gj, hE, 1)
1945- let kg = eu._7
1946- let cN = indexOf(kg, O)
1947- if (!(isDefined(cN)))
1948- then throw(("Your staked lands don't contain " + O))
2483+ let lw = getString(cR, bL())
2484+ let lx = if (isDefined(lw))
2485+ then split_4C(value(lw), "_")
2486+ else nil
2487+ let ly = if ((size(lx) > 0))
2488+ then parseIntValue(lx[0])
2489+ else 0
2490+ if ((0 >= ly))
2491+ then throw("There are no Medical Kits L1 at Emergency Service storage")
19492492 else {
1950- let kh = bo(O)
1951- let ki = valueOrElse(getString(kh), "")
1952- $Tuple10(kc, kd, dg, jl, ((((((((((((eu._5 :+ DeleteEntry(bp(O))) :+ DeleteEntry(bs(aA, O, b))) :+ DeleteEntry(dV(dW))) :+ DeleteEntry(bm(O))) :+ DeleteEntry(bw(O))) :+ DeleteEntry(dX(O, b))) :+ DeleteEntry(bq(aC, O))) :+ DeleteEntry(dY(dW))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(kh)) :+ Burn(fromBase58String(O), 1)) ++ (if ((ki != ""))
1953- then [DeleteEntry(dT(ki))]
1954- else nil)), eE, removeByIndex(kg, value(cN)), (eu._8 + iN), gX, kf)
2493+ let ls = (lo + parseIntValue(split(aR[0], "_")[aT]))
2494+ let lz = makeString([toString((ly - 1)), removeByIndex(lx, 0)], "_")
2495+ let ch = split(aR[0], "_")
2496+ let lA = cg(ch)
2497+ let lB = fraction((lA * aL), aK, (ct * aW))
2498+ if ((kL.amount != lB))
2499+ then throw(("Payment attached should be " + toString(lB)))
2500+ else {
2501+ let eV = dl(invoke(cR, "updateEsStorage", [lz], [AttachedPayment(cm, lB)]))
2502+ $Tuple2(([IntegerEntry(iN, ls), kK] ++ jL(A, X)._1), eV)
2503+ }
2504+ }
2505+ }
2506+ }
2507+ }
2508+ }
2509+ }
2510+ }
2511+
2512+
2513+
2514+@Callable(gw)
2515+func updateBackpack (A,lC) = if ((gw.caller != cR))
2516+ then throw("permission denied")
2517+ else $Tuple2([StringEntry(bH(A), lC)], lC)
2518+
2519+
2520+
2521+@Callable(gw)
2522+func commitForRandom () = {
2523+ let kK = kH(gw)
2524+ let lD = (height + de)
2525+ let c = toString(gw.caller)
2526+ $Tuple2(([IntegerEntry(df(c), lD)] :+ kK), lD)
2527+ }
2528+
2529+
2530+
2531+@Callable(gw)
2532+func awardSLand (cB) = if ((gw.caller != cU))
2533+ then throw("Access denied")
2534+ else if ((size(gw.payments) != 0))
2535+ then throw("No payments required")
2536+ else {
2537+ let eV = iu(addressFromStringValue(cB), gw.transactionId)
2538+ $Tuple2(eV._1, eV._2._1)
2539+ }
2540+
2541+
2542+
2543+@Callable(gw)
2544+func buySLand () = {
2545+ let kK = kH(gw)
2546+ if ((size(gw.payments) != 1))
2547+ then throw("Exactly one payment required")
2548+ else {
2549+ let kL = value(gw.payments[0])
2550+ if ((kL.assetId != cm))
2551+ then throw("Allowed USDT payment only!")
2552+ else if ((kL.amount != dS))
2553+ then throw(("Payment attached should be " + toString(dS)))
2554+ else {
2555+ let eV = iu(gw.caller, gw.transactionId)
2556+ let lE = do(invoke(cV, "burnAcres", [dT], nil))
2557+ $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2558+ }
2559+ }
2560+ }
2561+
2562+
2563+
2564+@Callable(gw)
2565+func expedition (iC,iD) = {
2566+ let kK = kH(gw)
2567+ if ((size(gw.payments) != 0))
2568+ then throw("No payments required")
2569+ else {
2570+ let bK = toString(gw.caller)
2571+ let hb = iB(bK, iC, iD)
2572+ let A = hb._2
2573+ let iN = z(A)
2574+ let hx = bH(A)
2575+ let ia = hw(hx)
2576+ let jC = split(ia[bi], "_")
2577+ let jE = makeString(eP(true, jC, dR), "_")
2578+ let gj = F(A)
2579+ let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,")
2580+ let lF = eW(lb, hb._5)
2581+ let ld = lF._1
2582+ let le = lF._2
2583+ let lG = iu(gw.caller, gw.transactionId)
2584+ let iA = lG._2._1
2585+ let eV = if ((0 >= hb._1))
2586+ then $Tuple3([IntegerEntry(iN, 0), StringEntry(gj, ld)], "", 0)
2587+ else $Tuple3((lG._1 ++ (if (le)
2588+ then [StringEntry(L(A), "0_0_0_0_0")]
2589+ else ((((nil :+ StringEntry(bI(A), makeString([lG._2._2, "L", iA], "_"))) :+ IntegerEntry(iN, hb._1)) :+ StringEntry(gj, ld)) :+ StringEntry(hx, makeString([ia[bg], ia[bh], jE, ia[bj]], ":"))))), iA, hb._3)
2590+ if (kb(A))
2591+ then throw("expedition_checkTournament")
2592+ else if (kc(A))
2593+ then throw("expedition_checkDelivery")
2594+ else {
2595+ let lE = do(invoke(cV, "burnAcres", [dT], nil))
2596+ $Tuple2(((eV._1 ++ jL(A, Z)._1) :+ kK), $Tuple3(eV._2, eV._3, lE))
2597+ }
2598+ }
2599+ }
2600+
2601+
2602+
2603+@Callable(gw)
2604+func buySLandForAcres () = {
2605+ let kK = kH(gw)
2606+ if ((size(gw.payments) != 1))
2607+ then throw("exactly 1 payment must be attached")
2608+ else {
2609+ let kL = gw.payments[0]
2610+ let fc = kL.amount
2611+ if (if (!(isDefined(kL.assetId)))
2612+ then true
2613+ else (value(kL.assetId) != dd))
2614+ then throw("ACRES payments only!")
2615+ else if ((fc != dT))
2616+ then throw(("Payment attached should be " + toString(dT)))
2617+ else {
2618+ let eV = iu(gw.caller, gw.transactionId)
2619+ let lE = do(invoke(cV, "burnAcres", [dT], [AttachedPayment(dd, fc)]))
2620+ $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE))
2621+ }
2622+ }
2623+ }
2624+
2625+
2626+
2627+@Callable(gw)
2628+func upgradeInfra (P) = {
2629+ let kK = kH(gw)
2630+ if ((size(gw.payments) != 0))
2631+ then throw("No payments required")
2632+ else {
2633+ let eV = jw(true, gw.caller, 0, P)
2634+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
2635+ $Tuple2(((eV._1 :+ kK) ++ jL(A, fraction(aa, eV._3, ct))._1), eV._2)
2636+ }
2637+ }
2638+
2639+
2640+
2641+@Callable(gw)
2642+func activateArtifact (lH,lI) = {
2643+ let kK = kH(gw)
2644+ if ((size(gw.payments) != 0))
2645+ then throw("No payments required")
2646+ else {
2647+ let c = toString(gw.caller)
2648+ let eV = {
2649+ let cn = lH
2650+ if (("PRESALE" == cn))
2651+ then jZ(c, lI)
2652+ else if (("ONBOARD" == cn))
2653+ then jS(c)
2654+ else throw("Unknown artifact")
2655+ }
2656+ (eV :+ kK)
2657+ }
2658+ }
2659+
2660+
2661+
2662+@Callable(gw)
2663+func mergeLands (ki) = {
2664+ let kK = kH(gw)
2665+ if ((size(gw.payments) != 0))
2666+ then throw("No payments required")
2667+ else {
2668+ let eV = kG(toString(gw.caller), ki)
2669+ $Tuple2(((eV._1 :+ kK) ++ jR(toString(gw.caller), ab)._1), eV._2)
2670+ }
2671+ }
2672+
2673+
2674+
2675+@Callable(gw)
2676+func cargoExchange (lJ,P) = {
2677+ let kK = kH(gw)
2678+ if ((size(gw.payments) != 0))
2679+ then throw("No payments required")
2680+ else {
2681+ let hZ = split_4C(lJ, ":")
2682+ let c = toString(gw.originCaller)
2683+ let je = value(assetInfo(fromBase58String(P)))
2684+ let jf = bq(P)
2685+ if (!(isDefined(getInteger(jf))))
2686+ then throw((je.name + " is not staked"))
2687+ else {
2688+ let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned"))
2689+ if ((jh != c))
2690+ then throw((aC + " is not yours"))
2691+ else {
2692+ let hL = (dr(split(je.description, "_")[cX]) / cu)
2693+ let hM = valueOrElse(getInteger(bx(P)), 0)
2694+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
2695+ let jc = valueOrElse(getString(bI(A)), aJ)
2696+ let ce = split(value(jc), "_")
2697+ if ((ce[bl] != "L"))
2698+ then throw((("Duck location type is " + ce[bl]) + ", but should be L"))
2699+ else if ((ce[bm] != P))
2700+ then throw(("Duck should be on the land " + P))
2701+ else {
2702+ let hK = bw(P)
2703+ let hB = hJ(hK, hL, hM)
2704+ let hx = bH(A)
2705+ let ia = hw(hx)
2706+ let eV = hY(hZ, hB, ia)
2707+ let hS = split(hB[bb], "_")
2708+ let jt = (parseIntValue(hS[bd]) + eV._7)
2709+ let ju = (parseIntValue(hS[be]) - eV._7)
2710+[StringEntry(hx, makeString_2C([ia[bg], eV._4, eV._5, eV._6], ":")), StringEntry(hK, makeString_2C([hB[aX], eV._1, eV._2, eV._3, makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")], ":")), kK]
2711+ }
2712+ }
2713+ }
2714+ }
2715+ }
2716+
2717+
2718+
2719+@Callable(gw)
2720+func saveWarehouse (hO,P) = if ((gw.caller != cR))
2721+ then throw("Access denied")
2722+ else {
2723+ let hK = bw(P)
2724+ let hP = split_4C(hO, ":")
2725+ if ((size(hP) != 5))
2726+ then throw("warehouse string should contain 4 ':' separators")
2727+ else {
2728+ let lK = split(hP[bb], "_")[bc]
2729+ let jt = hA(hP)
2730+ let lL = hy(hP[aX])
2731+ let ju = ((lL - parseIntValue(lK)) - jt)
2732+ let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([lK, toString(jt), toString(ju), toString(lL)], "_")], ":")
2733+ $Tuple2([StringEntry(hK, lM)], lM)
2734+ }
2735+ }
2736+
2737+
2738+
2739+@Callable(gw)
2740+func fixWarehouseFormat (P) = if ((gw.caller != cQ))
2741+ then throw("Access denied")
2742+ else {
2743+ let hK = bw(P)
2744+ let je = value(assetInfo(fromBase58String(P)))
2745+ let hL = (dr(split(je.description, "_")[cX]) / cu)
2746+ let hM = valueOrElse(getInteger(bx(P)), 0)
2747+ let hP = hJ(hK, hL, hM)
2748+ let lK = do(invoke(cR, "recalcLockedVolumeREADONLY", [P, hP], nil))
2749+ let jt = hA(hP)
2750+ let lL = hy(hP[aX])
2751+ let ju = ((lL - lK) - jt)
2752+ let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([toString(lK), toString(jt), toString(ju), toString(lL)], "_")], ":")
2753+ $Tuple2([StringEntry(hK, lM)], lM)
2754+ }
2755+
2756+
2757+
2758+@Callable(gw)
2759+func fixContinentProportions (ki) = if ((gw.caller != cQ))
2760+ then throw("Access denied")
2761+ else {
2762+ func lN (eD,lO) = (eD :+ valueOrElse(getString(dh(lO)), "0_0_0_0_0_0"))
2763+
2764+ let gg = {
2765+ let eF = aO
2766+ let eG = size(eF)
2767+ let eH = nil
2768+ func eI (eJ,eK) = if ((eK >= eG))
2769+ then eJ
2770+ else lN(eJ, eF[eK])
2771+
2772+ func eL (eJ,eK) = if ((eK >= eG))
2773+ then eJ
2774+ else throw("List size exceeds 5")
2775+
2776+ eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5)
2777+ }
2778+ func lP (eD,P) = {
2779+ let je = value(assetInfo(fromBase58String(P)))
2780+ let ji = split(je.description, "_")
2781+ let hL = (dr(ji[cX]) / cu)
2782+ let lO = ji[cZ]
2783+ let gs = gy(ji[cY])
2784+ let ha = value(indexOf(aO, lO))
2785+ let kx = split(eD[ha], "_")
2786+ let lQ = makeString(gq(kx, gs, hL, 1), "_")
2787+ let cn = lO
2788+ if (("Americas" == cn))
2789+ then [lQ, eD[1], eD[2], eD[3], eD[4]]
2790+ else if (("Europe" == cn))
2791+ then [eD[0], lQ, eD[2], eD[3], eD[4]]
2792+ else if (("Asia" == cn))
2793+ then [eD[0], eD[1], lQ, eD[3], eD[4]]
2794+ else if (("Africa" == cn))
2795+ then [eD[0], eD[1], eD[2], lQ, eD[4]]
2796+ else if (("Oceania" == cn))
2797+ then [eD[0], eD[1], eD[2], eD[3], lQ]
2798+ else throw("wrong continent")
2799+ }
2800+
2801+ let eO = {
2802+ let eF = ki
2803+ let eG = size(eF)
2804+ let eH = gg
2805+ func hr (eJ,eK) = if ((eK >= eG))
2806+ then eJ
2807+ else lP(eJ, eF[eK])
2808+
2809+ func hs (eJ,eK) = if ((eK >= eG))
2810+ then eJ
2811+ else throw("List size exceeds 100")
2812+
2813+ hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2814+ }
2815+ $Tuple2([StringEntry(dh("Americas"), eO[0]), StringEntry(dh("Europe"), eO[1]), StringEntry(dh("Asia"), eO[2]), StringEntry(dh("Africa"), eO[3]), StringEntry(dh("Oceania"), eO[4])], 0)
2816+ }
2817+
2818+
2819+
2820+@Callable(gw)
2821+func fixStakedPieces (cB) = if ((gw.caller != cQ))
2822+ then throw("Access denied")
2823+ else {
2824+ let kB = if ((cB == ""))
2825+ then 0
2826+ else {
2827+ let ku = getString(an, dj(cB))
2828+ let kq = if (isDefined(ku))
2829+ then split_51C(value(ku), "_")
2830+ else nil
2831+ func lR (eD,P) = {
2832+ let je = value(assetInfo(fromBase58String(P)))
2833+ let ds = split(je.description, "_")[cX]
2834+ (eD + dr(ds))
2835+ }
2836+
2837+ let eF = kq
2838+ let eG = size(eF)
2839+ let eH = 0
2840+ func eI (eJ,eK) = if ((eK >= eG))
2841+ then eJ
2842+ else lR(eJ, eF[eK])
2843+
2844+ func eL (eJ,eK) = if ((eK >= eG))
2845+ then eJ
2846+ else throw("List size exceeds 100")
2847+
2848+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2849+ }
2850+ $Tuple2([IntegerEntry(dk(cB), kB)], kB)
2851+ }
2852+
2853+
2854+
2855+@Callable(gw)
2856+func setCustomName (bo,ks,bs) = {
2857+ let kK = kH(gw)
2858+ if ((size(gw.payments) != 1))
2859+ then throw("Exactly one payment required")
2860+ else {
2861+ let kL = value(gw.payments[0])
2862+ if ((kL.assetId != cm))
2863+ then throw("Allowed USDT payment only!")
2864+ else if ((kL.amount != dO))
2865+ then throw(("Payment should be " + toString(dO)))
2866+ else if (contains(ks, "__"))
2867+ then throw(("Name should not contain '__': " + ks))
2868+ else if ((size(ks) > dP))
2869+ then throw(("Name too long, maxLength=" + toString(dP)))
2870+ else {
2871+ let c = toString(gw.originCaller)
2872+ let lS = {
2873+ let cn = bs
2874+ if (("ACCOUNT" == cn))
2875+ then {
2876+ let lT = ej(ks)
2877+ let lU = getString(lT)
2878+ if (isDefined(lU))
2879+ then throw(("Name already registered: " + ks))
2880+ else {
2881+ let lV = bA(c)
2882+ let lW = getString(lV)
2883+ let lX = if (isDefined(lW))
2884+ then [DeleteEntry(ej(value(lW)))]
2885+ else nil
2886+ (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jR(c, Y)._1)
2887+ }
2888+ }
2889+ else if (("LAND" == cn))
2890+ then {
2891+ let je = value(assetInfo(fromBase58String(bo)))
2892+ let jf = bq(bo)
2893+ if (!(isDefined(getInteger(jf))))
2894+ then throw((je.name + " is not staked"))
2895+ else {
2896+ let jh = valueOrErrorMessage(getString(bn(bo)), (("NFT " + je.name) + " is orphaned"))
2897+ if ((jh != c))
2898+ then throw((aC + " is not yours"))
2899+ else {
2900+ let lT = ec(ks)
2901+ let lU = getString(lT)
2902+ if (isDefined(lU))
2903+ then throw(("Name already registered: " + ks))
2904+ else {
2905+ let lY = bp(bo)
2906+ let lW = getString(lY)
2907+ let lX = if (isDefined(lW))
2908+ then [DeleteEntry(ec(value(lW)))]
2909+ else nil
2910+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jR(c, Y)._1)
2911+ }
2912+ }
2913+ }
2914+ }
2915+ else if (("DUCK" == cn))
2916+ then {
2917+ let je = value(assetInfo(fromBase58String(bo)))
2918+ let jf = bq(bo)
2919+ if (if (!(isDefined(getInteger(jf))))
2920+ then true
2921+ else !(isDefined(getString(bG(c)))))
2922+ then throw((je.name + " is not staked"))
2923+ else {
2924+ let jh = valueOrErrorMessage(getString(bF(bo)), (("NFT " + je.name) + " is orphaned"))
2925+ if ((jh != c))
2926+ then throw((aD + " is not yours"))
2927+ else {
2928+ let lT = ei(ks)
2929+ let lU = getString(lT)
2930+ if (isDefined(lU))
2931+ then throw(("Name already registered: " + ks))
2932+ else {
2933+ let lY = bz(bo)
2934+ let lW = getString(lY)
2935+ let lX = if (isDefined(lW))
2936+ then [DeleteEntry(ei(value(lW)))]
2937+ else nil
2938+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jL(bo, Y)._1)
2939+ }
2940+ }
2941+ }
2942+ }
2943+ else throw("Unknown entity type")
2944+ }
2945+ $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cm)) :+ kK), 0)
2946+ }
2947+ }
2948+ }
2949+
2950+
2951+
2952+@Callable(gw)
2953+func setReferrals (lZ,ma) = if ((gw.callerPublicKey != dK))
2954+ then throw("Permission denied")
2955+ else {
2956+ let kK = kH(gw)
2957+ if ((size(gw.payments) != 0))
2958+ then throw("No payments required")
2959+ else if (!(isDefined(addressFromString(lZ))))
2960+ then throw(("Invalid address: " + lZ))
2961+ else if (!(isDefined(addressFromString(ma))))
2962+ then throw(("Invalid address: " + ma))
2963+ else {
2964+ let mb = ek()
2965+ let mc = getString(mb)
2966+ let md = if (isDefined(mc))
2967+ then split_4C(value(mc), "_")
2968+ else nil
2969+ if (containsElement(md, ma))
2970+ then throw((ma + " is not newbie (already has referrals)"))
2971+ else {
2972+ let jT = bB(ma)
2973+ let jU = getString(jT)
2974+ if (if (isDefined(jU))
2975+ then isDefined(addressFromString(value(jU)))
2976+ else false)
2977+ then throw(((ma + " already has refBy: ") + value(jU)))
2978+ else {
2979+ let me = bE(lZ)
2980+ let mf = getString(me)
2981+ let mg = if (isDefined(mf))
2982+ then split_4C(value(mf), "_")
2983+ else nil
2984+ if (containsElement(mg, ma))
2985+ then throw((((lZ + " already contains ") + ma) + " within referrals"))
2986+ else {
2987+ let mh = makeString_2C((mg :+ ma), "_")
2988+ let mi = if (containsElement(md, lZ))
2989+ then value(mc)
2990+ else makeString_2C((md :+ lZ), "_")
2991+ $Tuple2([StringEntry(jT, lZ), StringEntry(me, mh), StringEntry(mb, mi), kK], 0)
2992+ }
2993+ }
2994+ }
2995+ }
2996+ }
2997+
2998+
2999+
3000+@Callable(gw)
3001+func distributePoints (mj,mk,ml,mm,mn) = {
3002+ let kK = kH(gw)
3003+ if ((size(gw.payments) != 0))
3004+ then throw("No payments required")
3005+ else {
3006+ let c = toString(gw.originCaller)
3007+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3008+ let mo = I(c)
3009+ let mp = valueOrElse(getInteger(an, mo), 0)
3010+ let mq = E(A)
3011+ let mr = valueOrElse(getInteger(an, mq), 0)
3012+ let ms = (mp + mr)
3013+ let mt = ((((mj + mk) + ml) + mm) + mn)
3014+ if ((mt > ms))
3015+ then throw((("There are only " + toString(ms)) + " free points to distribute"))
3016+ else {
3017+ let mu = B(A)
3018+ let aq = split(valueOrElse(getString(an, mu), "0_0_0_0_0"), "_")
3019+ let mv = (mp - mt)
3020+ $Tuple2([IntegerEntry(mo, if ((0 > mv))
3021+ then 0
3022+ else mv), IntegerEntry(mq, if ((0 > mv))
3023+ then (mr + mv)
3024+ else mr), StringEntry(mu, makeString([toString((parseIntValue(aq[k]) + mj)), toString((parseIntValue(aq[l]) + mk)), toString((parseIntValue(aq[m]) + ml)), toString((parseIntValue(aq[n]) + mm)), toString((parseIntValue(aq[o]) + mn))], "_")), kK], 0)
3025+ }
3026+ }
3027+ }
3028+
3029+
3030+
3031+@Callable(gw)
3032+func splitByGlobalWeightsREADONLY (eu) = $Tuple2(nil, eM(eu))
3033+
3034+
3035+
3036+@Callable(gw)
3037+func splitByGlobalAndLocalWeightsREADONLY (mw,mx,gz) = {
3038+ let gs = gy(gz)
3039+ $Tuple2(nil, $Tuple2(eM(mw), ex(mx, gs)))
3040+ }
3041+
3042+
3043+
3044+@Callable(gw)
3045+func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hw(bH(A)), ":"))
3046+
3047+
3048+
3049+@Callable(gw)
3050+func getWarehouseREADONLY (P) = {
3051+ let je = value(assetInfo(fromBase58String(P)))
3052+ let hL = (dr(split(je.description, "_")[cX]) / cu)
3053+ let hM = valueOrElse(getInteger(bx(P)), 0)
3054+ $Tuple2(nil, makeString_2C(hJ(bw(P), hL, hM), ":"))
3055+ }
3056+
3057+
3058+
3059+@Callable(gw)
3060+func saveLastTx () = {
3061+ let iv = gw.caller
3062+ if (!(containsElement([cT, cR, cU, cV], iv)))
3063+ then throw("Access denied")
3064+ else $Tuple2([kH(gw)], 42)
3065+ }
3066+
3067+
3068+
3069+@Callable(gw)
3070+func updateDuckStats (A,jM) = if ((gw.caller != cR))
3071+ then throw("Access denied")
3072+ else jL(A, jM)
3073+
3074+
3075+
3076+@Callable(gw)
3077+func updateAccStats (c,jM) = if ((gw.caller != cR))
3078+ then throw("Access denied")
3079+ else jR(c, jM)
3080+
3081+
3082+
3083+@Callable(gw)
3084+func equipDuck (my) = {
3085+ let kK = kH(gw)
3086+ if ((size(gw.payments) != 0))
3087+ then throw("No payments required")
3088+ else {
3089+ let c = toString(gw.originCaller)
3090+ let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked")
3091+ if (kb(A))
3092+ then throw("equipDuck_checkTournament")
3093+ else if (kc(A))
3094+ then throw("equipDuck_checkDelivery")
3095+ else {
3096+ let gj = F(A)
3097+ let mz = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3098+ let hx = bH(A)
3099+ let ia = hw(hx)
3100+ let ld = split(my, "_")
3101+ if ((size(ld) != q))
3102+ then throw("Wrong equipment string")
3103+ else {
3104+ let gl = fY(mz, fj(ia[bj]), true, nil)
3105+ let gm = split(ld[p], ";")[1]
3106+ let ao = if ((gm == ""))
3107+ then 0
3108+ else {
3109+ let gn = split(gm, ",")[0]
3110+ if ((gn == ""))
3111+ then 0
3112+ else {
3113+ let fy = split(gn, ":")
3114+ let cP = fy[0]
3115+ let go = fy[1]
3116+ if (if (if (if (if ((cP == "06"))
3117+ then true
3118+ else (cP == "07"))
3119+ then true
3120+ else (cP == "08"))
3121+ then (go != "")
3122+ else false)
3123+ then (parseIntValue(go) > 0)
3124+ else false)
3125+ then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT])
3126+ else 0
3127+ }
3128+ }
3129+ let fT = am(this, A, ao, true)
3130+ let gp = fY(ld, gl, false, fT)
3131+ let mA = fo(gp)
3132+ $Tuple2([StringEntry(gj, my), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], mA], ":")), StringEntry(L(A), makeString([toString(fT[7]), toString(fT[8]), toString(fT[9]), toString(fT[10]), toString(fT[11])], "_")), kK], 0)
3133+ }
3134+ }
3135+ }
3136+ }
3137+
3138+
3139+
3140+@Callable(gw)
3141+func fortificateLand (P,mB) = {
3142+ let kK = kH(gw)
3143+ if ((size(gw.payments) != 0))
3144+ then throw("No payments required")
3145+ else {
3146+ let c = toString(gw.originCaller)
3147+ let A = valueOrElse(getString(bG(c)), "")
3148+ let ft = am(this, A, 0, false)
3149+ let mC = by(P)
3150+ let mD = split(valueOrElse(getString(mC), ":0_15:0_18:0"), "_")
3151+ let je = value(assetInfo(fromBase58String(P)))
3152+ let hL = (dr(split(je.description, "_")[cX]) / cu)
3153+ let hM = valueOrElse(getInteger(bx(P)), 0)
3154+ let hK = bw(P)
3155+ let hP = hJ(hK, hL, hM)
3156+ let mE = split(hP[bb], "_")
3157+ let mF = parseIntValue(mE[bd])
3158+ let mG = parseIntValue(mE[be])
3159+ let mH = split(mB, "_")
3160+ let mI = gf(mD, fj(hP[ba]), mF, mG, true, nil)
3161+ let gl = mI._1
3162+ let mJ = mI._2
3163+ let mK = mI._3
3164+ let mL = gf(mH, gl, mJ, mK, false, ft)
3165+ let gp = mL._1
3166+ let mM = mL._2
3167+ let mN = mL._3
3168+ let mA = fo(gp)
3169+ let jK = makeString([mE[bc], toString(mM), toString(mN), mE[bf]], "_")
3170+ $Tuple2([StringEntry(mC, mB), StringEntry(hK, makeString_2C([hP[aX], hP[aY], hP[aZ], mA, jK], ":")), kK], 0)
3171+ }
3172+ }
3173+
3174+
3175+
3176+@Callable(gw)
3177+func initDuckTourAttempt (A) = if ((gw.caller != cU))
3178+ then throw("Access denied")
3179+ else {
3180+ let kK = kH(gw)
3181+ let iN = z(A)
3182+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
3183+ let kX = valueOrElse(getInteger(iN), iO)
3184+ let mO = bI(A)
3185+ let jc = valueOrElse(getString(mO), aJ)
3186+ let cd = valueOrElse(getInteger(cU, bO), 0)
3187+ let mP = (toString(cd) + "_T_0")
3188+ $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, mP)], mP)
3189+ }
3190+
3191+
3192+
3193+@Callable(gw)
3194+func breakAttempt () = {
3195+ let kK = kH(gw)
3196+ let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked")
3197+ let mO = bI(A)
3198+ let jc = valueOrElse(getString(mO), aJ)
3199+ if ((split(jc, "_")[bl] != "T"))
3200+ then throw("Your duck is not in the tournament")
3201+ else {
3202+ let mQ = getIntegerValue(J(A))
3203+ let mR = getStringValue(K(A))
3204+ $Tuple2([kK, IntegerEntry(z(A), mQ), StringEntry(mO, mR)], jc)
3205+ }
3206+ }
3207+
3208+
3209+
3210+@Callable(gw)
3211+func exitTournamentInternal (A) = if ((gw.caller != this))
3212+ then throw("Access denied")
3213+ else {
3214+ let mQ = getIntegerValue(J(A))
3215+ let mR = getStringValue(K(A))
3216+ $Tuple2([IntegerEntry(z(A), mQ), StringEntry(bI(A), mR)], false)
3217+ }
3218+
3219+
3220+
3221+@Callable(gw)
3222+func exitDeliveryInternal (A) = if ((gw.caller != this))
3223+ then throw("Access denied")
3224+ else {
3225+ let jc = split(valueOrElse(getString(bI(A)), aJ), "_")
3226+ let ax = lastBlock.timestamp
3227+ let kd = parseIntValue(jc[bk])
3228+ let ke = parseIntValue(jc[bm])
3229+ let jh = valueOrErrorMessage(getString(bF(A)), "NFT duck is orphaned")
3230+ let mS = z(A)
3231+ let kX = getIntegerValue(mS)
3232+ let mT = if ((ke >= 3))
3233+ then {
3234+ let mU = invoke(cR, "sendDeliveryReward", [jh], nil)
3235+ if ((mU == mU))
3236+ then nil
3237+ else throw("Strict value is not equal to itself.")
3238+ }
3239+ else {
3240+ let mV = valueOrElse(getInteger(cR, bN), 0)
3241+ let mW = invoke(cR, "updateDeliveryLocked", [(mV - aM)], nil)
3242+ if ((mW == mW))
3243+ then if ((0 >= kX))
3244+ then nil
3245+ else [IntegerEntry(T(A), (kd + a))]
3246+ else throw("Strict value is not equal to itself.")
3247+ }
3248+ let mQ = getIntegerValue(J(A))
3249+ let mR = getStringValue(K(A))
3250+ $Tuple2(((mT :+ IntegerEntry(mS, mQ)) :+ StringEntry(bI(A), mR)), false)
3251+ }
3252+
3253+
3254+
3255+@Callable(gw)
3256+func prepareRobbery (iC,iD) = {
3257+ let kK = kH(gw)
3258+ if (!(sigVerify_8Kb(iC, iD, dK)))
3259+ then throw("signature does not match")
3260+ else if ((size(gw.payments) != 1))
3261+ then throw("exactly 1 payment must be attached")
3262+ else {
3263+ let kL = gw.payments[0]
3264+ let mX = kL.amount
3265+ if (if (!(isDefined(kL.assetId)))
3266+ then true
3267+ else (value(kL.assetId) != db))
3268+ then throw("WLGOLD payments only!")
3269+ else {
3270+ let fb = split(toUtf8String(iC), "|")
3271+ if ((size(fb) != 2))
3272+ then throw("Wrong message format")
3273+ else {
3274+ let A = fb[0]
3275+ let ay = au(this, A)._1
3276+ if ((ay > mX))
3277+ then throw(((("Payment " + toString(mX)) + " < required ") + toString(ay)))
3278+ else {
3279+ let mY = split(fb[1], "_")
3280+ let ax = lastBlock.timestamp
3281+ let az = valueOrElse(getInteger(R(A)), 0)
3282+ let aA = valueOrElse(getString(S(A)), "")
3283+ let aB = valueOrElse(getInteger(Q(aA)), 0)
3284+ if (if ((az != x))
3285+ then (aB > ax)
3286+ else false)
3287+ then throw(("You already started robbing, wait till " + toString(aB)))
3288+ else {
3289+ func mZ (eD,P) = {
3290+ let na = valueOrElse(getInteger(O(P)), 0)
3291+ let nb = valueOrElse(getInteger(Q(P)), 0)
3292+ if ((na > size(u)))
3293+ then throw("Invalid state")
3294+ else if ((ax > nb))
3295+ then {
3296+ let nc = valueOrElse(getInteger(bq(P)), 0)
3297+ if ((0 >= nc))
3298+ then eD
3299+ else {
3300+ let gd = value(assetInfo(fromBase58String(P)))
3301+ let ji = split(gd.description, "_")
3302+ let iU = dr(ji[cX])
3303+ let nd = iT(P, iU)
3304+ let gC = (ax - nc)
3305+ let jl = fraction(gC, (nd * iU), a)
3306+ if ((v > jl))
3307+ then eD
3308+ else (eD :+ P)
3309+ }
3310+ }
3311+ else eD
3312+ }
3313+
3314+ let ne = {
3315+ let eF = mY
3316+ let eG = size(eF)
3317+ let eH = nil
3318+ func eI (eJ,eK) = if ((eK >= eG))
3319+ then eJ
3320+ else mZ(eJ, eF[eK])
3321+
3322+ func eL (eJ,eK) = if ((eK >= eG))
3323+ then eJ
3324+ else throw("List size exceeds 10")
3325+
3326+ eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3327+ }
3328+ if ((size(ne) == 0))
3329+ then throw("No candidates for robbery")
3330+ else {
3331+ let nf = dC(size(ne), height, (iD + gw.transactionId))
3332+ let P = ne[nf]
3333+ $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), kK], P)
19553334 }
19563335 }
19573336 }
19583337 }
19593338 }
19603339 }
1961-
1962- let hq = bG(z)
1963- let hT = hp(hq)
1964- let gi = split(valueOrElse(getString(de()), "0_0_0_0_0_0"), "_")
1965- let kj = dh(b)
1966- let kk = getString(kj)
1967- let kl = if (isDefined(kk))
1968- then split_51C(value(kk), "_")
1969- else nil
1970- let km = split(value(assetInfo(fromBase58String(jY[0]))).description, "_")[cX]
1971- let kn = split(valueOrElse(getString(df(km)), "0_0_0_0_0_0"), "_")
1972- let eF = {
1973- let ew = jY
1974- let ex = size(ew)
1975- let ey = $Tuple10(jX, 0, "", hT[bg], nil, gi, kl, 0, split("0_0_0_0_0_0", "_"), kn)
1976- func ez (eA,eB) = if ((eB >= ex))
1977- then eA
1978- else ka(eA, ew[eB])
1979-
1980- func eC (eA,eB) = if ((eB >= ex))
1981- then eA
1982- else throw("List size exceeds 5")
1983-
1984- eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5)
1985- }
1986- let dg = eF._3
1987- let gR = valueOrErrorMessage(indexOf(aN, dg), ("Unknown continent: " + dg))
1988- let gq = gW(eF._9, (dp(jW) / cs))
1989- let ir = valueOrElse(getInteger(dS()), (dR + 1))
1990- let ko = toString(ir)
1991- let is = Issue(ej(ko, jW), makeString([ko, jW, gq, dg], "_"), 1, 0, false)
1992- let bn = calculateAssetId(is)
1993- let kp = toBase58String(bn)
1994- let jx = makeString(eG((jZ > 0), split(hT[bh], "_"), jZ), "_")
1995- let kq = di(b)
1996- let kr = valueOrElse(getInteger(kq), 0)
1997- $Tuple2((((((((((((((((eF._5 :+ (if ((size(eF._7) > 0))
1998- then StringEntry(kj, makeString_11C(eF._7, "_"))
1999- else DeleteEntry(kj))) :+ IntegerEntry(kq, if ((eF._8 > kr))
2000- then 0
2001- else (kr - eF._8))) :+ IntegerEntry(dS(), (ir + 1))) :+ is) :+ StringEntry(dV(ko), kp)) :+ StringEntry(bm(kp), b)) :+ StringEntry(dY(ko), b)) :+ IntegerEntry(bq(aC, kp), eF._2)) :+ IntegerEntry(bw(kp), aj)) :+ IntegerEntry(dX(kp, b), aj)) :+ StringEntry(hq, makeString([hT[bf], eF._4, jx, hT[bi]], ":"))) :+ StringEntry(de(), makeString(eF._6, "_"))) :+ StringEntry(df(dg), makeString(eF._10, "_"))) :+ StringEntry(bH(z), makeString([dg, "L", kp], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bn)), kp)
2002- }
2003- }
2004-
2005-
2006-func ks (b,jY) = jV("M", 3, "SSSS", b, jY, 0)
2007-
2008-
2009-func kt (b,jY) = jV("L", 4, "SMM", b, jY, (cn * 4))
2010-
2011-
2012-func ku (b,jY) = jV("XL", 5, "SSSML", b, jY, (cn * 47))
2013-
2014-
2015-func kv (b,jY) = jV("XXL", 6, "LXL", b, jY, (cn * 54))
2016-
2017-
2018-func kw (b,jY) = {
2019- let cl = size(jY)
2020- if ((4 == cl))
2021- then ks(b, jY)
2022- else if ((3 == cl))
2023- then kt(b, jY)
2024- else if ((5 == cl))
2025- then ku(b, jY)
2026- else if ((2 == cl))
2027- then kv(b, jY)
2028- else throw("Unknown merge")
2029- }
2030-
2031-
2032-func kx (gn) = if (if ((gn.originCaller != cO))
2033- then valueOrElse(getBoolean(ds()), false)
2034- else false)
2035- then throw("Contracts are under maintenance")
2036- else StringEntry(dt(toString(gn.originCaller)), toBase58String(gn.transactionId))
2037-
2038-
2039-@Callable(gn)
2040-func constructorV1 (ky) = if ((gn.caller != this))
2041- then throw("Permission denied")
2042- else [StringEntry(cI(), ky)]
2043-
2044-
2045-
2046-@Callable(gn)
2047-func setBlocked (kz) = if ((gn.caller != this))
2048- then throw("permission denied")
2049- else [BooleanEntry(ds(), kz)]
2050-
2051-
2052-
2053-@Callable(gn)
2054-func stakeLand () = {
2055- let kA = kx(gn)
2056- if ((size(gn.payments) != 1))
2057- then throw("Exactly one payment required")
2058- else {
2059- let kB = value(gn.payments[0])
2060- let bn = value(kB.assetId)
2061- let cz = toString(gn.caller)
2062- if ((kB.amount != 1))
2063- then throw((("NFT " + aA) + " token should be attached as payment"))
2064- else {
2065- let iX = value(assetInfo(bn))
2066- if ((iX.issuer != this))
2067- then throw("Unknown issuer of token")
2068- else if (!(contains(iX.name, aA)))
2069- then throw((("Only NFT " + aA) + " tokens are accepted"))
2070- else {
2071- let kC = drop(iX.name, 4)
2072- let dW = if (contains(kC, "XXL"))
2073- then dropRight(kC, 3)
2074- else if (contains(kC, "XL"))
2075- then dropRight(kC, 2)
2076- else dropRight(kC, 1)
2077- if (!(isDefined(parseInt(dW))))
2078- then throw(("Cannot parse land number from " + iX.name))
2079- else {
2080- let O = toBase58String(bn)
2081- let iY = bp(O)
2082- if (isDefined(getInteger(iY)))
2083- then throw((("NFT " + iX.name) + " is already staked"))
2084- else {
2085- let jb = split(iX.description, "_")
2086- let gj = gp(jb[cW])
2087- let iN = dp(jb[cV])
2088- let hE = (iN / cs)
2089- let eE = go(gj, hE, 1)
2090- let kD = df(jb[cX])
2091- let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_")
2092- let kE = makeString(gh(kn, gj, hE, 1), "_")
2093- let kj = dh(cz)
2094- let kk = getString(kj)
2095- let kg = if (isDefined(kk))
2096- then split_51C(value(kk), "_")
2097- else nil
2098- if (containsElement(kg, O))
2099- then throw(("Your staked lands already contain " + O))
2100- else if ((size(kg) >= aE))
2101- then throw((("Your already staked max (" + toString(aE)) + ") lands"))
2102- else {
2103- let hF = valueOrElse(getInteger(bw(O)), 0)
2104- let kq = di(cz)
2105- let kF = valueOrElse(getInteger(kq), 0)
2106- let kG = invoke(cR, "onStakeUnstakeLand", [cz], nil)
2107- $Tuple2([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aA, O, cz), lastBlock.timestamp), StringEntry(kj, makeString_11C((kg :+ O), "_")), IntegerEntry(kq, (kF + iN)), StringEntry(bm(O), cz), StringEntry(dY(dW), cz), IntegerEntry(dX(O, cz), hF), StringEntry(de(), eE), StringEntry(kD, kE), kA], kG)
2108- }
2109- }
2110- }
2111- }
2112- }
2113- }
2114- }
2115-
2116-
2117-
2118-@Callable(gn)
2119-func unstakeLand (iT) = {
2120- let kA = kx(gn)
2121- if ((size(gn.payments) != 0))
2122- then throw("No payments required")
2123- else {
2124- let b = toString(gn.caller)
2125- let fD = iR(b, ed, iT)
2126- let O = fD._2
2127- let jb = fD._3
2128- let kj = dh(b)
2129- let gj = gp(jb[cW])
2130- let iN = dp(jb[cV])
2131- let hE = (iN / cs)
2132- let eE = go(gj, hE, -1)
2133- let kD = df(jb[cX])
2134- let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_")
2135- let kE = makeString(gh(kn, gj, hE, -1), "_")
2136- let jy = jo(b, O, iN, ed)
2137- let kg = split_51C(valueOrElse(getString(kj), ""), "_")
2138- let cN = indexOf(kg, O)
2139- if (!(isDefined(cN)))
2140- then throw(("Your staked lands don't contain " + O))
2141- else {
2142- let av = lastBlock.timestamp
2143- let kH = valueOrElse(getInteger(cQ, bI(b)), 0)
2144- if ((kH >= av))
2145- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kH)))
2146- else {
2147- let kI = (valueOrElse(getInteger(cR, a(b)), 0) + co)
2148- if ((kI > av))
2149- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kI)))
2150- else {
2151- let kq = di(b)
2152- let kr = valueOrElse(getInteger(kq), 0)
2153- let kJ = if ((iN > kr))
2154- then 0
2155- else (kr - iN)
2156- let kG = invoke(cR, "onStakeUnstakeLand", [b], nil)
2157- $Tuple2([ScriptTransfer(gn.caller, 1, fromBase58String(O)), DeleteEntry(bp(O)), DeleteEntry(bs(aA, O, b)), StringEntry(de(), eE), StringEntry(kD, kE), StringEntry(jy._2, makeString(jy._3, ":")), if ((size(kg) > 1))
2158- then StringEntry(kj, makeString_11C(removeByIndex(kg, value(cN)), "_"))
2159- else DeleteEntry(kj), IntegerEntry(kq, kJ), kA], kG)
2160- }
2161- }
2162- }
2163- }
2164- }
2165-
2166-
2167-
2168-@Callable(gn)
2169-func stakeDuck () = {
2170- let kA = kx(gn)
2171- if ((size(gn.payments) != 1))
2172- then throw("Exactly one payment required")
2173- else {
2174- let kB = value(gn.payments[0])
2175- let bn = value(kB.assetId)
2176- let cz = toString(gn.caller)
2177- if ((kB.amount != 1))
2178- then throw((("NFT " + aB) + " token should be attached as payment"))
2179- else {
2180- let iX = value(assetInfo(bn))
2181- if (if ((iX.issuer != dA))
2182- then (iX.issuer != dB)
2183- else false)
2184- then throw((("Unknown issuer of " + aB) + " token"))
2185- else if (!(contains(iX.name, aB)))
2186- then throw((("Only NFT " + aB) + " tokens are accepted"))
2187- else {
2188- let kK = toBase58String(bn)
2189- let iY = bp(kK)
2190- if (isDefined(getInteger(iY)))
2191- then throw((("NFT " + iX.name) + " is already staked"))
2192- else if (isDefined(getString(bF(cz))))
2193- then throw(("You already staked one duck: " + iX.name))
2194- else if (jU(kK))
2195- then throw("stakeDuck_checkTournament")
2196- else {
2197- let kL = bH(kK)
2198- let ca = getString(kL)
2199- let hq = bG(kK)
2200- let kM = getString(hq)
2201- let iG = y(kK)
2202- let iH = ae(valueOrElse(getInteger(C(kK)), 0))
2203- let kN = valueOrElse(getInteger(iG), iH)
2204- ([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aB, toBase58String(bn), cz), lastBlock.timestamp), StringEntry(bE(kK), cz), StringEntry(bF(cz), kK)] ++ (if (isDefined(ca))
2205- then nil
2206- else ([StringEntry(kL, aI)] ++ (if (isDefined(kM))
2207- then nil
2208- else (([StringEntry(hq, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iG, kN)) :+ kA)))))
2209- }
2210- }
2211- }
2212- }
2213- }
2214-
2215-
2216-
2217-@Callable(gn)
2218-func unstakeDuck (kK) = {
2219- let kA = kx(gn)
2220- if ((size(gn.payments) != 0))
2221- then throw("No payments required")
2222- else {
2223- let bn = fromBase58String(kK)
2224- let cz = toString(gn.caller)
2225- let iX = value(assetInfo(bn))
2226- let iY = bp(kK)
2227- if (!(isDefined(getInteger(iY))))
2228- then throw((("NFT " + iX.name) + " is not staked"))
2229- else if (!(isDefined(getString(bF(cz)))))
2230- then throw((("The duck " + iX.name) + " is not staked"))
2231- else {
2232- let ja = valueOrErrorMessage(getString(bE(kK)), (("NFT " + iX.name) + " is orphaned"))
2233- if ((ja != cz))
2234- then throw("Staked NFT is not yours")
2235- else if (jU(kK))
2236- then throw("unstakeDuck_checkTournament")
2237- else {
2238- let iG = y(kK)
2239- let iH = ae(valueOrElse(getInteger(C(kK)), 0))
2240- let aq = valueOrElse(getInteger(iG), iH)
2241- if ((iH > aq))
2242- then throw((("Please heal your duck to " + toString(iH)) + "hp before unstaking"))
2243- else [ScriptTransfer(gn.caller, 1, bn), DeleteEntry(iY), DeleteEntry(iG), DeleteEntry(bH(kK)), DeleteEntry(bE(kK)), DeleteEntry(bs(aB, kK, cz)), DeleteEntry(bF(cz)), kA]
2244- }
2245- }
2246- }
2247- }
2248-
2249-
2250-
2251-@Callable(gn)
2252-func claimRes (el,kO) = {
2253- let kA = kx(gn)
2254- if ((size(gn.payments) != 0))
2255- then throw("No payments required")
2256- else {
2257- let b = toString(gn.originCaller)
2258- let eM = jc(b, el, ed, kO)
2259- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
2260- $Tuple2(((((eM._1 ++ jE(z, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._3[bg])
2261- }
2262- }
2263-
2264-
2265-
2266-@Callable(gn)
2267-func claimResToWH (el,kO) = {
2268- let kA = kx(gn)
2269- if ((size(gn.payments) != 0))
2270- then throw("No payments required")
2271- else {
2272- let b = toString(gn.originCaller)
2273- let eM = jc(b, el, ec, kO)
2274- $Tuple2(((((eM._1 ++ jK(b, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._5[aX])
2275- }
2276- }
2277-
2278-
2279-
2280-@Callable(gn)
2281-func flight (iv,iw) = {
2282- let kA = kx(gn)
2283- if ((size(gn.payments) != 0))
2284- then throw("No payments required")
2285- else {
2286- let bJ = toString(gn.caller)
2287- let gS = iu(bJ, iv, iw)
2288- let iA = gS._1
2289- let z = gS._2
2290- let kL = bH(z)
2291- let iV = valueOrElse(getString(kL), aI)
2292- let iC = gS._4
2293- if ((iC == iV))
2294- then throw("You can't fly to the same location")
2295- else {
2296- let kP = split(iC, "_")
2297- let kQ = (kP[bk] == "T")
2298- let ga = E(z)
2299- let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,")
2300- let kS = eN(kR, gS._5)
2301- let kT = kS._1
2302- let kU = kS._2
2303- let kV = if (!(bZ(cS, iV)))
2304- then if (kQ)
2305- then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC))
2306- else if ((iA > 0))
2307- then iC
2308- else iV
2309- else if (!(bZ(cS, iC)))
2310- then throw("Your duck is taking part in the tournament")
2311- else {
2312- let kW = parseIntValue(kP[bl])
2313- let kX = split(iV, "_")
2314- let cb = valueOrElse(getInteger(cS, bM), 0)
2315- if ((kW != (parseIntValue(kX[bl]) + 1)))
2316- then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC))
2317- else if ((iA > 0))
2318- then {
2319- let kY = valueOrElse(getInteger(cS, bQ(cb, z)), 0)
2320- let kZ = if ((kW > kY))
2321- then invoke(cS, "saveDuckResult", [z, kW], nil)
2322- else unit
2323- if ((kZ == kZ))
2324- then iC
2325- else throw("Strict value is not equal to itself.")
2326- }
2327- else iV
2328- }
2329- $Tuple2(([StringEntry(kL, kV), StringEntry(ga, kT), IntegerEntry(y(z), iA), kA] ++ (if (kU)
2330- then [StringEntry(K(z), "0_0_0_0_0")]
2331- else (nil ++ jE(z, if ((iA > 0))
2332- then T
2333- else U)._1))), gS._3)
2334- }
2335- }
2336- }
2337-
2338-
2339-
2340-@Callable(gn)
2341-func heal (la,lb,lc) = {
2342- let kA = kx(gn)
2343- if (if (if ((0 > la))
2344- then true
2345- else (0 > lb))
2346- then true
2347- else (0 > lc))
2348- then throw("Quantity cannot be negative")
2349- else {
2350- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
2351- if (jU(z))
2352- then throw("heal_checkTournament")
2353- else {
2354- let ld = [la, lb, lc]
2355- let iG = y(z)
2356- let iH = ae(valueOrElse(getInteger(C(z)), 0))
2357- let le = valueOrElse(getInteger(iG), iH)
2358- if ((le >= iH))
2359- then throw((("HP should be < " + toString(iH)) + " to heal"))
2360- else {
2361- let hq = bG(z)
2362- let hT = hp(hq)
2363- let lf = if ((hT[bi] == ""))
2364- then nil
2365- else split_4C(hT[bi], "_")
2366- func lg (eu,cf) = {
2367- let dn = eu._2
2368- let gJ = if ((size(lf) > dn))
2369- then parseIntValue(lf[dn])
2370- else 0
2371- if ((3 > dn))
2372- then {
2373- let lh = ld[dn]
2374- if ((lh > gJ))
2375- then throw(((("You have only " + toString(gJ)) + " of ") + aM[dn]))
2376- else $Tuple3((eu._1 :+ toString((gJ - lh))), (dn + 1), (eu._3 + (parseIntValue(split(cf, "_")[aS]) * lh)))
2377- }
2378- else $Tuple3((eu._1 :+ toString(gJ)), (dn + 1), eu._3)
2379- }
2380-
2381- let eM = {
2382- let ew = aQ
2383- let ex = size(ew)
2384- let ey = $Tuple3(nil, 0, 0)
2385- func ez (eA,eB) = if ((eB >= ex))
2386- then eA
2387- else lg(eA, ew[eB])
2388-
2389- func eC (eA,eB) = if ((eB >= ex))
2390- then eA
2391- else throw("List size exceeds 50")
2392-
2393- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
2394- }
2395- let li = min([iH, (le + eM._3)])
2396- $Tuple2(([IntegerEntry(iG, li), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], makeString(eM._1, "_")], ":")), kA] ++ jE(z, (ab * ((la + lb) + lc)))._1), li)
2397- }
2398- }
2399- }
2400- }
2401-
2402-
2403-
2404-@Callable(gn)
2405-func healES () = {
2406- let kA = kx(gn)
2407- if ((size(gn.payments) != 1))
2408- then throw("Exactly one payment required")
2409- else {
2410- let kB = value(gn.payments[0])
2411- if ((kB.assetId != ck))
2412- then throw("Allowed USDT payment only!")
2413- else {
2414- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
2415- if (jU(z))
2416- then throw("healES_checkTournament")
2417- else {
2418- let iG = y(z)
2419- let iH = ae(valueOrElse(getInteger(C(z)), 0))
2420- let le = valueOrElse(getInteger(iG), iH)
2421- if ((le > 0))
2422- then throw("HP should be 0 to call Emergency Service")
2423- else {
2424- let hq = bG(z)
2425- let hT = hp(hq)
2426- let lf = if ((hT[bi] == ""))
2427- then nil
2428- else split_4C(hT[bi], "_")
2429- let lj = if ((size(lf) > 0))
2430- then parseIntValue(lf[0])
2431- else 0
2432- let lk = if ((size(lf) > 1))
2433- then parseIntValue(lf[1])
2434- else 0
2435- let ll = if ((size(lf) > 2))
2436- then parseIntValue(lf[2])
2437- else 0
2438- if (if (if ((lj > 0))
2439- then true
2440- else (lk > 0))
2441- then true
2442- else (ll > 0))
2443- then throw("You have to use own Medical Kit")
2444- else {
2445- let lm = getString(cP, bK())
2446- let ln = if (isDefined(lm))
2447- then split_4C(value(lm), "_")
2448- else nil
2449- let lo = if ((size(ln) > 0))
2450- then parseIntValue(ln[0])
2451- else 0
2452- if ((0 >= lo))
2453- then throw("There are no Medical Kits L1 at Emergency Service storage")
2454- else {
2455- let li = (le + parseIntValue(split(aQ[0], "_")[aS]))
2456- let lp = makeString([toString((lo - 1)), removeByIndex(ln, 0)], "_")
2457- let cf = split(aQ[0], "_")
2458- let lq = ce(cf)
2459- let lr = fraction((lq * aK), aJ, (cr * aV))
2460- if ((kB.amount != lr))
2461- then throw(("Payment attached should be " + toString(lr)))
2462- else {
2463- let eM = dj(invoke(cP, "updateEsStorage", [lp], [AttachedPayment(ck, lr)]))
2464- $Tuple2(([IntegerEntry(iG, li), kA] ++ jE(z, V)._1), eM)
2465- }
2466- }
2467- }
2468- }
2469- }
2470- }
2471- }
2472- }
2473-
2474-
2475-
2476-@Callable(gn)
2477-func updateBackpack (z,ls) = if ((gn.caller != cP))
2478- then throw("permission denied")
2479- else $Tuple2([StringEntry(bG(z), ls)], ls)
2480-
2481-
2482-
2483-@Callable(gn)
2484-func commitForRandom () = {
2485- let kA = kx(gn)
2486- let lt = (height + dc)
2487- let b = toString(gn.caller)
2488- $Tuple2(([IntegerEntry(dd(b), lt)] :+ kA), lt)
2489- }
2490-
2491-
2492-
2493-@Callable(gn)
2494-func awardSLand (cz) = if ((gn.caller != cS))
2495- then throw("Access denied")
2496- else if ((size(gn.payments) != 0))
2497- then throw("No payments required")
2498- else {
2499- let eM = in(addressFromStringValue(cz), gn.transactionId)
2500- $Tuple2(eM._1, eM._2._1)
2501- }
2502-
2503-
2504-
2505-@Callable(gn)
2506-func buySLand () = {
2507- let kA = kx(gn)
2508- if ((size(gn.payments) != 1))
2509- then throw("Exactly one payment required")
2510- else {
2511- let kB = value(gn.payments[0])
2512- if ((kB.assetId != ck))
2513- then throw("Allowed USDT payment only!")
2514- else if ((kB.amount != dJ))
2515- then throw(("Payment attached should be " + toString(dJ)))
2516- else {
2517- let eM = in(gn.caller, gn.transactionId)
2518- let lu = dm(invoke(cT, "burnAcres", [dK], nil))
2519- $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu))
2520- }
2521- }
2522- }
2523-
2524-
2525-
2526-@Callable(gn)
2527-func expedition (iv,iw) = {
2528- let kA = kx(gn)
2529- if ((size(gn.payments) != 0))
2530- then throw("No payments required")
2531- else {
2532- let bJ = toString(gn.caller)
2533- let gS = iu(bJ, iv, iw)
2534- let z = gS._2
2535- let iG = y(z)
2536- let hq = bG(z)
2537- let hT = hp(hq)
2538- let jv = split(hT[bh], "_")
2539- let jx = makeString(eG(true, jv, dI), "_")
2540- let ga = E(z)
2541- let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,")
2542- let lv = eN(kR, gS._5)
2543- let kT = lv._1
2544- let kU = lv._2
2545- let lw = in(gn.caller, gn.transactionId)
2546- let it = lw._2._1
2547- let eM = if ((0 >= gS._1))
2548- then $Tuple3([IntegerEntry(iG, 0), StringEntry(ga, kT)], "", 0)
2549- else $Tuple3((lw._1 ++ (if (kU)
2550- then [StringEntry(K(z), "0_0_0_0_0")]
2551- else ((((nil :+ StringEntry(bH(z), makeString([lw._2._2, "L", it], "_"))) :+ IntegerEntry(iG, gS._1)) :+ StringEntry(ga, kT)) :+ StringEntry(hq, makeString([hT[bf], hT[bg], jx, hT[bi]], ":"))))), it, gS._3)
2552- if (jU(z))
2553- then throw("expedition_checkTournament")
2554- else {
2555- let lu = dm(invoke(cT, "burnAcres", [dK], nil))
2556- $Tuple2(((eM._1 ++ jE(z, X)._1) :+ kA), $Tuple3(eM._2, eM._3, lu))
2557- }
2558- }
2559- }
2560-
2561-
2562-
2563-@Callable(gn)
2564-func buySLandForAcres () = {
2565- let kA = kx(gn)
2566- if ((size(gn.payments) != 1))
2567- then throw("exactly 1 payment must be attached")
2568- else {
2569- let kB = gn.payments[0]
2570- let eT = kB.amount
2571- if (if (!(isDefined(kB.assetId)))
2572- then true
2573- else (value(kB.assetId) != db))
2574- then throw("ACRES payments only!")
2575- else if ((eT != dK))
2576- then throw(("Payment attached should be " + toString(dK)))
2577- else {
2578- let eM = in(gn.caller, gn.transactionId)
2579- let lu = dm(invoke(cT, "burnAcres", [dK], [AttachedPayment(db, eT)]))
2580- $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu))
2581- }
2582- }
2583- }
2584-
2585-
2586-
2587-@Callable(gn)
2588-func upgradeInfra (O) = {
2589- let kA = kx(gn)
2590- if ((size(gn.payments) != 0))
2591- then throw("No payments required")
2592- else {
2593- let eM = jp(true, gn.caller, 0, O)
2594- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
2595- $Tuple2(((eM._1 :+ kA) ++ jE(z, fraction(Y, eM._3, cr))._1), eM._2)
2596- }
2597- }
2598-
2599-
2600-
2601-@Callable(gn)
2602-func activateArtifact (lx,ly) = {
2603- let kA = kx(gn)
2604- if ((size(gn.payments) != 0))
2605- then throw("No payments required")
2606- else {
2607- let b = toString(gn.caller)
2608- let eM = {
2609- let cl = lx
2610- if (("PRESALE" == cl))
2611- then jS(b, ly)
2612- else if (("ONBOARD" == cl))
2613- then jL(b)
2614- else throw("Unknown artifact")
2615- }
2616- (eM :+ kA)
2617- }
2618- }
2619-
2620-
2621-
2622-@Callable(gn)
2623-func mergeLands (jY) = {
2624- let kA = kx(gn)
2625- if ((size(gn.payments) != 0))
2626- then throw("No payments required")
2627- else {
2628- let eM = kw(toString(gn.caller), jY)
2629- $Tuple2(((eM._1 :+ kA) ++ jK(toString(gn.caller), Z)._1), eM._2)
2630- }
2631- }
2632-
2633-
2634-
2635-@Callable(gn)
2636-func cargoExchange (lz,O) = {
2637- let kA = kx(gn)
2638- if ((size(gn.payments) != 0))
2639- then throw("No payments required")
2640- else {
2641- let hS = split_4C(lz, ":")
2642- let b = toString(gn.originCaller)
2643- let iX = value(assetInfo(fromBase58String(O)))
2644- let iY = bp(O)
2645- if (!(isDefined(getInteger(iY))))
2646- then throw((iX.name + " is not staked"))
2647- else {
2648- let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned"))
2649- if ((ja != b))
2650- then throw((aA + " is not yours"))
2651- else {
2652- let hE = (dp(split(iX.description, "_")[cV]) / cs)
2653- let hF = valueOrElse(getInteger(bw(O)), 0)
2654- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
2655- let iV = valueOrElse(getString(bH(z)), aI)
2656- let cc = split(value(iV), "_")
2657- if ((cc[bk] != "L"))
2658- then throw((("Duck location type is " + cc[bk]) + ", but should be L"))
2659- else if ((cc[bl] != O))
2660- then throw(("Duck should be on the land " + O))
2661- else {
2662- let hD = bv(O)
2663- let hu = hC(hD, hE, hF)
2664- let hq = bG(z)
2665- let hT = hp(hq)
2666- let eM = hR(hS, hu, hT)
2667- let hL = split(hu[ba], "_")
2668- let jm = (parseIntValue(hL[bc]) + eM._7)
2669- let jn = (parseIntValue(hL[bd]) - eM._7)
2670-[StringEntry(hq, makeString_2C([hT[bf], eM._4, eM._5, eM._6], ":")), StringEntry(hD, makeString_2C([hu[aW], eM._1, eM._2, eM._3, makeString([hL[bb], toString(jm), toString(jn), hL[be]], "_")], ":")), kA]
2671- }
2672- }
2673- }
2674- }
2675- }
2676-
2677-
2678-
2679-@Callable(gn)
2680-func saveWarehouse (hH,O) = if ((gn.caller != cP))
2681- then throw("Access denied")
2682- else {
2683- let hD = bv(O)
2684- let hI = split_4C(hH, ":")
2685- if ((size(hI) != 5))
2686- then throw("warehouse string should contain 4 ':' separators")
2687- else {
2688- let lA = split(hI[ba], "_")[bb]
2689- let jm = ht(hI)
2690- let lB = hr(hI[aW])
2691- let jn = ((lB - parseIntValue(lA)) - jm)
2692- let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([lA, toString(jm), toString(jn), toString(lB)], "_")], ":")
2693- $Tuple2([StringEntry(hD, lC)], lC)
2694- }
2695- }
2696-
2697-
2698-
2699-@Callable(gn)
2700-func fixWarehouseFormat (O) = if ((gn.caller != cO))
2701- then throw("Access denied")
2702- else {
2703- let hD = bv(O)
2704- let iX = value(assetInfo(fromBase58String(O)))
2705- let hE = (dp(split(iX.description, "_")[cV]) / cs)
2706- let hF = valueOrElse(getInteger(bw(O)), 0)
2707- let hI = hC(hD, hE, hF)
2708- let lA = dm(invoke(cP, "recalcLockedVolumeREADONLY", [O, hI], nil))
2709- let jm = ht(hI)
2710- let lB = hr(hI[aW])
2711- let jn = ((lB - lA) - jm)
2712- let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([toString(lA), toString(jm), toString(jn), toString(lB)], "_")], ":")
2713- $Tuple2([StringEntry(hD, lC)], lC)
2714- }
2715-
2716-
2717-
2718-@Callable(gn)
2719-func fixContinentProportions (jY) = if ((gn.caller != cO))
2720- then throw("Access denied")
2721- else {
2722- func lD (eu,lE) = (eu :+ valueOrElse(getString(df(lE)), "0_0_0_0_0_0"))
2723-
2724- let fX = {
2725- let ew = aN
2726- let ex = size(ew)
2727- let ey = nil
2728- func ez (eA,eB) = if ((eB >= ex))
2729- then eA
2730- else lD(eA, ew[eB])
2731-
2732- func eC (eA,eB) = if ((eB >= ex))
2733- then eA
2734- else throw("List size exceeds 5")
2735-
2736- eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5)
2737- }
2738- func lF (eu,O) = {
2739- let iX = value(assetInfo(fromBase58String(O)))
2740- let jb = split(iX.description, "_")
2741- let hE = (dp(jb[cV]) / cs)
2742- let lE = jb[cX]
2743- let gj = gp(jb[cW])
2744- let gR = value(indexOf(aN, lE))
2745- let kn = split(eu[gR], "_")
2746- let lG = makeString(gh(kn, gj, hE, 1), "_")
2747- let cl = lE
2748- if (("Americas" == cl))
2749- then [lG, eu[1], eu[2], eu[3], eu[4]]
2750- else if (("Europe" == cl))
2751- then [eu[0], lG, eu[2], eu[3], eu[4]]
2752- else if (("Asia" == cl))
2753- then [eu[0], eu[1], lG, eu[3], eu[4]]
2754- else if (("Africa" == cl))
2755- then [eu[0], eu[1], eu[2], lG, eu[4]]
2756- else if (("Oceania" == cl))
2757- then [eu[0], eu[1], eu[2], eu[3], lG]
2758- else throw("wrong continent")
2759- }
2760-
2761- let eF = {
2762- let ew = jY
2763- let ex = size(ew)
2764- let ey = fX
2765- func hk (eA,eB) = if ((eB >= ex))
2766- then eA
2767- else lF(eA, ew[eB])
2768-
2769- func hl (eA,eB) = if ((eB >= ex))
2770- then eA
2771- else throw("List size exceeds 100")
2772-
2773- hl(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2774- }
2775- $Tuple2([StringEntry(df("Americas"), eF[0]), StringEntry(df("Europe"), eF[1]), StringEntry(df("Asia"), eF[2]), StringEntry(df("Africa"), eF[3]), StringEntry(df("Oceania"), eF[4])], 0)
2776- }
2777-
2778-
2779-
2780-@Callable(gn)
2781-func fixStakedPieces (cz) = if ((gn.caller != cO))
2782- then throw("Access denied")
2783- else {
2784- let kr = if ((cz == ""))
2785- then 0
2786- else {
2787- let kk = getString(al, dh(cz))
2788- let kg = if (isDefined(kk))
2789- then split_51C(value(kk), "_")
2790- else nil
2791- func lH (eu,O) = {
2792- let iX = value(assetInfo(fromBase58String(O)))
2793- let dq = split(iX.description, "_")[cV]
2794- (eu + dp(dq))
2795- }
2796-
2797- let ew = kg
2798- let ex = size(ew)
2799- let ey = 0
2800- func ez (eA,eB) = if ((eB >= ex))
2801- then eA
2802- else lH(eA, ew[eB])
2803-
2804- func eC (eA,eB) = if ((eB >= ex))
2805- then eA
2806- else throw("List size exceeds 100")
2807-
2808- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2809- }
2810- $Tuple2([IntegerEntry(di(cz), kr)], kr)
2811- }
2812-
2813-
2814-
2815-@Callable(gn)
2816-func setCustomName (bn,ki,br) = {
2817- let kA = kx(gn)
2818- if ((size(gn.payments) != 1))
2819- then throw("Exactly one payment required")
2820- else {
2821- let kB = value(gn.payments[0])
2822- if ((kB.assetId != ck))
2823- then throw("Allowed USDT payment only!")
2824- else if ((kB.amount != dF))
2825- then throw(("Payment should be " + toString(dF)))
2826- else if (contains(ki, "__"))
2827- then throw(("Name should not contain '__': " + ki))
2828- else if ((size(ki) > dG))
2829- then throw(("Name too long, maxLength=" + toString(dG)))
2830- else {
2831- let b = toString(gn.originCaller)
2832- let lI = {
2833- let cl = br
2834- if (("ACCOUNT" == cl))
2835- then {
2836- let lJ = ea(ki)
2837- let lK = getString(lJ)
2838- if (isDefined(lK))
2839- then throw(("Name already registered: " + ki))
2840- else {
2841- let lL = bz(b)
2842- let lM = getString(lL)
2843- let lN = if (isDefined(lM))
2844- then [DeleteEntry(ea(value(lM)))]
2845- else nil
2846- (((lN :+ StringEntry(lL, ki)) :+ StringEntry(lJ, b)) ++ jK(b, W)._1)
2847- }
2848- }
2849- else if (("LAND" == cl))
2850- then {
2851- let iX = value(assetInfo(fromBase58String(bn)))
2852- let iY = bp(bn)
2853- if (!(isDefined(getInteger(iY))))
2854- then throw((iX.name + " is not staked"))
2855- else {
2856- let ja = valueOrErrorMessage(getString(bm(bn)), (("NFT " + iX.name) + " is orphaned"))
2857- if ((ja != b))
2858- then throw((aA + " is not yours"))
2859- else {
2860- let lJ = dT(ki)
2861- let lK = getString(lJ)
2862- if (isDefined(lK))
2863- then throw(("Name already registered: " + ki))
2864- else {
2865- let lO = bo(bn)
2866- let lM = getString(lO)
2867- let lN = if (isDefined(lM))
2868- then [DeleteEntry(dT(value(lM)))]
2869- else nil
2870- (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jK(b, W)._1)
2871- }
2872- }
2873- }
2874- }
2875- else if (("DUCK" == cl))
2876- then {
2877- let iX = value(assetInfo(fromBase58String(bn)))
2878- let iY = bp(bn)
2879- if (if (!(isDefined(getInteger(iY))))
2880- then true
2881- else !(isDefined(getString(bF(b)))))
2882- then throw((iX.name + " is not staked"))
2883- else {
2884- let ja = valueOrErrorMessage(getString(bE(bn)), (("NFT " + iX.name) + " is orphaned"))
2885- if ((ja != b))
2886- then throw((aB + " is not yours"))
2887- else {
2888- let lJ = dZ(ki)
2889- let lK = getString(lJ)
2890- if (isDefined(lK))
2891- then throw(("Name already registered: " + ki))
2892- else {
2893- let lO = by(bn)
2894- let lM = getString(lO)
2895- let lN = if (isDefined(lM))
2896- then [DeleteEntry(dZ(value(lM)))]
2897- else nil
2898- (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jE(bn, W)._1)
2899- }
2900- }
2901- }
2902- }
2903- else throw("Unknown entity type")
2904- }
2905- $Tuple2(((lI :+ ScriptTransfer(cP, kB.amount, ck)) :+ kA), 0)
2906- }
2907- }
2908- }
2909-
2910-
2911-
2912-@Callable(gn)
2913-func setReferrals (lP,lQ) = if ((gn.callerPublicKey != dC))
2914- then throw("Permission denied")
2915- else {
2916- let kA = kx(gn)
2917- if ((size(gn.payments) != 0))
2918- then throw("No payments required")
2919- else if (!(isDefined(addressFromString(lP))))
2920- then throw(("Invalid address: " + lP))
2921- else if (!(isDefined(addressFromString(lQ))))
2922- then throw(("Invalid address: " + lQ))
2923- else {
2924- let lR = eb()
2925- let lS = getString(lR)
2926- let lT = if (isDefined(lS))
2927- then split_4C(value(lS), "_")
2928- else nil
2929- if (containsElement(lT, lQ))
2930- then throw((lQ + " is not newbie (already has referrals)"))
2931- else {
2932- let jM = bA(lQ)
2933- let jN = getString(jM)
2934- if (if (isDefined(jN))
2935- then isDefined(addressFromString(value(jN)))
2936- else false)
2937- then throw(((lQ + " already has refBy: ") + value(jN)))
2938- else {
2939- let lU = bD(lP)
2940- let lV = getString(lU)
2941- let lW = if (isDefined(lV))
2942- then split_4C(value(lV), "_")
2943- else nil
2944- if (containsElement(lW, lQ))
2945- then throw((((lP + " already contains ") + lQ) + " within referrals"))
2946- else {
2947- let lX = makeString_2C((lW :+ lQ), "_")
2948- let lY = if (containsElement(lT, lP))
2949- then value(lS)
2950- else makeString_2C((lT :+ lP), "_")
2951- $Tuple2([StringEntry(jM, lP), StringEntry(lU, lX), StringEntry(lR, lY), kA], 0)
2952- }
2953- }
2954- }
2955- }
2956- }
2957-
2958-
2959-
2960-@Callable(gn)
2961-func distributePoints (lZ,ma,mb,mc,md) = {
2962- let kA = kx(gn)
2963- if ((size(gn.payments) != 0))
2964- then throw("No payments required")
2965- else {
2966- let b = toString(gn.originCaller)
2967- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
2968- let me = H(b)
2969- let mf = valueOrElse(getInteger(al, me), 0)
2970- let mg = D(z)
2971- let mh = valueOrElse(getInteger(al, mg), 0)
2972- let mi = (mf + mh)
2973- let mj = ((((lZ + ma) + mb) + mc) + md)
2974- if ((mj > mi))
2975- then throw((("There are only " + toString(mi)) + " free points to distribute"))
2976- else {
2977- let mk = A(z)
2978- let ao = split(valueOrElse(getString(al, mk), "0_0_0_0_0"), "_")
2979- let ml = (mf - mj)
2980- $Tuple2([IntegerEntry(me, if ((0 > ml))
2981- then 0
2982- else ml), IntegerEntry(mg, if ((0 > ml))
2983- then (mh + ml)
2984- else mh), StringEntry(mk, makeString([toString((parseIntValue(ao[j]) + lZ)), toString((parseIntValue(ao[k]) + ma)), toString((parseIntValue(ao[l]) + mb)), toString((parseIntValue(ao[m]) + mc)), toString((parseIntValue(ao[n]) + md))], "_")), kA], 0)
2985- }
2986- }
2987- }
2988-
2989-
2990-
2991-@Callable(gn)
2992-func splitByGlobalWeightsREADONLY (el) = $Tuple2(nil, eD(el))
2993-
2994-
2995-
2996-@Callable(gn)
2997-func splitByGlobalAndLocalWeightsREADONLY (mm,mn,gq) = {
2998- let gj = gp(gq)
2999- $Tuple2(nil, $Tuple2(eD(mm), eo(mn, gj)))
3000- }
3001-
3002-
3003-
3004-@Callable(gn)
3005-func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hp(bG(z)), ":"))
3006-
3007-
3008-
3009-@Callable(gn)
3010-func getWarehouseREADONLY (O) = {
3011- let iX = value(assetInfo(fromBase58String(O)))
3012- let hE = (dp(split(iX.description, "_")[cV]) / cs)
3013- let hF = valueOrElse(getInteger(bw(O)), 0)
3014- $Tuple2(nil, makeString_2C(hC(bv(O), hE, hF), ":"))
3015- }
3016-
3017-
3018-
3019-@Callable(gn)
3020-func saveLastTx () = {
3021- let io = gn.caller
3022- if (!(containsElement([cR, cP, cS, cT], io)))
3023- then throw("Access denied")
3024- else $Tuple2([kx(gn)], 42)
3025- }
3026-
3027-
3028-
3029-@Callable(gn)
3030-func updateDuckStats (z,jF) = if ((gn.caller != cP))
3031- then throw("Access denied")
3032- else jE(z, jF)
3033-
3034-
3035-
3036-@Callable(gn)
3037-func updateAccStats (b,jF) = if ((gn.caller != cP))
3038- then throw("Access denied")
3039- else jK(b, jF)
3040-
3041-
3042-
3043-@Callable(gn)
3044-func equipDuck (mo) = {
3045- let kA = kx(gn)
3046- if ((size(gn.payments) != 0))
3047- then throw("No payments required")
3048- else {
3049- let b = toString(gn.originCaller)
3050- let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked")
3051- if (jU(z))
3052- then throw("equipDuck_checkTournament")
3053- else {
3054- let ga = E(z)
3055- let mp = split(valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3056- let hq = bG(z)
3057- let hT = hp(hq)
3058- let kT = split(mo, "_")
3059- if ((size(kT) != p))
3060- then throw("Wrong equipment string")
3061- else {
3062- let gc = fP(mp, fa(hT[bi]), true, nil)
3063- let gd = split(kT[o], ";")[1]
3064- let am = if ((gd == ""))
3065- then 0
3066- else {
3067- let ge = split(gd, ",")[0]
3068- if ((ge == ""))
3069- then 0
3070- else {
3071- let fp = split(ge, ":")
3072- let cN = fp[0]
3073- let gf = fp[1]
3074- if (if (if (if (if ((cN == "06"))
3075- then true
3076- else (cN == "07"))
3077- then true
3078- else (cN == "08"))
3079- then (gf != "")
3080- else false)
3081- then (parseIntValue(gf) > 0)
3082- else false)
3083- then parseIntValue(split(aQ[parseIntValue(cN)], "_")[aS])
3084- else 0
3085- }
3086- }
3087- let fK = ak(this, z, am, true)
3088- let gg = fP(kT, gc, false, fK)
3089- let mq = ff(gg)
3090- $Tuple2([StringEntry(ga, mo), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], mq], ":")), StringEntry(K(z), makeString([toString(fK[7]), toString(fK[8]), toString(fK[9]), toString(fK[10]), toString(fK[11])], "_")), kA], 0)
3091- }
3092- }
3093- }
3094- }
3095-
3096-
3097-
3098-@Callable(gn)
3099-func fortificateLand (O,mr) = {
3100- let kA = kx(gn)
3101- if ((size(gn.payments) != 0))
3102- then throw("No payments required")
3103- else {
3104- let b = toString(gn.originCaller)
3105- let z = valueOrElse(getString(bF(b)), "")
3106- let fk = ak(this, z, 0, false)
3107- let ms = bx(O)
3108- let mt = split(valueOrElse(getString(ms), ":0_15:0_18:0"), "_")
3109- let iX = value(assetInfo(fromBase58String(O)))
3110- let hE = (dp(split(iX.description, "_")[cV]) / cs)
3111- let hF = valueOrElse(getInteger(bw(O)), 0)
3112- let hD = bv(O)
3113- let hI = hC(hD, hE, hF)
3114- let mu = split(hI[ba], "_")
3115- let mv = parseIntValue(mu[bc])
3116- let mw = parseIntValue(mu[bd])
3117- let mx = split(mr, "_")
3118- let my = fW(mt, fa(hI[aZ]), mv, mw, true, nil)
3119- let gc = my._1
3120- let mz = my._2
3121- let mA = my._3
3122- let mB = fW(mx, gc, mz, mA, false, fk)
3123- let gg = mB._1
3124- let mC = mB._2
3125- let mD = mB._3
3126- let mq = ff(gg)
3127- let jD = makeString([mu[bb], toString(mC), toString(mD), mu[be]], "_")
3128- $Tuple2([StringEntry(ms, mr), StringEntry(hD, makeString_2C([hI[aW], hI[aX], hI[aY], mq, jD], ":")), kA], 0)
3129- }
3130- }
3131-
3132-
3133-
3134-@Callable(gn)
3135-func initDuckTourAttempt (z) = if ((gn.caller != cS))
3136- then throw("Access denied")
3137- else {
3138- let kA = kx(gn)
3139- let iG = y(z)
3140- let iH = ae(valueOrElse(getInteger(C(z)), 0))
3141- let kN = valueOrElse(getInteger(iG), iH)
3142- let mE = bH(z)
3143- let iV = valueOrElse(getString(mE), aI)
3144- let cb = valueOrElse(getInteger(cS, bM), 0)
3145- let mF = (toString(cb) + "_T_0")
3146- $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mF)], mF)
3147- }
3148-
3149-
3150-
3151-@Callable(gn)
3152-func breakAttempt () = {
3153- let kA = kx(gn)
3154- let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked")
3155- let mE = bH(z)
3156- let iV = valueOrElse(getString(mE), aI)
3157- if ((split(iV, "_")[bk] != "T"))
3158- then throw("Your duck is not in the tournament")
3159- else {
3160- let mG = getIntegerValue(I(z))
3161- let mH = getStringValue(J(z))
3162- $Tuple2([kA, IntegerEntry(y(z), mG), StringEntry(mE, mH)], iV)
3163- }
3164- }
3165-
3166-
3167-
3168-@Callable(gn)
3169-func exitTournamentInternal (z) = if ((gn.caller != this))
3170- then throw("Access denied")
3171- else {
3172- let mG = getIntegerValue(I(z))
3173- let mH = getStringValue(J(z))
3174- $Tuple2([IntegerEntry(y(z), mG), StringEntry(bH(z), mH)], false)
3175- }
3176-
3177-
3178-
3179-@Callable(gn)
3180-func prepareRobbery (iv,iw) = {
3181- let kA = kx(gn)
3182- if (!(sigVerify_8Kb(iv, iw, dC)))
3183- then throw("signature does not match")
3184- else if ((size(gn.payments) != 1))
3185- then throw("exactly 1 payment must be attached")
3186- else {
3187- let kB = gn.payments[0]
3188- let mI = kB.amount
3189- if (if (!(isDefined(kB.assetId)))
3190- then true
3191- else (value(kB.assetId) != cZ))
3192- then throw("WLGOLD payments only!")
3193- else {
3194- let eS = split(toUtf8String(iv), "|")
3195- if ((size(eS) != 2))
3196- then throw("Wrong message format")
3197- else {
3198- let z = eS[0]
3199- let aw = as(this, z)._1
3200- if ((aw > mI))
3201- then throw(((("Payment " + toString(mI)) + " < required ") + toString(aw)))
3202- else {
3203- let mJ = split(eS[1], "_")
3204- let av = lastBlock.timestamp
3205- let ax = valueOrElse(getInteger(Q(z)), 0)
3206- let ay = valueOrElse(getString(R(z)), "")
3207- let az = valueOrElse(getInteger(P(ay)), 0)
3208- if (if ((ax != w))
3209- then (az > av)
3210- else false)
3211- then throw(("You already started robbing, wait till " + toString(az)))
3212- else {
3213- func mK (eu,O) = {
3214- let mL = valueOrElse(getInteger(N(O)), 0)
3215- let mM = valueOrElse(getInteger(P(O)), 0)
3216- if ((mL > size(t)))
3217- then throw("Invalid state")
3218- else if ((av > mM))
3219- then {
3220- let mN = valueOrElse(getInteger(bp(O)), 0)
3221- if ((0 >= mN))
3222- then eu
3223- else {
3224- let fU = value(assetInfo(fromBase58String(O)))
3225- let jb = split(fU.description, "_")
3226- let iN = dp(jb[cV])
3227- let mO = iM(O, iN)
3228- let gt = (av - mN)
3229- let je = fraction(gt, (mO * iN), aG)
3230- if ((u > je))
3231- then eu
3232- else (eu :+ O)
3233- }
3234- }
3235- else eu
3236- }
3237-
3238- let mP = {
3239- let ew = mJ
3240- let ex = size(ew)
3241- let ey = nil
3242- func ez (eA,eB) = if ((eB >= ex))
3243- then eA
3244- else mK(eA, ew[eB])
3245-
3246- func eC (eA,eB) = if ((eB >= ex))
3247- then eA
3248- else throw("List size exceeds 10")
3249-
3250- eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3251- }
3252- if ((size(mP) == 0))
3253- then throw("No candidates for robbery")
3254- else {
3255- let mQ = du(size(mP), height, (iw + gn.transactionId))
3256- let O = mP[mQ]
3257- $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kA], O)
3258- }
3259- }
3260- }
3261- }
3262- }
3263- }
3264- }
3265-
3266-
3267-
3268-@Callable(gn)
3269-func robLand (iv,iw) = {
3270- let kA = kx(gn)
3271- if (!(sigVerify_8Kb(iv, iw, dC)))
3340+ }
3341+
3342+
3343+
3344+@Callable(gw)
3345+func robLand (iC,iD) = {
3346+ let kK = kH(gw)
3347+ if (!(sigVerify_8Kb(iC, iD, dK)))
32723348 then throw("signature does not match")
32733349 else {
3274- let bJ = toString(gn.caller)
3275- let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked")
3276- let av = lastBlock.timestamp
3277- $Tuple2([kA, IntegerEntry(L(z), av)], 0)
3278- }
3279- }
3280-
3281-
3282-
3283-@Callable(gn)
3284-func acceptDelivery () = if (!(ci))
3350+ let bK = toString(gw.caller)
3351+ let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3352+ let ax = lastBlock.timestamp
3353+ $Tuple2([kK, IntegerEntry(M(A), ax)], 0)
3354+ }
3355+ }
3356+
3357+
3358+
3359+@Callable(gw)
3360+func acceptDelivery () = if (!(ck))
32853361 then throw("Delivery feature is turned off!")
32863362 else {
3287- let kA = kx(gn)
3288- let bJ = toString(gn.caller)
3289- let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked")
3290- let mR = valueOrElse(getInteger(cP, bL), 0)
3291- if ((aL > mR))
3292- then throw(("Delivery is not available, fund=" + toString(mR)))
3363+ let kK = kH(gw)
3364+ let bK = toString(gw.caller)
3365+ let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked")
3366+ let ng = valueOrElse(getInteger(cR, bM), 0)
3367+ let mV = valueOrElse(getInteger(cR, bN), 0)
3368+ if ((aM > (ng - mV)))
3369+ then throw(((("Delivery is not available, fund=" + dw(ng, 6)) + ", locked=") + dw(mV, 6)))
32933370 else {
3294- let iG = y(z)
3295- let iH = ae(valueOrElse(getInteger(C(z)), 0))
3296- let kN = valueOrElse(getInteger(iG), iH)
3297- let mE = bH(z)
3298- let iV = valueOrElse(getString(mE), aI)
3299- let av = lastBlock.timestamp
3300- let mS = (toString(av) + "_D_0")
3301- $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mS)], mS)
3371+ let ax = lastBlock.timestamp
3372+ let nh = valueOrElse(getInteger(T(A)), 0)
3373+ if ((nh > ax))
3374+ then throw(("Delivery is forbidden for your duck until " + toString(nh)))
3375+ else if (kb(A))
3376+ then throw("acceptDelivery_checkTournament")
3377+ else if (kc(A))
3378+ then throw("acceptDelivery_checkDelivery")
3379+ else {
3380+ let ni = do(invoke(cR, "updateDeliveryLocked", [(mV + aM)], nil))
3381+ let iN = z(A)
3382+ let iO = ag(valueOrElse(getInteger(D(A)), 0))
3383+ let kX = valueOrElse(getInteger(iN), iO)
3384+ let mO = bI(A)
3385+ let jc = valueOrElse(getString(mO), aJ)
3386+ let nj = (toString(ax) + "_D_0")
3387+ $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, nj)], $Tuple2(nj, ni))
3388+ }
33023389 }
33033390 }
33043391
33053392

github/deemru/w8io/169f3d6 
1086.02 ms