tx · 6Ecs2wULeZs81TzNNQfr3ZVrbyYB4eziHytn8vib6ss2

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.09500000 Waves

2023.12.29 23:12 [2908526] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "6Ecs2wULeZs81TzNNQfr3ZVrbyYB4eziHytn8vib6ss2", "fee": 9500000, "feeAssetId": null, "timestamp": 1703880790712, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4f7DKz1rkqKXEwTaprpeewMxbRZNdNaBjyxEVn9FPapXXTSepnJ1sZkUPSVTTZLin9uc8YLgSZh6m9R392vEjrBg" ], "script": "base64:BgLIAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASAwoBARIAEgQKAgICEgASAwoBCBIECgIICBIDCgEYEgQKAggIEgQKAggIEgUKAwgICBIECgIICBIHCgUBAQEBARIDCgEBEgUKAwEBCBIDCgEIEgMKAQgSABIECgIIARIECgIIARIDCgEIEgMKAQgSABIAEgMKAQgSAwoBCBIECgICAhIAmAIACURBWU1JTExJUwCAuJkpARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIABlNDQUxFOACAwtcvAAx4cExldmVsU2NhbGUAgBkAD3hwTGV2ZWxSZWNpcFBvdwCgHwASbnVtUG9pbnRzT25MZXZlbFVwAAMADHJlcXVpcmVtZW50cwkAzAgCAghTdHJlbmd0aAkAzAgCAghBY2N1cmFjeQkAzAgCAglJbnRlbGxlY3QJAMwIAgIJRW5kdXJhbmNlCQDMCAICCURleHRlcml0eQkAzAgCAgVMZXZlbAkAzAgCAgZIZWFsdGgFA25pbAAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtzZWdCYWNrcGFjawAAAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIADU1BWFBST0RJTlNMT1QAHgENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQ2hhcnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tDaGFyc18FC2R1Y2tBc3NldElkAQlrZXlEdWNrWFABC2R1Y2tBc3NldElkCQCsAgICB2R1Y2tYUF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrTGV2ZWwBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tMZXZlbF8FC2R1Y2tBc3NldElkARFrZXlEdWNrRnJlZVBvaW50cwELZHVja0Fzc2V0SWQJAKwCAgIPZHVja0ZyZWVQb2ludHNfBQtkdWNrQXNzZXRJZAEQa2V5RHVja0VxdWlwbWVudAELZHVja0Fzc2V0SWQJAKwCAgIOZHVja0VxdWlwbWVudF8FC2R1Y2tBc3NldElkAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIBEWtleVVzZXJGcmVlUG9pbnRzAQRhZGRyCQCsAgICD3VzZXJGcmVlUG9pbnRzXwUEYWRkcgEOa2V5U2F2ZWRIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICDHNhdmVkSGVhbHRoXwULZHVja0Fzc2V0SWQBEGtleVNhdmVkTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDnNhdmVkTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEMa2V5RHVja0J1ZmZzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQnVmZnNfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeVRpbWVfBQtkdWNrQXNzZXRJZAETa2V5RHVja1JvYmJlcnlDb3VudAELZHVja0Fzc2V0SWQJAKwCAgIYdG90YWxSb2JiZXJ5Q291bnRCeUR1Y2tfBQtkdWNrQXNzZXRJZAETa2V5VXNlclJvYmJlcnlDb3VudAEEYWRkcgkArAICAhF1c2VyUm9iYmVyeUNvdW50XwUEYWRkcgEVa2V5VXNlckxhc3RSb2JiZXJ5RGF5AQRhZGRyCQCsAgICE3VzZXJMYXN0Um9iYmVyeURheV8FBGFkZHIBFGtleUR1Y2tEZWxpdmVyeUNvdW50AQtkdWNrQXNzZXRJZAkArAICAhl0b3RhbERlbGl2ZXJ5Q291bnRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEUa2V5VXNlckRlbGl2ZXJ5Q291bnQBBGFkZHIJAKwCAgISdXNlckRlbGl2ZXJ5Q291bnRfBQRhZGRyARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQRhZGRyCQCsAgICFHVzZXJMYXN0RGVsaXZlcnlEYXlfBQRhZGRyAAd4cENsYWltAJBOAA94cFN1Y2Nlc3NGbGlnaHQAkE4ADHhwRmFpbEZsaWdodADQDwAMeHBTdWNjZXNzUm9iAJBOAAl4cEZhaWxSb2IA0A8ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCEPQAKeHBOZXdTTGFuZADAlrECAA54cFVwZ3JhZGVJbmZyYQCQTgAHeHBNZXJnZQDAhD0ACXhwT25ib2FyZADAhD0ABnhwSGVhbACQTgEJbGV2ZWxCeVhQAQJ4cAkAawMFDHhwTGV2ZWxTY2FsZQkAbAYFAnhwAAQFD3hwTGV2ZWxSZWNpcFBvdwAEAAQFBERPV04FBlNDQUxFOAEJbWF4SGVhbHRoAQVsZXZlbAkAZAIAZAUFbGV2ZWwBB2xldmVsVXACCWN1cnJMZXZlbAVuZXdYUAQIbmV3TGV2ZWwJAQlsZXZlbEJ5WFABBQVuZXdYUAkAzAgCBQhuZXdMZXZlbAkAzAgCCQBoAgUSbnVtUG9pbnRzT25MZXZlbFVwCQBlAgUIbmV3TGV2ZWwFCWN1cnJMZXZlbAUDbmlsAQxnZXREdWNrU3RhdHMED3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZApidWZmRWZmZWN0CmZvcmNlQnVmZnMEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwQDbHZsCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAQltYXhIZWFsdGgBBQNsdmwECnN0YXRlQnVmZnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfCQDOCAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkJAMwIAgUDbHZsCQDMCAIFBmhlYWx0aAUDbmlsAwUKZm9yY2VCdWZmcwkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QFA25pbAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJEZXh0ZXJpdHkFA25pbAAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwALUk9CT19QUkVGSVgCBFJPQk8ACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGABhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIAGQAPREFJTFlSRVNCWVBJRUNFAID40gEADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoAFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQDQhgMAEk1JTl9XTEdPTERfUk9CQkVSWQCAwtcvABZBTExPV0VEX0ZSRUVfUk9CQkVSSUVTAAAAGUFDUkVTX0ZPUl9ST0JCRVJZX0FUVEVNUFQAgISvXwAXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMAAAAaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQAgISvXwAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzCQDMCAICC0Jvb20tRG9nIEwxCQDMCAICC0Jvb20tRG9nIEwyCQDMCAICC0Jvb20tRG9nIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8JAMwIAgInMjNfMjNfNV8yMF8yM182XzM1XzJfMTAwXzAsMCwwLDAsMCwwLDBfCQDMCAICJzIzXzIzXzVfMjBfMjNfNl83MF8yXzE1MF8wLDAsMCwwLDAsMCwwXwkAzAgCAigyM18yM181XzIwXzIzXzZfMTA1XzJfMjAwXzAsMCwwLDAsMCwwLDBfBQNuaWwACXJJZHhDb2VmZgAGAApySWR4RWZmZWN0AAgAEHJJZHhSZXF1aXJlbWVudHMACQAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICA25vXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIFbGNuYV8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgIDc3RfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgIDbGFzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIGc3R0YW9fBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIDd2hfBQtsYW5kQXNzZXRJZAEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtpbmZyYUxldmVsXwUHYXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAANbGFzdFRvdXJJZEtleQIOJXNfX2xhc3RUb3VySWQBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEDdElkCQCsAgICFiVzJWRfX3RvdXJTdGF0aWNEYXRhX18JAKQDAQUDdElkARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQN0SWQJAKwCAgIXJXMlZF9fdG91ckR5bmFtaWNEYXRhX18JAKQDAQUDdElkARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIDdElkC2R1Y2tBc3NldElkCQC5CQIJAMwIAgIfJXMlZCVzX19iZXN0UmVzdWx0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQAKdFN0YXRpY0VuZAAGAA50RHluYW1pY1N0YXR1cwABAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAQlvbk1pc3Npb24CDHRvdXJDb250cmFjdAhsb2NhdGlvbgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFDHRvdXJDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANsb2MJALUJAgUIbG9jYXRpb24CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQx0b3VyQ29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEB2xvY1R5cGUJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQBDGNoZWF0QXR0ZW1wdAMGb2xkTG9jBm5ld0xvYwljaGVhdENhc2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQUGb2xkTG9jAgksIG5ld0xvYz0FBm5ld0xvYwIHLCBjYXNlPQkApAMBBQljaGVhdENhc2UAFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkHABhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UHABNLU19BTExPV19ST0JPX0RVQ0tTBwAKREFZX01JTExJUwCAuJkpAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQADcHViBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAwUWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQEgqxdXjxVn41lUQbDWcutmm8Sj02Ze1ZmGUN+YNx+yCQgBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAwkAAAIBAVQFByRtYXRjaDABIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoCQACAQINVW5rbm93biBjaGFpbgALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwBQpEQVlfTUlMTElTAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAAVJVEVSNgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdUb3VybmFtZW50RGFwcAAHAA9JZHhDZmdBY3Jlc0RhcHAACAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAASdG91cm5hbWVudENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnVG91cm5hbWVudERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMADXdsZ0Fzc2V0SWRLZXkCC3dsZ19hc3NldElkAAp3bGdBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgULd2xnQ29udHJhY3QFDXdsZ0Fzc2V0SWRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAAPYWNyZXNBc3NldElkS2V5AgxhY3Jlc0Fzc2V0SWQADGFjcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDWFjcmVzQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQAC3JhbmRvbURlbGF5AAIBCWtleUNvbW1pdAEHYWRkcmVzcwkArAICAg9maW5pc2hCbG9ja0Zvcl8FB2FkZHJlc3MBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJY29udGluZW50CQCsAgICFHJlc1R5cGVzQnlDb250aW5lbnRfBQljb250aW5lbnQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0FueUxpc3QBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIJTGlzdFtBbnldBAFsBQckbWF0Y2gwBQFsCQACAQIbZmFpbCB0byBjYXN0IGludG8gTGlzdFtBbnldAQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBB2lzRGlnaXQBAXMJAQlpc0RlZmluZWQBCQC2CQEFAXMBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQ9nZXRSYW5kb21OdW1iZXIDCG1heFZhbHVlBHNhbHQHZW50cm9weQMJAGcCAAAFCG1heFZhbHVlCQACAQIWbWF4VmFsdWUgc2hvdWxkIGJlID4gMAQKcmFuZG9tSGFzaAkA9wMBCQDLAQIFBHNhbHQFB2VudHJvcHkJAGoCCQCxCQEFCnJhbmRvbUhhc2gFCG1heFZhbHVlAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAOUk9CT19EVUNLX1VTRFQAoI0GAAxTX0NPU1RfQUNSRVMAgPKLqAkABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAPUFJFU0FMRU5VTUxBTkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIEbGNuXwUEbmFtZQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgNsYV8FB2xhbmROdW0BHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICBWlsYW9fBQdhc3NldElkAgFfBQlvd25lckFkZHIBEWtleUxhbmROdW1Ub093bmVyAQdsYW5kTnVtCQCsAgICA2xvXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QBD2tleU5leHRSb2JvRHVjawACDG5leHRSb2JvRHVjawALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwAIcmxIZWFsdGgAAAALcmxQcm9kc1VzZWQAAQAGcmxUeXBlAAAACHJsTGFzdFR4AAIAC3JsVGltZXN0YW1wAAMBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0IG5lZWQgCQCkAwEJAJEDAgUEbmVlZAUDaWR4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQDBQxzaG91bGRVc2VNYXQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnN1YnRyYWN0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFA2hhcwERc3VidHJhY3RFcXVpcG1lbnQCBW9sZEVxBXBVc2VkAwkAAAIFBXBVc2VkAgAJAJUKAwUFb2xkRXEHBwoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCCAUDYWNjAl8xCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAJUKAwkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAMIBQNhY2MCXzIGAwMJAGcCBQNpZHgABgkAZwIACAUDaWR4BwkAAAIFBm5ld0FtdAAABwMIBQNhY2MCXzMGAwMJAGcCBQNpZHgAAwkAZwIABQUDaWR4BwkAZgIFA2FtdAAABwoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQVvbGRFcQcHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdWJVc2VkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAQ5wcm9kU3RyVG9CeXRlcwEHcHJvZFN0cgQFcExpc3QDCQAAAgUHcHJvZFN0cgIABQNuaWwJALwJAgUHcHJvZFN0cgIBXwoBBHRvQlYCA2FjYwZyZWNpcGUEAWoJAGkCCQDIAQEFA2FjYwAIBARjdXJyAwkAZgIJAJADAQUFcExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwTGlzdAUBagAACQDLAQIFA2FjYwkAmgMBBQRjdXJyCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwAQAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBHRvQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgEOYnl0ZXNUb1Byb2RTdHIBAmJ2CgEGZnJvbUJWAgNhY2MGcmVjaXBlBAFqCQCQAwEFA2FjYwQBYgkAyQECCQDKAQIFAmJ2CQBoAgAIBQFqAAgJAM0IAgUDYWNjCQCkAwEJALEJAQUBYgkAugkCCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBmZyb21CVgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAgFfARVjaGVja1N0YXRSZXF1aXJlbWVudHMCCWR1Y2tTdGF0cwRyZXFzCgEFY2hlY2sCA2FjYwFqBARidWZmAwkAZgIJAJADAQUJZHVja1N0YXRzCQBkAgAHBQFqCQCRAwIFCWR1Y2tTdGF0cwkAZAIABwUBagAAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRyZXFzBQFqCQBkAgkAkQMCBQlkdWNrU3RhdHMFAWoFBGJ1ZmYJAAIBCQCsAgICG1JlcXVpcmVtZW50IG5vdCBzYXRpc2ZpZWQ6IAkAkQMCBQxyZXF1aXJlbWVudHMFAWoGCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFY2hlY2sCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDcJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwEIYWRkUHJvZEIHBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eARzbG90CWR1Y2tTdGF0cwQFcGFydHMJALUJAgUGaWR4Q250AgE6AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4OmFtb3VudAMDCQEBIQEFCmlzUG9zaXRpdmUJAQIhPQIJALECAQkAkQMCBQVwYXJ0cwAAAAIHCQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMDCQBmAgAABQpwcm9kdWN0SWR4BgkAZwIFCnByb2R1Y3RJZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQJaXNCaWdJdGVtAwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcEBmNvbXBhdAkAkQMCBQZyZWNpcGUFCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1cHkgc2xvdCAwCQBmAgUJY051bVNsb3RzAAEHCQCUCgIJAMsBAgkAywECBQRoZWFkCQCaAwEJAGQCBQRjdXJyAwUKaXNQb3NpdGl2ZQUFY291bnQJAQEtAQUFY291bnQFBHRhaWwFCWlzQmlnSXRlbQELc2xvdHNHcm91cEIGAWcEYnBJbgppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eAVzdGF0cwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBXN0YXRzCQCUCgIFBGJwSW4HAwkBAiE9AgUCczECAAMIBQV0bXBTMAJfMgkAAgECHkJpZyBpdGVtIGFscmVhZHkgb2NjdXBpZXMgc2xvdAgJAQhhZGRQcm9kQgcFAnMxCAUFdG1wUzACXzEFCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAQUFc3RhdHMCXzEIBQV0bXBTMAJfMQUEYnBJbgEGZHJlc3NCBAdzZWdMaXN0BnBCeXRlcwppc1Bvc2l0aXZlBXN0YXRzCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQQHbWFpbkF1eAkAtQkCBQNzZWcCATsDCQECIT0CCQCQAwEFB21haW5BdXgFCk5VTU1BSU5BVVgJAAIBAhRXcm9uZyBzZWdtZW50IGZvcm1hdAQBbQkAkQMCBQdtYWluQXV4AAAEAWEJAJEDAgUHbWFpbkF1eAABAwMJAAACBQFtAgAJAAACBQFhAgAHCQCUCgIJAGQCBQFqAAEIBQNhY2MCXzIEBHRtcE0JAQtzbG90c0dyb3VwQgYFAW0IBQNhY2MCXzIFCmlzUG9zaXRpdmUFAWoAAAUFc3RhdHMJAJQKAgkAZAIFAWoAAQkBC3Nsb3RzR3JvdXBCBgUBYQUEdG1wTQUKaXNQb3NpdGl2ZQUBagABBQVzdGF0cwgKAAIkbAUHc2VnTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQZwQnl0ZXMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3NlZ21lbnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYCXzIBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQtkdWNrQXNzZXRJZAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEBmN1cnJFcQkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQMRU1QVFlfUFJPRDUwAZADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJdGVtcFByb2RCCQEGZHJlc3NCBAUGY3VyckVxBQxFTVBUWV9QUk9ENTAGBQNuaWwECHNlZ0JwQXV4CQCRAwIJALUJAgkAkQMCBQZjdXJyRXEFC3NlZ0JhY2twYWNrAgE7AAEECmJ1ZmZFZmZlY3QDCQAAAgUIc2VnQnBBdXgCAAAABARhdXgwCQCRAwIJALUJAgUIc2VnQnBBdXgCASwAAAMJAAACBQRhdXgwAgAAAAQGaWR4Q250CQC1CQIFBGF1eDACAToEA2lkeAkAkQMCBQZpZHhDbnQAAAQDY250CQCRAwIFBmlkeENudAABAwMDAwMJAAACBQNpZHgCAjA2BgkAAAIFA2lkeAICMDcGCQAAAgUDaWR4AgIwOAkBAiE9AgUDY250AgAHCQBmAgkBDXBhcnNlSW50VmFsdWUBBQNjbnQAAAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUGY3VyckVxBQl0ZW1wUHJvZEIHBQVzdGF0cwkAAAIFCG5ld1Byb2RCBQhuZXdQcm9kQgEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIcHJvcExpc3QNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24DCQECIT0CCQCQAwEFCHByb3BMaXN0BQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhCgEHdXBkYXRlcgIDYWNjAWkEBnJlc3VsdAkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9wTGlzdAUBaQkAaAIJAGgCBQRzaWduCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICFlBhbmljISBQaWVjZXMgb2YgdHlwZT0JAKQDAQUBaQIHLCBzaWduPQkApAMBBQRzaWduAhMsIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAgFfAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQZhZGRSZXMFCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BCXZpcnRDbGFpbQQNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAlAoCCQDNCAIIBQNhY2MCXzEFCXJlc09mVHlwZQkAZAIIBQNhY2MCXzIFCXJlc09mVHlwZQoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhhZGRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIFAXICAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8KAQxhZGRQYXJ0TGlzdHMCA2FjYwFpBAZ3aFBhcnQJAGsDCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCQCUCgIJAM0IAggFA2FjYwJfMQkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQUGd2hQYXJ0CQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFBndoUGFydAQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFkZFBhcnRMaXN0cwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIIBQFyAl8xAgFfCQC5CQIIBQFyAl8yAgFfAQNhYnMBAXgDCQDAAgIFAXgJALYCAQAABQF4CQC+AgEFAXgABGZyZXEJAMwIAgkAzAgCAAYJAMwIAgAJCQDMCAIADgkAzAgCAA8JAMwIAgAQBQNuaWwJAMwIAgkAzAgCAAUJAMwIAgAICQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAECQDMCAIACQkAzAgCAAoJAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAGCQDMCAIABwkAzAgCAA8JAMwIAgATBQNuaWwJAMwIAgkAzAgCAAQJAMwIAgAHCQDMCAIACAkAzAgCAA0JAMwIAgASBQNuaWwFA25pbAEHZ2VuQ2hhcgIBbgVmcmVxcwQDcmVtCQCgAwEJALsCAgUBbgUHVFdFTlRZWAQGbGV0dGVyAwkAZgIJAJEDAgUFZnJlcXMAAAUDcmVtAgFBAwkAZgIJAJEDAgUFZnJlcXMAAQUDcmVtAgFCAwkAZgIJAJEDAgUFZnJlcXMAAgUDcmVtAgFDAwkAZgIJAJEDAgUFZnJlcXMAAwUDcmVtAgFEAwkAZgIJAJEDAgUFZnJlcXMABAUDcmVtAgFFAgFGBQZsZXR0ZXIBC2dlblRlcnJhaW5zAgRzZWVkDGNvbnRpbmVudElkeAQBZgkAkQMCBQRmcmVxBQxjb250aW5lbnRJZHgKARB0ZXJyYWluR2VuZXJhdG9yAgNhY2MEZWxlbQkAlAoCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAggFA2FjYwJfMQkBB2dlbkNoYXICCAUDYWNjAl8yBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUHVFdFTlRZWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTJYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZM1gFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFk0WAUBZgkAugICCAUDYWNjAl8yBQhUV0VOVFk1WAQBdAoAAiRsCQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgIACQC6AgIFBHNlZWQFBUZJVkVYCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARB0ZXJyYWluR2VuZXJhdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQgFAXQCXzEABlBFUk0yNQkAzAgCAAcJAMwIAgACCQDMCAIADwkAzAgCABMJAMwIAgAICQDMCAIAGAkAzAgCAAEJAMwIAgAVCQDMCAIAEAkAzAgCAAUJAMwIAgAACQDMCAIAFgkAzAgCABQJAMwIAgAXCQDMCAIACwkAzAgCAAQJAMwIAgASCQDMCAIADAkAzAgCAAYJAMwIAgAKCQDMCAIAAwkAzAgCABEJAMwIAgANCQDMCAIACQkAzAgCAA4FA25pbAAGVENIQVJTCQDMCAICAUEJAMwIAgIBQgkAzAgCAgFDCQDMCAICAUQJAMwIAgIBRQkAzAgCAgFGBQNuaWwBE2dlblRlcnJhaW5zRm9yTWVyZ2UCC3N1bVRlcnJhaW5zDWxhbmRTaXplSW5kZXgKAQVzdGVwMQIDYWNjAXMEAWoIBQNhY2MCXzIEAmVsCQENcGFyc2VJbnRWYWx1ZQEFAXMEAXgDCQAAAgUCZWwAAAAAAwkAZwIFAmVsCQBoAgAEBQ1sYW5kU2l6ZUluZGV4CQBpAgUCZWwFDWxhbmRTaXplSW5kZXgDCQBmAgUCZWwJAGgCAAMFDWxhbmRTaXplSW5kZXgAAwkAZAIJAGkCCQBlAgUCZWwAAQUNbGFuZFNpemVJbmRleAABCQCVCgMJAM0IAggFA2FjYwJfMQUBeAkAZAIIBQNhY2MCXzIAAQkAZAIIBQNhY2MCXzMFAXgEAXQKAAIkbAULc3VtVGVycmFpbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBXN0ZXAxAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBANhcnIIBQF0Al8xBAZtYXhJZHgJAQV2YWx1ZQEJAM8IAgUDYXJyCQCWAwEFA2FycgQFZGVsdGEJAGUCCAUBdAJfMwAZCgEGc3ViYmVyAgNhY2MDaWR4BAN2YWwDCQAAAgUDaWR4BQZtYXhJZHgJAGUCCQCRAwIFA2FycgUDaWR4BQVkZWx0YQkAkQMCBQNhcnIFA2lkeAQGemVyb2VzAwkAAAIFA3ZhbAAABQNuaWwJALUJAgkAsAICCQCkAwEJAGwGAAoAAAUDdmFsAAAAAAUERE9XTgABAgAEAWMJAJEDAgUGVENIQVJTBQNpZHgKAQdsaXN0R2VuAgJhYwdpZ25vcmVkCQDNCAIFAmFjBQFjBAF6CgACJGwFBnplcm9lcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHbGlzdEdlbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQkAzggCBQNhY2MFAXoEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBnN1YmJlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBBnBlcm11dAIDYWNjAWoJAKwCAgUDYWNjCQCRAwIFAXIFAWoKAAIkbAUGUEVSTTI1CgACJHMJAJADAQUCJGwKAAUkYWNjMAIACgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZwZXJtdXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDI1CQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkBC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBCWN1cnJlbnRXaAQFZ29vZHMJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QKAQlzdW1SZXNNYXQCA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAQdzdW1Qcm9kAgNhY2MEaXRlbQQDaWR4CAUDYWNjAl8xBARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FDlBST0RVQ1RQS0dTSVpFAAEFDlBST0RVQ1RQS0dTSVpFCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAGgCBQRwa2dzBQVNVUxUOAQId2hSZXNWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQId2hNYXRWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQKd2hHb29kc1ZvbAMJAAACBQVnb29kcwIAAAAICgACJGwJALwJAgUFZ29vZHMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAAACgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdW1Qcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADICXzIJAGQCCQBkAgUId2hSZXNWb2wFCHdoTWF0Vm9sBQp3aEdvb2RzVm9sAQxnZXRXYXJlaG91c2UDBXdoS2V5CWxhbmRJbmRleAppbmZyYUxldmVsBAl2b2xQcmVmaXgJAKwCAgkArAICCQCkAwEFCWxhbmRJbmRleAIBXwkApAMBBQppbmZyYUxldmVsBAd3aFRvdGFsCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQl2b2xQcmVmaXgEBXdoU3RyCQELdmFsdWVPckVsc2UCCQCiCAEFBXdoS2V5CQCsAgIFCXZvbFByZWZpeAIbOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOjowBAJ3aAkAvAkCBQV3aFN0cgIBOgQKd2hPY2N1cGllZAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBndoTG9mdAMJAGYCAAUJAJADAQUCd2gJALkJAgkAzAgCAgEwCQDMCAIJAKQDAQUKd2hPY2N1cGllZAkAzAgCCQCkAwEJAGUCBQd3aFRvdGFsBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfBARsb2Z0CQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwQId2hMb2NrZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQEA29jYwMJAGYCCQCQAwEFBGxvZnQAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQp3aE9jY3VwaWVkCQC5CQIJAMwIAgkApAMBBQh3aExvY2tlZAkAzAgCCQCkAwEFA29jYwkAzAgCCQCkAwEJAGUCCQBlAgUHd2hUb3RhbAUId2hMb2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEJbW92ZVN0dWZmAwpjYXJnb1BhcnRzCWN1cnJlbnRXaAtjdXJyZW50UGFjawMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC8CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQLd2hTcGFjZUxlZnQJARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBBQljdXJyZW50V2gECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDmN1cnJlbnRQYWNrTWF0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA9jdXJyZW50UGFja1Byb2QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQNtdlICA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWkEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaFJlcwUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hyAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0EAXIKAAIkbAUIcmVzUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZSAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZNAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2htCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoTWF0BQFpBANicG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hNYXQFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBtAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2htCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3dobQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFtCgACJGwFCG1hdFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBcgJfNAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZNAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZQAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hwAwkAZgIJAJADAQUKY3VycldoUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJXaFByb2QFAWkAAAQDYnBwAwkAZgIJAJADAQUPY3VycmVudFBhY2tQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPY3VycmVudFBhY2tQcm9kBQFpAAADCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQDNCAIIBQNhY2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wDCQBmAgkBAS0BBQJhbQUDd2hwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAugkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAugkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALwJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALwJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBBQxvbGRGcm9tU3RhdGUCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgDCQEBIQEJARdjYW5XZWFyQ3VycmVudEVxdWlwbWVudAEFC2R1Y2tBc3NldElkCQACAQIWRXF1aXBtZW50IGluY29tcGF0aWJsZQQFYm9udXMDCQBmAgkAkAMBBQlmbGlnaHRMb2cFB2ZsQm9udXMJAJEDAgUJZmxpZ2h0TG9nBQdmbEJvbnVzAgAECHByb2RVc2VkAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAkAkQMCBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkAgAECnNlbnRBbW91bnQDAwkAZgIFBW5ld0hQAAAJAAACBQVib251cwIBJAcJAQVhc0ludAEJAPwHBAUMcmVzdENvbnRyYWN0Ag1zZW5kVXNkdFByaXplCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAAACQCXCgUFBW5ld0hQBQtkdWNrQXNzZXRJZAUKc2VudEFtb3VudAULbmV3TG9jYXRpb24FCHByb2RVc2VkAQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMzM2NzgzNDIxNwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAzMzY3ODM0MjE3Al8xBAZkdWNrSWQIBQ0kdDAzMzY3ODM0MjE3Al8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDM2NTkxMzc0NjIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDM2NTkxMzc0NjICXzEEBWJwUmVzCAUNJHQwMzY1OTEzNzQ2MgJfMgQFbG9mdE8IBQ0kdDAzNjU5MTM3NDYyAl8zBAVsb2Z0RggFDSR0MDM2NTkxMzc0NjICXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwMJAQEhAQUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBnAgUIY3VyTGV2ZWwAAwcJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbWF4SW5mcmEJAGQCCQBpAgkBBHNxcnQEBQZwaWVjZXMAAAAABQRET1dOAAUAAgQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABAwMFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZgIFCG5ld0xldmVsBQhtYXhJbmZyYQcJAAIBCQCsAgICJUN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAJAKQDAQUIbWF4SW5mcmEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EB21hdFVzZWQJAGsDBRFJbmZyYVVwZ3JhZGVDb3N0UwkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUHbWF0VXNlZAIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIIBQFjAl8yBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sEBndoRGF0YQgFC2NsYWltUmVzdWx0Al81BAZvbGRWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwQKbmV3Vm9sRGF0YQkAuQkCCQDMCAIJAJEDAgkAtQkCCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMCAV8AAAkAzAgCCQCkAwEFCG5ld0xldmVsBQNuaWwCAV8EBm5ld1ZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUKbmV3Vm9sRGF0YQQEbG9mdAkAtQkCCQCRAwIFBndoRGF0YQUJd2hJZHhMT0ZUAgFfBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkAzAgCCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBm5ld1ZvbAUGb2xkVm9sCQDMCAIJAKQDAQUGbmV3Vm9sBQNuaWwCAV8JAJUKAwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIJAMwIAgUKbmV3Vm9sRGF0YQkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhSZXMJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4TWF0CQDMCAIJAJEDAgUGd2hEYXRhBQl3aElkeFByb2QJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwFB21hdFVzZWQBE3VwZGF0ZVN0YXRzSW50ZXJuYWwEBmx2bEtleQV4cEtleQlwb2ludHNLZXkHZGVsdGFYUAQCeHAJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUGbHZsS2V5AAAFBW5ld1hQCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwb2ludHNLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCXBvaW50c0tleQAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAILZHVja0Fzc2V0SWQHZGVsdGFYUAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtkdWNrQXNzZXRJZAQEYWRkcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQULZHVja0Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMDBRNLU19BTExPV19ST0JPX0RVQ0tTCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwcJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQtST0JPX1BSRUZJWAcJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQlrZXlVc2VyWFABBQRhZGRyCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBQdkZWx0YVhQCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAkBCWtleUR1Y2tYUAEFC2R1Y2tBc3NldElkCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIEYWRkcgdkZWx0YVhQCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEJa2V5VXNlclhQAQUEYWRkcgkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgUHZGVsdGFYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCAULY2xhaW1SZXN1bHQCXzEJAQxJbnRlZ2VyRW50cnkCBQ1hY3RpdmF0aW9uS2V5BQZwaWVjZXMJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCAULY2xhaW1SZXN1bHQCXzUCAToBD2NoZWNrVG91cm5hbWVudAELZHVja0Fzc2V0SWQEBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFEnRvdXJuYW1lbnRDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAVQHAwMDCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIWZXhpdFRvdXJuYW1lbnRJbnRlcm5hbAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsBQNuaWwBDW1lcmdlSW50ZXJuYWwGC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIdbWVyZ2VJbnRlcm5hbF9jaGVja1RvdXJuYW1lbnQKAQpjaGVja01lcmdlAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJY29udGluZW50CQCRAwIFAWQFDHJlY0NvbnRpbmVudAMDCQECIT0CCAUDYWNjAl8zAgAJAQIhPQIIBQNhY2MCXzMFCWNvbnRpbmVudAcJAAIBAi5MYW5kcyBzaG91bGQgYmUgb24gdGhlIHNhbWUgY29udGluZW50IHRvIG1lcmdlBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQHc2l6ZXNJbggFA2FjYwJfMQQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCzCQIFB3NpemVzSW4FCGxhbmRTaXplAidZb3UgaGF2ZW4ndCBwYXNzZWQgYWxsIHRoZSBsYW5kcyBuZWVkZWQECHNpemVzT3V0CQCsAgIJAK8CAgUHc2l6ZXNJbgUBaQkAsAICBQdzaXplc0luCQBkAgUBaQABBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQEYXJ0cwkAZAIIBQNhY2MCXzIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECHJlcUxldmVsBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwAAMDCQAAAgIBTQUHJG1hdGNoMAAEAwkAAAICAUwFByRtYXRjaDAABQMJAAACAgJYTAUHJG1hdGNoMAAGCQACAQIaT25seSBTLCBNLCBMLCBYTCBjYW4gbWVyZ2UDCQECIT0CBQppbmZyYUxldmVsBQhyZXFMZXZlbAkAAgECIkFsbCBsYW5kcyBzaG91bGQgYmUgbWF4ZWQgdG8gbWVyZ2UEB2xhbmROdW0JAJEDAgUBZAUKcmVjTGFuZE51bQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVicFJlcwkBBmFkZFJlcwUJALUJAggFA2FjYwJfNAIBXwUNdGVycmFpbkNvdW50cwUJZGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzYFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAZjUHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwNfMTAFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAtzdW1UZXJyYWlucwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl85BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAnAoKBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzggCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFA2FjYwJfNQkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQUJY3VzdG9tS2V5CQEEQnVybgIJANkEAQULbGFuZEFzc2V0SWQAAQMJAQIhPQIFCmN1c3RvbU5hbWUCAAkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBQNuaWwFA25pbAUFcHJvcHMJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAkAZAIIBQNhY2MCXzgFBnBpZWNlcwULc3VtVGVycmFpbnMFBmNQcm9wcwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEB2xhbmRzSW4DCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAQFY29udDAJAJEDAgkAtQkCCAkBBXZhbHVlAQkA7AcBCQDZBAEJAJEDAgUMbGFuZEFzc2V0SWRzAAALZGVzY3JpcHRpb24CAV8FDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQVjb250MAILMF8wXzBfMF8wXzACAV8EAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnAoKBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUIcHJvcExpc3QFB2xhbmRzSW4AAAkAtQkCAgswXzBfMF8wXzBfMAIBXwUJY29udFByb3BzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJARNnZW5UZXJyYWluc0Zvck1lcmdlAggFAXICXzkJAGkCCQEPbnVtUGllY2VzQnlTaXplAQULbmV3TGFuZFNpemUFBVNTSVpFBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEECm5ld0xhbmROdW0JAKQDAQUHZnJlZU51bQQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQpuZXdMYW5kTnVtBQtuZXdMYW5kU2l6ZQkAuQkCCQDMCAIFCm5ld0xhbmROdW0JAMwIAgULbmV3TGFuZFNpemUJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQObmV3TGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMJAGYCBQduZWVkTWF0AAAJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8FB25lZWRNYXQCAV8ECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAggFAXICXzgFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzCAUBcgJfOAkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABBQVpc3N1ZQkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQpuZXdMYW5kTnVtBQ5uZXdMYW5kQXNzZXRJZAkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDm5ld0xhbmRBc3NldElkBQRhZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQpuZXdMYW5kTnVtBQRhZGRyCQEMSW50ZWdlckVudHJ5AgkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACQC5CQIIBQFyAl82AgFfCQELU3RyaW5nRW50cnkCCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFCWNvbnRpbmVudAkAuQkCCAUBcgNfMTACAV8JAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTQADAgRTU1NTBQRhZGRyBQxsYW5kQXNzZXRJZHMAAAEDbTJsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFMAAQCA1NNTQUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMABAEEbDJ4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgICWEwABQIFU1NTTUwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAC8BBnhsMnh4bAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIDWFhMAAYCA0xYTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMANgELbWVyZ2VDb21tb24CBGFkZHIMbGFuZEFzc2V0SWRzBAckbWF0Y2gwCQCQAwEFDGxhbmRBc3NldElkcwMJAAACAAQFByRtYXRjaDAJAQNzMm0CBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgADBQckbWF0Y2gwCQEDbTJsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIABQUHJG1hdGNoMAkBBGwyeGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzCQACAQINVW5rbm93biBtZXJnZQEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBQNuaWwpAWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQtzYXZlSW50ZWdlcgIDa2V5BmFtb3VudAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECIHNhdmVJbnRlZ2VyIGlzIG5vdCBwdWJsaWMgbWV0aG9kCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFBmFtb3VudAUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkxBTkRQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFBHRoaXMJAAIBAhdVbmtub3duIGlzc3VlciBvZiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkxBTkRQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpMQU5EUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQLbGFuZE51bVNpemUJALACAggFBWFzc2V0BG5hbWUABAQHbGFuZE51bQMJAQhjb250YWlucwIFC2xhbmROdW1TaXplAgNYWEwJALMCAgULbGFuZE51bVNpemUAAwMJAQhjb250YWlucwIFC2xhbmROdW1TaXplAgJYTAkAswICBQtsYW5kTnVtU2l6ZQACCQCzAgIFC2xhbmROdW1TaXplAAEDCQEBIQEJAQlpc0RlZmluZWQBCQC2CQEFB2xhbmROdW0JAAIBCQCsAgICHkNhbm5vdCBwYXJzZSBsYW5kIG51bWJlciBmcm9tIAgFBWFzc2V0BG5hbWUEC2xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQMcmVzQnlDb250S2V5CQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJAJEDAgUBZAUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQxyZXNCeUNvbnRLZXkCCzBfMF8wXzBfMF8wAgFfBBB1cGRhdGVkQ29udFByb3BzCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUJY29udFByb3BzBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQIBXwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQVsYW5kcwULbGFuZEFzc2V0SWQJAAIBCQCsAgICIllvdXIgc3Rha2VkIGxhbmRzIGFscmVhZHkgY29udGFpbiAFC2xhbmRBc3NldElkAwkAZwIJAJADAQUFbGFuZHMFGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgkAAgEJAKwCAgkArAICAhlZb3VyIGFscmVhZHkgc3Rha2VkIG1heCAoCQCkAwEFGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgIHKSBsYW5kcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzBAlvbGRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJAM0IAgUFbGFuZHMFC2xhbmRBc3NldElkAgFfCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkJAGQCBQlvbGRQaWVjZXMFBnBpZWNlcwkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUHYWRkcmVzcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEAWQIBQFjAl8zBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCBQxyZXNCeUNvbnRLZXkFEHVwZGF0ZWRDb250UHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMFA25pbAUNcHJvbG9nQWN0aW9ucwUJd2xnUmVzdWx0AWkBCXN0YWtlRHVjawAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQGaXNSb2JvAwMFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAACCAUFYXNzZXQGaXNzdWVyBQR0aGlzBwkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFC1JPQk9fUFJFRklYBwMDAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUNaW5jdWJhdG9yQWRkcgkBAiE9AggFBWFzc2V0Bmlzc3VlcgULYnJlZWRlckFkZHIHCQEBIQEFBmlzUm9ibwcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICElVua25vd24gaXNzdWVyIG9mIAUKRFVDS1BSRUZJWAIEIG9yIAULUk9CT19QUkVGSVgCBiB0b2tlbgMDCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQEBIQEFBmlzUm9ibwcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIEIG9yIAULUk9CT19QUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAphc3NldElkU3RyCQDYBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAMJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgICHVlvdSBhbHJlYWR5IHN0YWtlZCBvbmUgZHVjazogCAUFYXNzZXQEbmFtZQQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgQIbG9jYXRpb24JAKIIAQUGbG9jS2V5BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFCGJhY2twYWNrBQNuaWwJAM4IAgkAzQgCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQljdXJIZWFsdGgFDXByb2xvZ0FjdGlvbnMBaQELdW5zdGFrZUR1Y2sBCmFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMDCQEPY2hlY2tUb3VybmFtZW50AQUKYXNzZXRJZFN0cgkAAgECG3Vuc3Rha2VEdWNrX2NoZWNrVG91cm5hbWVudAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQVtYXhIUAUGaGVhbHRoCQACAQkArAICCQCsAgICGVBsZWFzZSBoZWFsIHlvdXIgZHVjayB0byAJAKQDAQUFbWF4SFACE2hwIGJlZm9yZSB1bnN0YWtpbmcJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFA25pbAUNcHJvbG9nQWN0aW9ucwFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQ1wcm9sb2dBY3Rpb25zCQCRAwIIBQZyZXN1bHQCXzMFCGJwSWR4UmVzAWkBDGNsYWltUmVzVG9XSAIGYW1vdW50DmxhbmRBc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQ1wcm9sb2dBY3Rpb25zCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEBW5ld0hQCAUBZgJfMQQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EC25ld0xvY2F0aW9uCAUBZgJfNAMJAAACBQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uBAZuZXdMb2MJALUJAgULbmV3TG9jYXRpb24CAV8EBmlzVG91cgkAAAIJAJEDAgUGbmV3TG9jBQpsb2NJZHhUeXBlAgFUBAdpc0RlbGl2CQAAAgkAkQMCBQZuZXdMb2MFCmxvY0lkeFR5cGUCAUQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBA0kdDA2NjM3MDY2NDc2CQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81BAVuZXdFcQgFDSR0MDY2MzcwNjY0NzYCXzEED3Nob3VsZFplcm9CdWZmcwgFDSR0MDY2MzcwNjY0NzYCXzIEB2lnbm9yZWQIBQ0kdDA2NjM3MDY2NDc2Al8zBA0kdDA2NjQ3OTY4MzExAwkBASEBCQEJb25NaXNzaW9uAgUSdG91cm5hbWVudENvbnRyYWN0BQtjdXJMb2NhdGlvbgMFBmlzVG91cgkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAFAwkBASEBBQdpc0RlbGl2AwkAZgIFBW5ld0hQAAAJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQCUCgIFC2N1ckxvY2F0aW9uAAADCQBmAgUFbmV3SFAAAAQBcwkA/AcEBQR0aGlzAg9wcm9jZXNzRGVsaXZlcnkJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFAXMFAXMJAJQKAgULY3VyTG9jYXRpb24FBW5ld0hQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFC2N1ckxvY2F0aW9uAAADCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC25ld0xvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQEBmN1ckxvYwkAtQkCBQtjdXJMb2NhdGlvbgIBXwQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAAAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAAcDCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgULY3VyTG9jYXRpb24AAAkAAgEJAKwCAgIUVW5rbm93biBjdXJMb2NhdGlvbjoFC2N1ckxvY2F0aW9uBAlsb2NUb1NhdmUIBQ0kdDA2NjQ3OTY4MzExAl8xBAhocFRvU2F2ZQgFDSR0MDY2NDc5NjgzMTECXzIJAJQKAgkAzggCCQDOCAIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFCWxvY1RvU2F2ZQkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFCGhwVG9TYXZlBQNuaWwFDXByb2xvZ0FjdGlvbnMDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAgUFbmV3SFAAAAUPeHBTdWNjZXNzRmxpZ2h0BQx4cEZhaWxGbGlnaHQCXzEIBQFmAl8zAWkBBGhlYWwDCnF1YW50aXR5TDEKcXVhbnRpdHlMMgpxdWFudGl0eUwzBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIUaGVhbF9jaGVja1RvdXJuYW1lbnQEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjBnJlY2lwZQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUGcmVjaXBlAgFfBQpySWR4RWZmZWN0BQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCCAUGcmVzdWx0Al8xAgFfBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIWaGVhbEVTX2NoZWNrVG91cm5hbWVudAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAvAkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBQpySWR4RWZmZWN0BAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEPY29tbWl0Rm9yUmFuZG9tAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUNcHJvbG9nQWN0aW9ucwULZmluaXNoQmxvY2sBaQEMcmV2ZWFsUmFuZG9tAQhtYXhWYWx1ZQQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAlmaW5pc2hLZXkJAQlrZXlDb21taXQBBQRhZGRyBAtmaW5pc2hCbG9jawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFCWZpbmlzaEtleQIkWW91IGhhdmUgdG8gY29tbWl0Rm9yUmFuZG9tKCkgZmlyc3QhAwkAZgIFC2ZpbmlzaEJsb2NrBQZoZWlnaHQJAAIBCQCsAgICNFJhbmRvbSBudW1iZXIgaXMgbm90IHJlYWR5IHlldCwgd2FpdCB1bnRpbCBoZWlnaHQgPSAJAKQDAQULZmluaXNoQmxvY2sEB2VudHJvcHkJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEFC2ZpbmlzaEJsb2NrA3ZyZgQEc2FsdAkAmwMBCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFBGFkZHICAAQEcmFuZAkBD2dldFJhbmRvbU51bWJlcgMFCG1heFZhbHVlBQRzYWx0BQdlbnRyb3B5CQCUCgIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBBQlmaW5pc2hLZXkFA25pbAUNcHJvbG9nQWN0aW9ucwUEcmFuZAFpAQhidXlTTGFuZAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwNzYyMzE3NjMzNwkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA3NjIzMTc2MzM3Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA3NjIzMTc2MzM3Al8yBAdpZ25vcmVkCAUNJHQwNzYyMzE3NjMzNwJfMwQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQCaWQICAUBZQJfMgJfMQQGcmVzdWx0AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAACQCVCgMJAM4IAggFAWUCXzEDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzQgCCQDNCAIJAM0IAgkAzQgCBQNuaWwJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGmV4cGVkaXRpb25fY2hlY2tUb3VybmFtZW50BAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCVCgMIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMFC2FjcmVzUmVzdWx0AWkBEGJ1eVNMYW5kRm9yQWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDFNfQ09TVF9BQ1JFUwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFDFNfQ09TVF9BQ1JFUwQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGFjcmVzQXNzZXRJZAUDYW10BQNuaWwJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQx1cGdyYWRlSW5mcmEBC2xhbmRBc3NldElkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQUNcHJvbG9nQWN0aW9ucwgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzggCBQZyZXN1bHQFDXByb2xvZ0FjdGlvbnMBaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBQxsYW5kQXNzZXRJZHMJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEFDXByb2xvZ0FjdGlvbnMICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6BQNuaWwFDXByb2xvZ0FjdGlvbnMBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPAwkAZgIAAAUFbG9mdEYJAAIBAjBPcGVyYXRpb24gbGVhZHMgdG8gbmVnYXRpdmUgZnJlZSB3YXJlaG91c2Ugc3BhY2UECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUMUkVOQU1JTkdDT1NUCQACAQkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM4IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUNcHJvbG9nQWN0aW9ucwAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgQKbmV3YmllQWRkcgkApggBBQluZXdQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBBQpuZXdiaWVBZGRyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAlvbGRMYXN0VHgJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQUJb2xkTGFzdFR4CQACAQIib2xkUGxheWVyIGRpZG4ndCBkbyBhbnkgdHggaW4gZ2FtZQMJAGcCAAAICQDvBwEJAQV2YWx1ZQEFCm5ld2JpZUFkZHIJYXZhaWxhYmxlCQACAQIWbmV3UGxheWVyIGhhcyBubyBXQVZFUwQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMFA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBEGRpc3RyaWJ1dGVQb2ludHMFCHN0cmVuZ3RoCGFjY3VyYWN5CWludGVsbGVjdAllbmR1cmFuY2UJZGV4dGVyaXR5BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLdmlydFdsZ0RhdGEJAQlhc0FueUxpc3QBCQD8BwQFC3dsZ0NvbnRyYWN0AhJjaGVja1dsZ1hwUkVBRE9OTFkJAMwIAgUEYWRkcgUDbmlsBQNuaWwEDXZpcnRXbGdQb2ludHMJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAQQNJHQwOTIxNDk5MjUzOQMJAGcCAAAFDXZpcnRXbGdQb2ludHMJAJQKAgAABQNuaWwEB2RlbHRhWFAJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCCXRha2VXbGdYcAkAzAgCBQRhZGRyBQNuaWwFA25pbAMJAAACBQdkZWx0YVhQBQdkZWx0YVhQCQCUCgIFDXZpcnRXbGdQb2ludHMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEFYXNJbnQBCQCRAwIFC3ZpcnRXbGdEYXRhAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlVc2VyWFABBQRhZGRyCQEFYXNJbnQBCQCRAwIFC3ZpcnRXbGdEYXRhAAIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQJd2xnUG9pbnRzCAUNJHQwOTIxNDk5MjUzOQJfMQQKd2xnQWN0aW9ucwgFDSR0MDkyMTQ5OTI1MzkCXzIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUKZnJlZUtleUFjYwAABQl3bGdQb2ludHMEC2ZyZWVLZXlEdWNrCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAQOZnJlZVBvaW50c0R1Y2sJAQt2YWx1ZU9yRWxzZQIJAJ8IAQULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmZyZWVLZXlBY2MDCQBmAgAABQZuZXdBY2MAAAUGbmV3QWNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtmcmVlS2V5RHVjawMJAGYCAAAFBm5ld0FjYwkAZAIFDmZyZWVQb2ludHNEdWNrBQZuZXdBY2MFDmZyZWVQb2ludHNEdWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGNoYXJzS2V5CQC5CQIJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgFCHN0cmVuZ3RoCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5BQhhY2N1cmFjeQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QFCWludGVsbGVjdAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UFCWVuZHVyYW5jZQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkFCWRleHRlcml0eQUDbmlsAgFfBQNuaWwFDXByb2xvZ0FjdGlvbnMFCndsZ0FjdGlvbnMAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFEnRvdXJuYW1lbnRDb250cmFjdAkAzAgCBQ1hY3Jlc0NvbnRyYWN0BQNuaWwIBQFpBmNhbGxlcgkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkBBnByb2xvZwEFAWkAKgFpAQ91cGRhdGVEdWNrU3RhdHMCC2R1Y2tBc3NldElkB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQdkZWx0YVhQAWkBDnVwZGF0ZUFjY1N0YXRzAgRhZGRyB2RlbHRhWFADCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFD2Vjb25vbXlDb250cmFjdAkAzAgCBQ1hY3Jlc0NvbnRyYWN0BQNuaWwIBQFpBmNhbGxlcgkAAgECDUFjY2VzcyBkZW5pZWQJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUHZGVsdGFYUAFpAQllcXVpcER1Y2sBCWVxdWlwbWVudAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGWVxdWlwRHVja19jaGVja1RvdXJuYW1lbnQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQJdGVtcFByb2RCCQEGZHJlc3NCBAULY3VycmVudFNlZ3MJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAYFA25pbAQIc2VnQnBBdXgJAJEDAgkAtQkCCQCRAwIFBW5ld0VxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBW5ld0VxBQl0ZW1wUHJvZEIHBQVzdGF0cwQKbmV3UHJvZFN0cgkBDmJ5dGVzVG9Qcm9kU3RyAQUIbmV3UHJvZEIJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCQCkAwEJAJEDAgUFc3RhdHMABwkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACAkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACQkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACgkAzAgCCQCkAwEJAJEDAgUFc3RhdHMACwUDbmlsAgFfBQNuaWwFDXByb2xvZ0FjdGlvbnMAAAFpARNpbml0RHVja1RvdXJBdHRlbXB0AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQMdG91ckxvY2F0aW9uCQCsAgIJAKQDAQUGbGFzdElkAgRfVF8wCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBQljdXJIZWFsdGgJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbWF4SFAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAULY3VyTG9jYXRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQx0b3VyTG9jYXRpb24FA25pbAUMdG91ckxvY2F0aW9uAWkBDGJyZWFrQXR0ZW1wdAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQECIT0CCQCRAwIJALUJAgULY3VyTG9jYXRpb24CAV8FCmxvY0lkeFR5cGUCAVQJAAIBAiJZb3VyIGR1Y2sgaXMgbm90IGluIHRoZSB0b3VybmFtZW50BAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzQgCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkBC1N0cmluZ0VudHJ5AgUJY3VyTG9jS2V5BQ1zYXZlZExvY2F0aW9uBQtjdXJMb2NhdGlvbgFpARRicmVha0F0dGVtcHRDYWxsYmFjawADCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQNuaWwCFGJyZWFrQXR0ZW1wdENhbGxiYWNrAWkBFmV4aXRUb3VybmFtZW50SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUNc2F2ZWRMb2NhdGlvbgUDbmlsBwFpAQ9wcm9jZXNzRGVsaXZlcnkBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFD2RlbGl2ZXJ5RnVuZEtleQAAAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUJZnVuZFRvdGFsCQACAQkArAICAiBEZWxpdmVyeSBpcyBub3QgYXZhaWxhYmxlLCBmdW5kPQkBCmZpeGVkUG9pbnQCBQlmdW5kVG90YWwABgQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQIY291bnRLZXkJARRrZXlVc2VyRGVsaXZlcnlDb3VudAEFBGFkZHIEB2xhc3REYXkJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBQRhZGRyAAAEBXRvZGF5CQBpAgUDbm93BQlEQVlNSUxMSVMEBWNvdW50AwkAAAIFB2xhc3REYXkFBXRvZGF5CQELdmFsdWVPckVsc2UCCQCfCAEFCGNvdW50S2V5AAAAAAQFYWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNYWNyZXNDb250cmFjdAkBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQUEYWRkcgAABBFhbGxvd2VkRGVsaXZlcmllcwkAZAIFF0FMTE9XRURfRlJFRV9ERUxJVkVSSUVTCQBpAgUFYWNyZXMFGkFDUkVTX0ZPUl9ERUxJVkVSWV9BVFRFTVBUAwkAZwIFBWNvdW50BRFhbGxvd2VkRGVsaXZlcmllcwkAAgEJAKwCAgkArAICAhFZb3UgYWxyZWFkeSB1c2VkIAkApAMBBRFhbGxvd2VkRGVsaXZlcmllcwIcIGRlbGl2ZXJ5IGF0dGVtcHRzIGZvciB0b2RheQQOZ2xvYmFsQ291bnRLZXkJARRrZXlEdWNrRGVsaXZlcnlDb3VudAEFC2R1Y2tBc3NldElkBAZyZXdhcmQJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhJzZW5kRGVsaXZlcnlSZXdhcmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIY291bnRLZXkJAGQCBQVjb3VudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBGFkZHIFBXRvZGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5nbG9iYWxDb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOZ2xvYmFsQ291bnRLZXkAAAABBQNuaWwFBnJld2FyZAFpAQdyb2JMYW5kAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQGd2xnQW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFCndsZ0Fzc2V0SWQJAAIBAhVXTEdPTEQgcGF5bWVudHMgb25seSEDCQECIT0CBQZ3bGdBbXQFEk1JTl9XTEdPTERfUk9CQkVSWQkAAgEJAKwCAgkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAQpmaXhlZFBvaW50AgUSTUlOX1dMR09MRF9ST0JCRVJZAAgCByBXTEdPTEQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAvAkCCQCwCQEFB21lc3NhZ2UCATsEBnJvYkxvZwkAvAkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUGcm9iTG9nBQhybEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEECHByb2RVc2VkCQCRAwIFBnJvYkxvZwULcmxQcm9kc1VzZWQECGxhc3RQYXJ0CQC1CQIJAJEDAgUFcGFydHMAAQIBfAQHcm9iVHlwZQkAkQMCBQhsYXN0UGFydAUGcmxUeXBlAwkBAiE9AgUHcm9iVHlwZQIBQgkAAgECHk9ubHkgYmFuayByb2JiZXJ5IGlzIHN1cHBvcnRlZAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCGxhc3RQYXJ0BQtybFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQhsYXN0UGFydAUIcmxMYXN0VHgEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQRhZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDyR0MDEwOTcxNzEwOTgyOAkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxBQhwcm9kVXNlZAQFbmV3RXEIBQ8kdDAxMDk3MTcxMDk4MjgCXzEED3Nob3VsZFplcm9CdWZmcwgFDyR0MDEwOTcxNzEwOTgyOAJfMgQIaXNCcFVzZWQIBQ8kdDAxMDk3MTcxMDk4MjgCXzMEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAwkBDmlzSW5Ub3VybmFtZW50AgUSdG91cm5hbWVudENvbnRyYWN0BQtjdXJMb2NhdGlvbgkAAgECKllvdXIgZHVjayBpcyB0YWtpbmcgcGFydCBpbiB0aGUgdG91cm5hbWVudAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQIY291bnRLZXkJARNrZXlVc2VyUm9iYmVyeUNvdW50AQUEYWRkcgQHbGFzdERheQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEVa2V5VXNlckxhc3RSb2JiZXJ5RGF5AQUEYWRkcgAABAV0b2RheQkAaQIFA25vdwUJREFZTUlMTElTBAVjb3VudAMJAAACBQdsYXN0RGF5BQV0b2RheQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhjb3VudEtleQAAAAAEBWFjcmVzCQELdmFsdWVPckVsc2UCCQCaCAIFDWFjcmVzQ29udHJhY3QJARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEFBGFkZHIAAAQQYWxsb3dlZFJvYmJlcmllcwkAZAIFFkFMTE9XRURfRlJFRV9ST0JCRVJJRVMJAGkCBQVhY3JlcwUZQUNSRVNfRk9SX1JPQkJFUllfQVRURU1QVAMJAGcCBQVjb3VudAUQYWxsb3dlZFJvYmJlcmllcwkAAgEJAKwCAgkArAICAhFZb3UgYWxyZWFkeSB1c2VkIAkApAMBBRBhbGxvd2VkUm9iYmVyaWVzAhsgcm9iYmVyeSBhdHRlbXB0cyBmb3IgdG9kYXkEDmdsb2JhbENvdW50S2V5CQETa2V5RHVja1JvYmJlcnlDb3VudAEFC2R1Y2tBc3NldElkBARsb290AwkAZgIFBW5ld0hQAAAECWZ1bmRUb3RhbAkA8AcCBQR0aGlzBQp3bGdBc3NldElkBAVwcml6ZQMFCGlzQnBVc2VkCQBoAgACBRJNSU5fV0xHT0xEX1JPQkJFUlkJAGgCAAUFEk1JTl9XTEdPTERfUk9CQkVSWQMJAGYCBQVwcml6ZQUJZnVuZFRvdGFsCQACAQkArAICCQCsAgIJAKwCAgIiUm9iYmVyeSBpcyBub3QgYXZhaWxhYmxlLCBmdW5kcyA9IAkBCmZpeGVkUG9pbnQCBQlmdW5kVG90YWwACAIUIFdMR09MRCwgcmVxdWlyZWQgPSAJAQpmaXhlZFBvaW50AgUFcHJpemUACAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBXByaXplBQp3bGdBc3NldElkBQNuaWwFA25pbAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDOCAIJAM4IAgkAzggCBQ1wcm9sb2dBY3Rpb25zBQRsb290AwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIFBW5ld0hQAAAFDHhwU3VjY2Vzc1JvYgUJeHBGYWlsUm9iAl8xCQEMSW50ZWdlckVudHJ5AgkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkBQNub3cJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIFBWNvdW50AAEJAQxJbnRlZ2VyRW50cnkCCQEVa2V5VXNlckxhc3RSb2JiZXJ5RGF5AQUEYWRkcgUFdG9kYXkJAQxJbnRlZ2VyRW50cnkCBQ5nbG9iYWxDb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOZ2xvYmFsQ291bnRLZXkAAAABCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQCWAwEJAMwIAgUFbmV3SFAJAMwIAgAABQNuaWwAAAFpAQtidXlSb2JvRHVjawADCQEBIQEFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAIBAhVGZWF0dXJlIGlzIHR1cm5lZCBvZmYEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUOUk9CT19EVUNLX1VTRFQJAAIBCQCsAgIJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFDlJPQk9fRFVDS19VU0RUAAYCBSBVU0RUBAduZXh0TnVtCQELdmFsdWVPckVsc2UCCQCfCAEJAQ9rZXlOZXh0Um9ib0R1Y2sAAAAEBWJ5dGV6CQCaAwEFB25leHROdW0EBG5hbWUJAKwCAgkArAICBQtST0JPX1BSRUZJWAIBLQkAsgICCQDcBAEFBWJ5dGV6AAgEBWNvbG9yCQCyAgIJANwEAQkA1BYBBQVieXRlegAGBAVpc3N1ZQkAwggFBQRuYW1lCQCsAgICN1JvYm8gRHVjayBORlQgZm9yIFdhdmVzTGFuZHMgZ2FtZSwgYmFja2dyb3VuZCBjb2xvciA9ICMFBWNvbG9yAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBD2tleU5leHRSb2JvRHVjawAJAGQCBQduZXh0TnVtAAEFBWlzc3VlCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQxvcmlnaW5DYWxsZXIAAQUHYXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQJAJQKAgkA2AQBBQdhc3NldElkBQVjb2xvcgBQdjGR", "height": 2908526, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3SQXtVVxLUUN5jytAaq6AuXuiUGHmAhFhVTyCv3v6nCW Next: 7YtfLVRpbiGN3Dc1uuTqV9RS47mUbvj6fWrGgoCDQrSV Diff:
OldNewDifferences
1717
1818 let h = 3
1919
20-let i = 100000000
21-
22-let j = 400
23-
24-let k = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
25-
26-let l = 0
27-
28-let m = 1
29-
30-let n = 2
31-
32-let o = 3
33-
34-let p = 4
35-
36-let q = 0
37-
38-let r = 6
39-
40-let s = 2
41-
42-let t = 2
43-
44-let u = 30
45-
46-let v = [0, 600000, 900000, 43200000, 21600000]
47-
48-let w = 20000000
49-
50-let x = 1
51-
52-let y = 0
53-
54-let z = 1
55-
56-func A (B) = ("duckHealth_" + B)
57-
58-
59-func C (B) = ("duckChars_" + B)
60-
61-
62-func D (B) = ("duckXP_" + B)
63-
64-
65-func E (B) = ("duckLevel_" + B)
66-
67-
68-func F (B) = ("duckFreePoints_" + B)
69-
70-
71-func G (B) = ("duckEquipment_" + B)
72-
73-
74-func H (c) = ("userXP_" + c)
75-
76-
77-func I (c) = ("userLevel_" + c)
78-
79-
80-func J (c) = ("userFreePoints_" + c)
81-
82-
83-func K (B) = ("savedHealth_" + B)
84-
85-
86-func L (B) = ("savedLocation_" + B)
87-
88-
89-func M (B) = ("duckBuffs_" + B)
90-
91-
92-func N (B) = ("lastRobberyTime_" + B)
93-
94-
95-func O (B) = ("lastRobberyCost_" + B)
96-
97-
98-func P (Q) = ("landRobberyState_" + Q)
99-
100-
101-func R (Q) = ("landCooldownETA_" + Q)
102-
103-
104-func S (B) = ("duckRobberyState_" + B)
105-
106-
107-func T (B) = ("lockedLandByDuck_" + B)
108-
109-
110-func U (B) = ("totalDeliveryCountByDuck_" + B)
111-
112-
113-func V (c) = ("userDeliveryCount_" + c)
114-
115-
116-func W (c) = ("userLastDeliveryDay_" + c)
117-
118-
119-let X = 10000
20+let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
21+
22+let j = 0
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 0
33+
34+let p = 6
35+
36+let q = 2
37+
38+let r = 2
39+
40+let s = 30
41+
42+func t (u) = ("duckHealth_" + u)
43+
44+
45+func v (u) = ("duckChars_" + u)
46+
47+
48+func w (u) = ("duckXP_" + u)
49+
50+
51+func x (u) = ("duckLevel_" + u)
52+
53+
54+func y (u) = ("duckFreePoints_" + u)
55+
56+
57+func z (u) = ("duckEquipment_" + u)
58+
59+
60+func A (c) = ("userXP_" + c)
61+
62+
63+func B (c) = ("userLevel_" + c)
64+
65+
66+func C (c) = ("userFreePoints_" + c)
67+
68+
69+func D (u) = ("savedHealth_" + u)
70+
71+
72+func E (u) = ("savedLocation_" + u)
73+
74+
75+func F (u) = ("duckBuffs_" + u)
76+
77+
78+func G (u) = ("lastRobberyTime_" + u)
79+
80+
81+func H (u) = ("totalRobberyCountByDuck_" + u)
82+
83+
84+func I (c) = ("userRobberyCount_" + c)
85+
86+
87+func J (c) = ("userLastRobberyDay_" + c)
88+
89+
90+func K (u) = ("totalDeliveryCountByDuck_" + u)
91+
92+
93+func L (c) = ("userDeliveryCount_" + c)
94+
95+
96+func M (c) = ("userLastDeliveryDay_" + c)
97+
98+
99+let N = 10000
100+
101+let O = 10000
102+
103+let P = 2000
104+
105+let Q = 10000
106+
107+let R = 2000
108+
109+let S = 100000
110+
111+let T = 1000000
112+
113+let U = 5000000
114+
115+let V = 10000
116+
117+let W = 1000000
118+
119+let X = 1000000
120120
121121 let Y = 10000
122122
123-let Z = 2000
124-
125-let aa = 100000
126-
127-let ab = 1000000
128-
129-let ac = 5000000
130-
131-let ad = 10000
132-
133-let ae = 1000000
134-
135-let af = 1000000
136-
137-let ag = 10000
138-
139-func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e)
140-
141-
142-func aj (ak) = (100 + ak)
143-
144-
145-func al (am,an) = {
146- let ao = ah(an)
147-[ao, (h * (ao - am))]
148- }
149-
150-
151-func ap (aq,B,ar,as) = {
152- let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_")
153- let au = valueOrElse(getInteger(aq, E(B)), 0)
154- let av = valueOrElse(getInteger(aq, A(B)), aj(au))
155- let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_")
156- ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as)
157- then [ar, ar, ar, ar, ar]
158- else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])]))
159- }
160-
161-
162-func ax (aq,B) = {
163- let ay = valueOrElse(getInteger(aq, O(B)), 0)
164- let az = valueOrElse(getInteger(aq, N(B)), 0)
165- let aA = lastBlock.timestamp
166- let aB = max([i, (ay - (j * (aA - az)))])
167- let aC = valueOrElse(getInteger(aq, S(B)), 0)
168- let aD = valueOrElse(getString(aq, T(B)), "")
169- let aE = valueOrElse(getInteger(aq, R(aD)), 0)
170- $Tuple5(aB, az, aC, aD, aE)
171- }
172-
173-
174-let aF = "LAND"
175-
176-let aG = "DUCK"
177-
178-let aH = "ROBO"
179-
180-let aI = "PRESALE"
181-
182-let aJ = 6
183-
184-let aK = 25
185-
186-let aL = 3456000
187-
188-let aM = 10000000000
189-
190-let aN = "Africa_F_Africa"
191-
192-let aO = 39637
193-
194-let aP = 10
195-
196-let aQ = 50000
197-
198-let aR = 0
199-
200-let aS = 200000000
201-
202-let aT = ["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", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
203-
204-let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
205-
206-let aV = 10000000
207-
208-let aW = [15, 16, 17, 18, 19, 20, 21, 22, 23]
209-
210-let aX = ["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_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
211-
212-let aY = 6
213-
214-let aZ = 8
215-
216-let ba = 9
217-
218-let bb = 10
219-
220-let bc = 10
221-
222-let bd = 0
223-
224-let be = 1
225-
226-let bf = 2
227-
228-let bg = 3
229-
230-let bh = 4
231-
232-let bi = 0
233-
234-let bj = 1
235-
236-let bk = 2
237-
238-let bl = 3
239-
240-let bm = 0
241-
242-let bn = 1
243-
244-let bo = 2
245-
246-let bp = 3
247-
248-let bq = 0
249-
250-let br = 1
251-
252-let bs = 2
253-
254-func bt (bu) = ("no_" + bu)
255-
256-
257-func bv (bu) = ("lcna_" + bu)
258-
259-
260-func bw (bu) = ("st_" + bu)
261-
262-
263-func bx (by,bu) = makeString(["las", by, bu], "_")
264-
265-
266-func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB)
267-
268-
269-func bC (Q) = ("wh_" + Q)
270-
271-
272-func bD (bu) = ("infraLevel_" + bu)
273-
274-
275-func bE (Q) = ("fortifications_" + Q)
276-
277-
278-func bF (bu) = ("duckCustomNameByAssetId_" + bu)
279-
280-
281-func bG (c) = ("accountCustomNameByAddr_" + c)
282-
283-
284-func bH (c) = ("accRefBy_" + c)
285-
286-
287-func bI (B) = ("onboardArtActivatedOnDuck_" + B)
288-
289-
290-func bJ (c) = ("onboardArtActivatedDuckBy_" + c)
291-
292-
293-func bK (c) = ("accReferrals_" + c)
294-
295-
296-func bL (bu) = ("duckOwner_" + bu)
297-
298-
299-func bM (bB) = ("stakedDuckByOwner_" + bB)
300-
301-
302-func bN (B) = ("backPack_" + B)
303-
304-
305-func bO (B) = ("duckLocation_" + B)
306-
307-
308-func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ)
309-
310-
311-func bR () = "emergencyWarehouseProducts"
312-
313-
314-let bS = "deliveryFund"
315-
316-let bT = "%s__lastTourId"
317-
318-func bU (bV) = ("%s%d__tourStaticData__" + toString(bV))
319-
320-
321-func bW (bV) = ("%s%d__tourDynamicData__" + toString(bV))
322-
323-
324-func bX (bV,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bV), B], "__")
325-
326-
327-let bY = 0
328-
329-let bZ = 1
330-
331-let ca = 6
332-
333-let cb = 1
334-
335-func cc (cd,bV) = {
336- let ce = split(valueOrErrorMessage(getString(cd, bU(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
337- let cf = split_4C(valueOrErrorMessage(getString(cd, bW(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
338-[ce, cf]
339- }
340-
341-
342-func cg (cd,ch) = {
343- let ci = valueOrElse(getInteger(cd, bT), 0)
344- let cj = split(ch, "_")
345- let aA = lastBlock.timestamp
346- let ck = cc(cd, ci)
347- let ce = ck[bY]
348- let cf = ck[bZ]
349- if (if (if ((cj[br] == "T"))
350- then (parseIntValue(cj[bq]) == ci)
123+func Z (aa) = fraction(f, pow(aa, 4, g, 4, 4, DOWN), e)
124+
125+
126+func ab (ac) = (100 + ac)
127+
128+
129+func ad (ae,af) = {
130+ let ag = Z(af)
131+[ag, (h * (ag - ae))]
132+ }
133+
134+
135+func ah (ai,u,aj,ak) = {
136+ let al = split(valueOrElse(getString(ai, v(u)), "0_0_0_0_0"), "_")
137+ let am = valueOrElse(getInteger(ai, x(u)), 0)
138+ let an = valueOrElse(getInteger(ai, t(u)), ab(am))
139+ let ao = split(valueOrElse(getString(ai, F(u)), "0_0_0_0_0"), "_")
140+ ([parseIntValue(al[j]), parseIntValue(al[k]), parseIntValue(al[l]), parseIntValue(al[m]), parseIntValue(al[n]), am, an] ++ (if (ak)
141+ then [aj, aj, aj, aj, aj]
142+ else [parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n])]))
143+ }
144+
145+
146+let ap = "LAND"
147+
148+let aq = "DUCK"
149+
150+let ar = "ROBO"
151+
152+let as = "PRESALE"
153+
154+let at = 6
155+
156+let au = 25
157+
158+let av = 3456000
159+
160+let aw = 10000000000
161+
162+let ax = "Africa_F_Africa"
163+
164+let ay = 39637
165+
166+let az = 10
167+
168+let aA = 50000
169+
170+let aB = 100000000
171+
172+let aC = 0
173+
174+let aD = 200000000
175+
176+let aE = 0
177+
178+let aF = 200000000
179+
180+let aG = ["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", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
181+
182+let aH = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
183+
184+let aI = 10000000
185+
186+let aJ = ["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_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
187+
188+let aK = 6
189+
190+let aL = 8
191+
192+let aM = 9
193+
194+let aN = 10
195+
196+let aO = 10
197+
198+let aP = 0
199+
200+let aQ = 1
201+
202+let aR = 2
203+
204+let aS = 3
205+
206+let aT = 4
207+
208+let aU = 0
209+
210+let aV = 1
211+
212+let aW = 2
213+
214+let aX = 3
215+
216+let aY = 0
217+
218+let aZ = 1
219+
220+let ba = 2
221+
222+let bb = 3
223+
224+let bc = 0
225+
226+let bd = 1
227+
228+let be = 2
229+
230+func bf (bg) = ("no_" + bg)
231+
232+
233+func bh (bg) = ("lcna_" + bg)
234+
235+
236+func bi (bg) = ("st_" + bg)
237+
238+
239+func bj (bk,bg) = makeString(["las", bk, bg], "_")
240+
241+
242+func bl (bm,bg,bn) = ((((("sttao_" + bm) + "_") + bg) + "_") + bn)
243+
244+
245+func bo (bp) = ("wh_" + bp)
246+
247+
248+func bq (bg) = ("infraLevel_" + bg)
249+
250+
251+func br (bg) = ("duckCustomNameByAssetId_" + bg)
252+
253+
254+func bs (c) = ("accountCustomNameByAddr_" + c)
255+
256+
257+func bt (c) = ("accRefBy_" + c)
258+
259+
260+func bu (u) = ("onboardArtActivatedOnDuck_" + u)
261+
262+
263+func bv (c) = ("onboardArtActivatedDuckBy_" + c)
264+
265+
266+func bw (c) = ("accReferrals_" + c)
267+
268+
269+func bx (bg) = ("duckOwner_" + bg)
270+
271+
272+func by (bn) = ("stakedDuckByOwner_" + bn)
273+
274+
275+func bz (u) = ("backPack_" + u)
276+
277+
278+func bA (u) = ("duckLocation_" + u)
279+
280+
281+func bB (bC) = ("%s%s__userGwlReleaseTime__" + bC)
282+
283+
284+func bD () = "emergencyWarehouseProducts"
285+
286+
287+let bE = "deliveryFund"
288+
289+let bF = "%s__lastTourId"
290+
291+func bG (bH) = ("%s%d__tourStaticData__" + toString(bH))
292+
293+
294+func bI (bH) = ("%s%d__tourDynamicData__" + toString(bH))
295+
296+
297+func bJ (bH,u) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bH), u], "__")
298+
299+
300+let bK = 0
301+
302+let bL = 1
303+
304+let bM = 6
305+
306+let bN = 1
307+
308+func bO (bP,bH) = {
309+ let bQ = split(valueOrErrorMessage(getString(bP, bG(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
310+ let bR = split_4C(valueOrErrorMessage(getString(bP, bI(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
311+[bQ, bR]
312+ }
313+
314+
315+func bS (bP,bT) = {
316+ let bU = valueOrElse(getInteger(bP, bF), 0)
317+ let bV = split(bT, "_")
318+ let bW = lastBlock.timestamp
319+ let bX = bO(bP, bU)
320+ let bQ = bX[bK]
321+ let bR = bX[bL]
322+ if (if (if ((bV[bd] == "T"))
323+ then (parseIntValue(bV[bc]) == bU)
351324 else false)
352- then (cf[cb] == "INPROGRESS")
325+ then (bR[bN] == "INPROGRESS")
353326 else false)
354- then (parseIntValue(ce[ca]) > aA)
327+ then (parseIntValue(bQ[bM]) > bW)
355328 else false
356329 }
357330
358331
359-func cl (cd,ch) = {
360- let ci = valueOrElse(getInteger(cd, bT), 0)
361- let cj = split(ch, "_")
362- let aA = lastBlock.timestamp
363- let ck = cc(cd, ci)
364- let ce = ck[bY]
365- let cf = ck[bZ]
366- let cm = cj[br]
367- if (if (if ((cj[br] == "T"))
368- then (parseIntValue(cj[bq]) == ci)
332+func bY (bP,bT) = {
333+ let bU = valueOrElse(getInteger(bP, bF), 0)
334+ let bV = split(bT, "_")
335+ let bW = lastBlock.timestamp
336+ let bX = bO(bP, bU)
337+ let bQ = bX[bK]
338+ let bR = bX[bL]
339+ let bZ = bV[bd]
340+ if (if (if ((bV[bd] == "T"))
341+ then (parseIntValue(bV[bc]) == bU)
369342 else false)
370- then (cf[cb] == "INPROGRESS")
343+ then (bR[bN] == "INPROGRESS")
371344 else false)
372- then (parseIntValue(ce[ca]) > aA)
345+ then (parseIntValue(bQ[bM]) > bW)
373346 else false
374347 }
375348
376349
377-func cn (co) = (parseIntValue(co[aY]) * aV)
378-
379-
380-func cp (cq,cr,cs) = throw(((((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr) + ", case=") + toString(cs)))
381-
382-
383-let ct = false
384-
385-let cu = false
386-
387-let cv = false
388-
389-let cw = 86400000
390-
391-let cx = take(drop(this.bytes, 1), 1)
392-
393-let cy = {
394- let cz = cx
395- if ((base58'2W' == cz))
396- then if (ct)
350+func ca (cb) = (parseIntValue(cb[aK]) * aI)
351+
352+
353+func cc (cd,ce,cf) = throw(((((("Cheat attempt: oldLoc=" + cd) + ", newLoc=") + ce) + ", case=") + toString(cf)))
354+
355+
356+let cg = false
357+
358+let ch = false
359+
360+let ci = false
361+
362+let cj = 86400000
363+
364+let ck = take(drop(this.bytes, 1), 1)
365+
366+let cl = {
367+ let cm = ck
368+ if ((base58'2W' == cm))
369+ then if (cg)
397370 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
398371 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
399- else if ((base58'2T' == cz))
372+ else if ((base58'2T' == cm))
400373 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
401374 else throw("Unknown chain")
402375 }
403376
404-let cA = {
405- let cz = cx
406- if ((base58'2W' == cz))
377+let cn = {
378+ let cm = ck
379+ if ((base58'2W' == cm))
407380 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
408- else if ((base58'2T' == cz))
381+ else if ((base58'2T' == cm))
409382 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
410383 else throw("Unknown chain")
411384 }
412385
413-let cB = {
414- let cz = cx
415- if ((base58'2W' == cz))
386+let co = {
387+ let cm = ck
388+ if ((base58'2W' == cm))
416389 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
417- else if ((base58'2T' == cz))
390+ else if ((base58'2T' == cm))
418391 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
419392 else throw("Unknown chain")
420393 }
421394
422-let cC = {
423- let cz = cx
424- if ((base58'2W' == cz))
395+let cp = {
396+ let cm = ck
397+ if ((base58'2W' == cm))
425398 then 10000000000
426- else if ((base58'2T' == cz))
399+ else if ((base58'2T' == cm))
427400 then 100000000
428401 else throw("Unknown chain")
429402 }
430403
431-let cD = {
432- let cz = cx
433- if ((base58'2W' == cz))
434- then cw
435- else if ((base58'2T' == cz))
404+let cq = {
405+ let cm = ck
406+ if ((base58'2W' == cm))
407+ then cj
408+ else if ((base58'2T' == cm))
436409 then 60000
437410 else throw("Unknown chain")
438411 }
439412
440-let cE = "__"
441-
442-let cF = 1000000
443-
444-let cG = 100000000
445-
446-let cH = 25
447-
448-let cI = 100
449-
450-let cJ = 225
451-
452-let cK = 400
453-
454-let cL = 625
455-
456-let cM = [0, 1, 2, 3, 4, 5]
457-
458-func cN (cO,cP) = valueOrErrorMessage(getString(cO, cP), makeString(["mandatory ", toString(cO), ".", cP, " is not defined"], ""))
459-
460-
461-let cQ = 1
462-
463-let cR = 2
464-
465-let cS = 3
466-
467-let cT = 4
468-
469-let cU = 7
470-
471-let cV = 8
472-
473-func cW () = "%s__restConfig"
474-
475-
476-func cX () = "%s__restAddr"
477-
478-
479-func cY (cZ) = split_4C(cN(cZ, cW()), cE)
480-
481-
482-func da (db,dc) = valueOrErrorMessage(addressFromString(db[dc]), ("Rest cfg doesn't contain address at index " + toString(dc)))
483-
484-
485-let dd = addressFromStringValue(valueOrElse(getString(this, cX()), cB))
486-
487-let db = cY(dd)
488-
489-let aq = da(db, cQ)
490-
491-let de = da(db, cR)
492-
493-let df = da(db, cS)
494-
495-let dg = da(db, cT)
496-
497-let dh = da(db, cU)
498-
499-let di = da(db, cV)
500-
501-let dj = 0
502-
503-let dk = 1
504-
505-let dl = 2
506-
507-let dm = 3
508-
509-let dn = "wlg_assetId"
510-
511-let do = valueOrErrorMessage(getBinary(dg, dn), "WLGOLD is not issued yet")
512-
513-let dp = "acresAssetId"
514-
515-let dq = valueOrErrorMessage(getBinary(di, dp), "ACRES is not issued yet")
516-
517-let dr = 2
518-
519-func ds (cO) = ("finishBlockFor_" + cO)
520-
521-
522-func dt () = "resTypesProportions"
523-
524-
525-func du (dv) = ("resTypesByContinent_" + dv)
526-
527-
528-func dw (bB) = ("stakedLandsByOwner_" + bB)
529-
530-
531-func dx (bB) = ("stakedPiecesByOwner_" + bB)
532-
533-
534-func dy (dz) = {
535- let cz = dz
536- if ($isInstanceOf(cz, "String"))
413+let cr = "__"
414+
415+let cs = 1000000
416+
417+let ct = 100000000
418+
419+let cu = 25
420+
421+let cv = 100
422+
423+let cw = 225
424+
425+let cx = 400
426+
427+let cy = 625
428+
429+let cz = [0, 1, 2, 3, 4, 5]
430+
431+func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
432+
433+
434+let cD = 1
435+
436+let cE = 2
437+
438+let cF = 3
439+
440+let cG = 4
441+
442+let cH = 7
443+
444+let cI = 8
445+
446+func cJ () = "%s__restConfig"
447+
448+
449+func cK () = "%s__restAddr"
450+
451+
452+func cL (cM) = split_4C(cA(cM, cJ()), cr)
453+
454+
455+func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
456+
457+
458+let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
459+
460+let cO = cL(cQ)
461+
462+let ai = cN(cO, cD)
463+
464+let cR = cN(cO, cE)
465+
466+let cS = cN(cO, cF)
467+
468+let cT = cN(cO, cG)
469+
470+let cU = cN(cO, cH)
471+
472+let cV = cN(cO, cI)
473+
474+let cW = 0
475+
476+let cX = 1
477+
478+let cY = 2
479+
480+let cZ = 3
481+
482+let da = "wlg_assetId"
483+
484+let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
485+
486+let dc = "acresAssetId"
487+
488+let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
489+
490+let de = 2
491+
492+func df (cB) = ("finishBlockFor_" + cB)
493+
494+
495+func dg () = "resTypesProportions"
496+
497+
498+func dh (di) = ("resTypesByContinent_" + di)
499+
500+
501+func dj (bn) = ("stakedLandsByOwner_" + bn)
502+
503+
504+func dk (bn) = ("stakedPiecesByOwner_" + bn)
505+
506+
507+func dl (dm) = {
508+ let cm = dm
509+ if ($isInstanceOf(cm, "String"))
537510 then {
538- let dA = cz
539- dA
511+ let dn = cm
512+ dn
540513 }
541514 else throw("fail to cast into String")
542515 }
543516
544517
545-func dB (dz) = {
546- let cz = dz
547- if ($isInstanceOf(cz, "Int"))
518+func do (dm) = {
519+ let cm = dm
520+ if ($isInstanceOf(cm, "Int"))
548521 then {
549- let dC = cz
550- dC
522+ let dp = cm
523+ dp
551524 }
552525 else throw("fail to cast into Int")
553526 }
554527
555528
556-func dD (dz) = {
557- let cz = dz
558- if ($isInstanceOf(cz, "List[Any]"))
529+func dq (dm) = {
530+ let cm = dm
531+ if ($isInstanceOf(cm, "List[Any]"))
559532 then {
560- let dE = cz
561- dE
533+ let dr = cm
534+ dr
562535 }
563536 else throw("fail to cast into List[Any]")
564537 }
565538
566539
567-func dF (dz) = {
568- let cz = dz
569- if ($isInstanceOf(cz, "Boolean"))
540+func ds (dm) = {
541+ let cm = dm
542+ if ($isInstanceOf(cm, "Boolean"))
570543 then {
571- let dA = cz
572- dA
544+ let dn = cm
545+ dn
573546 }
574547 else throw("fail to cast into Boolean")
575548 }
576549
577550
578-func dG (dH) = {
579- let cz = dH
580- if (("S" == cz))
581- then cH
582- else if (("M" == cz))
583- then cI
584- else if (("L" == cz))
585- then cJ
586- else if (("XL" == cz))
587- then cK
588- else if (("XXL" == cz))
589- then cL
551+func dt (du) = {
552+ let cm = du
553+ if (("S" == cm))
554+ then cu
555+ else if (("M" == cm))
556+ then cv
557+ else if (("L" == cm))
558+ then cw
559+ else if (("XL" == cm))
560+ then cx
561+ else if (("XXL" == cm))
562+ then cy
590563 else throw("Unknown land size")
591564 }
592565
593566
594-func dI (dA) = isDefined(parseInt(dA))
595-
596-
597-func dJ () = "contractsBlocked"
598-
599-
600-func dK (c) = ("lastTxIdByUser_" + c)
601-
602-
603-func dL (dM,dN) = {
604- let dO = pow(10, 0, dN, 0, 0, DOWN)
605- let dP = toString((dM % dO))
606- let dQ = drop(toString(dO), (1 + size(dP)))
607- (((toString((dM / dO)) + ".") + dQ) + dP)
608- }
609-
610-
611-func dR (dS,dT,dU) = if ((0 >= dS))
567+func dv (dn) = isDefined(parseInt(dn))
568+
569+
570+func dw () = "contractsBlocked"
571+
572+
573+func dx (c) = ("lastTxIdByUser_" + c)
574+
575+
576+func dy (dz,dA) = {
577+ let dB = pow(10, 0, dA, 0, 0, DOWN)
578+ let dC = toString((dz % dB))
579+ let dD = drop(toString(dB), (1 + size(dC)))
580+ (((toString((dz / dB)) + ".") + dD) + dC)
581+ }
582+
583+
584+func dE (dF,dG,dH) = if ((0 >= dF))
612585 then throw("maxValue should be > 0")
613586 else {
614- let dV = sha256((dT + dU))
615- (toInt(dV) % dS)
587+ let dI = sha256((dG + dH))
588+ (toInt(dI) % dF)
616589 }
617590
618591
619-let dW = {
620- let cz = cx
621- if ((base58'2W' == cz))
592+let dJ = {
593+ let cm = ck
594+ if ((base58'2W' == cm))
622595 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
623- else if ((base58'2T' == cz))
596+ else if ((base58'2T' == cm))
624597 then this
625598 else throw("Unknown chain")
626599 }
627600
628-let dX = {
629- let cz = cx
630- if ((base58'2W' == cz))
601+let dK = {
602+ let cm = ck
603+ if ((base58'2W' == cm))
631604 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
632- else if ((base58'2T' == cz))
605+ else if ((base58'2T' == cm))
633606 then this
634607 else throw("Unknown chain")
635608 }
636609
637-let dY = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
638-
639-let dZ = 300000
640-
641-let ea = 5000000
642-
643-let eb = 50
644-
645-let ec = 10000000
646-
647-let ed = {
648- let cz = cx
649- if ((base58'2W' == cz))
610+let dL = 300000
611+
612+let dM = 5000000
613+
614+let dN = 50
615+
616+let dO = 10000000
617+
618+let dP = {
619+ let cm = ck
620+ if ((base58'2W' == cm))
650621 then 252289527462
651- else if ((base58'2T' == cz))
622+ else if ((base58'2T' == cm))
652623 then 2522895274
653624 else throw("Unknown chain")
654625 }
655626
656-let ee = {
657- let cz = cx
658- if ((base58'2W' == cz))
627+let dQ = {
628+ let cm = ck
629+ if ((base58'2W' == cm))
659630 then 250000000
660- else if ((base58'2T' == cz))
631+ else if ((base58'2T' == cm))
661632 then 250000000
662633 else throw("Unknown chain")
663634 }
664635
665-let ef = 100000
666-
667-let eg = 2500000000
668-
669-let eh = toBigInt(5)
670-
671-let ei = toBigInt(20)
672-
673-let ej = toBigInt((20 * 20))
674-
675-let ek = toBigInt(((20 * 20) * 20))
676-
677-let el = toBigInt((((20 * 20) * 20) * 20))
678-
679-let em = toBigInt(((((20 * 20) * 20) * 20) * 20))
680-
681-let en = 500
682-
683-func eo () = "nextLandNum"
684-
685-
686-func ep (eq) = ("lcn_" + eq)
687-
688-
689-func er (es) = ("la_" + es)
690-
691-
692-func et (bu,bB) = ((("ilao_" + bu) + "_") + bB)
693-
694-
695-func eu (es) = ("lo_" + es)
696-
697-
698-func ev (eq) = ("duckByCustomName_" + eq)
699-
700-
701-func ew (eq) = ("accountByCustomName_" + eq)
702-
703-
704-func ex () = "oldiesList"
705-
706-
707-func ey () = "nextRoboDuck"
708-
709-
710-let ez = 0
711-
712-let eA = 1
713-
714-let eB = 2
715-
716-let eC = 0
717-
718-let eD = 5
719-
720-let eE = 6
721-
722-let eF = 7
723-
724-func eG (es,dH) = ((aF + es) + dH)
725-
726-
727-func eH (eI,eJ) = {
728- let eK = if ((eI >= 0))
729- then (((eI + eJ) - 1) / eJ)
730- else -((((-(eI) + eJ) - 1) / eJ))
731- (eK * cG)
732- }
733-
734-
735-func eL (eM,eN) = {
736- let eO = (((((eN[0] + eN[1]) + eN[2]) + eN[3]) + eN[4]) + eN[5])
737- if ((0 >= eO))
636+let dR = 100000
637+
638+let dS = 2500000000
639+
640+let dT = toBigInt(5)
641+
642+let dU = toBigInt(20)
643+
644+let dV = toBigInt((20 * 20))
645+
646+let dW = toBigInt(((20 * 20) * 20))
647+
648+let dX = toBigInt((((20 * 20) * 20) * 20))
649+
650+let dY = toBigInt(((((20 * 20) * 20) * 20) * 20))
651+
652+let dZ = 500
653+
654+func ea () = "nextLandNum"
655+
656+
657+func eb (ec) = ("lcn_" + ec)
658+
659+
660+func ed (ee) = ("la_" + ee)
661+
662+
663+func ef (bg,bn) = ((("ilao_" + bg) + "_") + bn)
664+
665+
666+func eg (ee) = ("lo_" + ee)
667+
668+
669+func eh (ec) = ("duckByCustomName_" + ec)
670+
671+
672+func ei (ec) = ("accountByCustomName_" + ec)
673+
674+
675+func ej () = "oldiesList"
676+
677+
678+func ek () = "nextRoboDuck"
679+
680+
681+let el = 0
682+
683+let em = 1
684+
685+let en = 2
686+
687+let eo = 0
688+
689+let ep = 5
690+
691+let eq = 6
692+
693+let er = 7
694+
695+let es = 0
696+
697+let et = 1
698+
699+let eu = 0
700+
701+let ev = 2
702+
703+let ew = 3
704+
705+func ex (ee,du) = ((ap + ee) + du)
706+
707+
708+func ey (ez,eA) = {
709+ let eB = if ((ez >= 0))
710+ then (((ez + eA) - 1) / eA)
711+ else -((((-(ez) + eA) - 1) / eA))
712+ (eB * ct)
713+ }
714+
715+
716+func eC (eD,eE) = {
717+ let eF = (((((eE[0] + eE[1]) + eE[2]) + eE[3]) + eE[4]) + eE[5])
718+ if ((0 >= eF))
738719 then throw("Zero weights sum")
739720 else {
740- let eP = fraction(eM, cF, eO)
741- func eQ (eR,eS) = (eR :+ fraction(eS, eP, cF))
742-
743- let eT = eN
744- let eU = size(eT)
745- let eV = nil
746- func eW (eX,eY) = if ((eY >= eU))
747- then eX
748- else eQ(eX, eT[eY])
749-
750- func eZ (eX,eY) = if ((eY >= eU))
751- then eX
721+ let eG = fraction(eD, cs, eF)
722+ func eH (eI,eJ) = (eI :+ fraction(eJ, eG, cs))
723+
724+ let eK = eE
725+ let eL = size(eK)
726+ let eM = nil
727+ func eN (eO,eP) = if ((eP >= eL))
728+ then eO
729+ else eH(eO, eK[eP])
730+
731+ func eQ (eO,eP) = if ((eP >= eL))
732+ then eO
752733 else throw("List size exceeds 6")
753734
754- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
755- }
756- }
757-
758-
759-func fa (eM) = {
760- let fb = split(value(getString(dt())), "_")
761- if ((size(fb) != aJ))
735+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
736+ }
737+ }
738+
739+
740+func eR (eD) = {
741+ let eS = split(value(getString(dg())), "_")
742+ if ((size(eS) != at))
762743 then throw("Wrong proportions data")
763744 else {
764- let fc = [parseIntValue(fb[0]), parseIntValue(fb[1]), parseIntValue(fb[2]), parseIntValue(fb[3]), parseIntValue(fb[4]), parseIntValue(fb[5])]
765- eL(eM, fc)
766- }
767- }
768-
769-
770-func fd (fe,ff,fg) = {
771- let fh = fa(fg)
772- func fi (eR,dc) = {
773- let fj = (parseIntValue(ff[dc]) - fh[dc])
774- if ((0 > fj))
775- then throw(((((("Not enough material idx=" + toString(dc)) + ", you have ") + ff[dc]) + ", but need ") + toString(fh[dc])))
776- else (eR :+ toString(fj))
745+ let eT = [parseIntValue(eS[0]), parseIntValue(eS[1]), parseIntValue(eS[2]), parseIntValue(eS[3]), parseIntValue(eS[4]), parseIntValue(eS[5])]
746+ eC(eD, eT)
747+ }
748+ }
749+
750+
751+func eU (eV,eW,eX) = {
752+ let eY = eR(eX)
753+ func eZ (eI,cP) = {
754+ let fa = (parseIntValue(eW[cP]) - eY[cP])
755+ if ((0 > fa))
756+ then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eW[cP]) + ", but need ") + toString(eY[cP])))
757+ else (eI :+ toString(fa))
777758 }
778759
779- if (fe)
760+ if (eV)
780761 then {
781- let eT = cM
782- let eU = size(eT)
783- let eV = nil
784- func eW (eX,eY) = if ((eY >= eU))
785- then eX
786- else fi(eX, eT[eY])
787-
788- func eZ (eX,eY) = if ((eY >= eU))
789- then eX
762+ let eK = cz
763+ let eL = size(eK)
764+ let eM = nil
765+ func eN (eO,eP) = if ((eP >= eL))
766+ then eO
767+ else eZ(eO, eK[eP])
768+
769+ func eQ (eO,eP) = if ((eP >= eL))
770+ then eO
790771 else throw("List size exceeds 6")
791772
792- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
793- }
794- else ff
795- }
796-
797-
798-func fk (fl,fm) = if ((fm == ""))
799- then $Tuple2(fl, false)
773+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
774+ }
775+ else eW
776+ }
777+
778+
779+func fb (fc,fd) = if ((fd == ""))
780+ then $Tuple3(fc, false, false)
800781 else {
801- func fn (eR,fo) = {
802- let fp = split(fo, ",")
803- if ((size(fp) != 2))
782+ func fe (eI,ff) = {
783+ let fg = split(ff, ",")
784+ if ((size(fg) != 2))
804785 then throw("Incorrect format, should be index,amount")
805786 else {
806- let dc = parseIntValue(fp[0])
807- if (if ((0 > dc))
787+ let cP = parseIntValue(fg[0])
788+ if (if ((0 > cP))
808789 then true
809- else (dc >= size(aX)))
790+ else (cP >= size(aJ)))
810791 then throw("Unknown product idx")
811792 else {
812- let fq = parseIntValue(fp[1])
813- let fr = split(eR._1, (fp[0] + ":"))
814- if ((size(fr) != 2))
815- then throw((("You don't have " + aT[dc]) + " equipped"))
793+ let fh = parseIntValue(fg[1])
794+ let fi = split(eI._1, (fg[0] + ":"))
795+ if ((size(fi) != 2))
796+ then throw((("You don't have " + aG[cP]) + " equipped"))
816797 else {
817- let fs = fr[1]
818- let ft = if (dI(take(drop(fs, 1), 1)))
798+ let fj = fi[1]
799+ let fk = if (dv(take(drop(fj, 1), 1)))
819800 then 2
820801 else 1
821- let fu = parseIntValue(take(fs, ft))
822- let fv = drop(fs, ft)
823- let fw = if ((fu >= fq))
824- then (fu - fq)
825- else throw(((((("You equipped " + toString(fu)) + " of ") + aT[dc]) + ", but tried to use ") + toString(fq)))
826- $Tuple2(((((fr[0] + fp[0]) + ":") + toString(fw)) + fv), if (eR._2)
802+ let fl = parseIntValue(take(fj, fk))
803+ let fm = drop(fj, fk)
804+ let fn = if ((fl >= fh))
805+ then (fl - fh)
806+ else throw(((((("You equipped " + toString(fl)) + " of ") + aG[cP]) + ", but tried to use ") + toString(fh)))
807+ $Tuple3(((((fi[0] + fg[0]) + ":") + toString(fn)) + fm), if (eI._2)
827808 then true
828- else if (if ((dc >= 6))
829- then (8 >= dc)
809+ else if (if ((cP >= 6))
810+ then (8 >= cP)
830811 else false)
831- then (fw == 0)
812+ then (fn == 0)
813+ else false, if (eI._3)
814+ then true
815+ else if (if ((cP >= 3))
816+ then (5 >= cP)
817+ else false)
818+ then (fh > 0)
832819 else false)
833820 }
834821 }
835822 }
836823 }
837824
838- let eT = split(fm, "_")
839- let eU = size(eT)
840- let eV = $Tuple2(fl, false)
841- func eW (eX,eY) = if ((eY >= eU))
842- then eX
843- else fn(eX, eT[eY])
844-
845- func eZ (eX,eY) = if ((eY >= eU))
846- then eX
825+ let eK = split(fd, "_")
826+ let eL = size(eK)
827+ let eM = $Tuple3(fc, false, false)
828+ func eN (eO,eP) = if ((eP >= eL))
829+ then eO
830+ else fe(eO, eK[eP])
831+
832+ func eQ (eO,eP) = if ((eP >= eL))
833+ then eO
847834 else throw("List size exceeds 10")
848835
849- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
836+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
850837 }
851838
852839
853-func fx (fy) = {
854- let fz = if ((fy == ""))
840+func fo (fp) = {
841+ let fq = if ((fp == ""))
855842 then nil
856- else split_4C(fy, "_")
857- func fA (eR,co) = {
858- let fB = (size(eR) / 8)
859- let fu = if ((size(fz) > fB))
860- then parseIntValue(fz[fB])
843+ else split_4C(fp, "_")
844+ func fr (eI,cb) = {
845+ let fs = (size(eI) / 8)
846+ let fl = if ((size(fq) > fs))
847+ then parseIntValue(fq[fs])
861848 else 0
862- (eR + toBytes(fu))
849+ (eI + toBytes(fl))
863850 }
864851
865- let eT = aX
866- let eU = size(eT)
867- let eV = base58''
868- func eW (eX,eY) = if ((eY >= eU))
869- then eX
870- else fA(eX, eT[eY])
871-
872- func eZ (eX,eY) = if ((eY >= eU))
873- then eX
852+ let eK = aJ
853+ let eL = size(eK)
854+ let eM = base58''
855+ func eN (eO,eP) = if ((eP >= eL))
856+ then eO
857+ else fr(eO, eK[eP])
858+
859+ func eQ (eO,eP) = if ((eP >= eL))
860+ then eO
874861 else throw("List size exceeds 50")
875862
876- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
877- }
878-
879-
880-func fC (fD) = {
881- func fE (eR,co) = {
882- let fB = size(eR)
883- let fF = take(drop(fD, (8 * fB)), 8)
884- (eR :+ toString(toInt(fF)))
863+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
864+ }
865+
866+
867+func ft (fu) = {
868+ func fv (eI,cb) = {
869+ let fs = size(eI)
870+ let fw = take(drop(fu, (8 * fs)), 8)
871+ (eI :+ toString(toInt(fw)))
885872 }
886873
887874 makeString_2C({
888- let eT = aX
889- let eU = size(eT)
890- let eV = nil
891- func eW (eX,eY) = if ((eY >= eU))
892- then eX
893- else fE(eX, eT[eY])
894-
895- func eZ (eX,eY) = if ((eY >= eU))
896- then eX
875+ let eK = aJ
876+ let eL = size(eK)
877+ let eM = nil
878+ func eN (eO,eP) = if ((eP >= eL))
879+ then eO
880+ else fv(eO, eK[eP])
881+
882+ func eQ (eO,eP) = if ((eP >= eL))
883+ then eO
897884 else throw("List size exceeds 50")
898885
899- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
886+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
900887 }, "_")
901888 }
902889
903890
904-func fG (fH,fI) = {
905- func fJ (eR,fB) = {
906- let fK = if ((size(fH) > (7 + fB)))
907- then fH[(7 + fB)]
891+func fx (fy,fz) = {
892+ func fA (eI,fs) = {
893+ let fB = if ((size(fy) > (7 + fs)))
894+ then fy[(7 + fs)]
908895 else 0
909- if ((parseIntValue(fI[fB]) > (fH[fB] + fK)))
910- then throw(("Requirement not satisfied: " + k[fB]))
896+ if ((parseIntValue(fz[fs]) > (fy[fs] + fB)))
897+ then throw(("Requirement not satisfied: " + i[fs]))
911898 else true
912899 }
913900
914- let eT = [0, 1, 2, 3, 4, 5, 6]
915- let eU = size(eT)
916- let eV = false
917- func eW (eX,eY) = if ((eY >= eU))
918- then eX
919- else fJ(eX, eT[eY])
920-
921- func eZ (eX,eY) = if ((eY >= eU))
922- then eX
901+ let eK = [0, 1, 2, 3, 4, 5, 6]
902+ let eL = size(eK)
903+ let eM = false
904+ func eN (eO,eP) = if ((eP >= eL))
905+ then eO
906+ else fA(eO, eK[eP])
907+
908+ func eQ (eO,eP) = if ((eP >= eL))
909+ then eO
923910 else throw("List size exceeds 7")
924911
925- eZ(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7)
926- }
927-
928-
929-func fL (fM,fz,fN,fH,fO,fP) = {
930- let fp = split(fM, ":")
931- if ((size(fp) != 2))
912+ eQ(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7)
913+ }
914+
915+
916+func fC (fD,fq,fE,fF,fG,fH,fy) = {
917+ let fg = split(fD, ":")
918+ if ((size(fg) != 2))
932919 then throw("Incorrect format, should be index:amount")
933- else if (if (!(fN))
934- then (size(fp[0]) != 2)
920+ else if (if (!(fE))
921+ then (size(fg[0]) != 2)
935922 else false)
936923 then throw("Product idx should be 2 digits, zero padded")
937924 else {
938- let fQ = parseIntValue(fp[0])
939- let fR = parseIntValue(fp[1])
940- if (!(containsElement(aW, fQ)))
941- then throw((("Product '" + aT[fQ]) + "' cannot be used for land defense"))
942- else if ((0 > fR))
925+ let fI = parseIntValue(fg[0])
926+ let fJ = parseIntValue(fg[1])
927+ if (if ((0 > fI))
928+ then true
929+ else (fI >= size(aJ)))
930+ then throw("Unknown product idx")
931+ else if ((0 > fJ))
943932 then throw("Count can't be negative")
944- else if ((fR > u))
945- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
946- else if ((fR == 0))
947- then $Tuple3(fz, fO, fP)
933+ else if ((fJ > s))
934+ then throw(((("Can't put more than " + toString(s)) + " of ") + aG[fI]))
935+ else if ((fJ == 0))
936+ then $Tuple2(fq, false)
948937 else {
949- let fS = take(fz, (8 * fQ))
950- let fu = toInt(take(drop(fz, (8 * fQ)), 8))
951- let fv = drop(fz, (8 * (fQ + 1)))
952- let co = split(aX[fQ], "_")
953- if (if (!(fN))
954- then (fR > fu)
938+ let fK = take(fq, (8 * fI))
939+ let fl = toInt(take(drop(fq, (8 * fI)), 8))
940+ let fm = drop(fq, (8 * (fI + 1)))
941+ let cb = split(aJ[fI], "_")
942+ if (if (!(fE))
943+ then (fJ > fl)
955944 else false)
956- then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
945+ then throw(((((("You have " + toString(fl)) + " of ") + aG[fI]) + ", but tried to use ") + toString(fJ)))
957946 else {
958- let fw = if (if (!(fN))
959- then fG(fH, split(co[ba], ","))
960- else false)
961- then (fu - fR)
962- else (fu + fR)
963- let fT = (eH(fw, bc) - eH(fu, bc))
964- $Tuple3(((fS + toBytes(fw)) + fv), (fO + fT), (fP - fT))
965- }
966- }
967- }
968- }
969-
970-
971-func fU (fM,fz,fN,fV,fW,fX,fH) = {
972- let fp = split(fM, ":")
973- if ((size(fp) != 2))
974- then throw("Incorrect format, should be index:amount")
975- else if (if (!(fN))
976- then (size(fp[0]) != 2)
977- else false)
978- then throw("Product idx should be 2 digits, zero padded")
979- else {
980- let fQ = parseIntValue(fp[0])
981- let fR = parseIntValue(fp[1])
982- if (if ((0 > fQ))
983- then true
984- else (fQ >= size(aX)))
985- then throw("Unknown product idx")
986- else if ((0 > fR))
987- then throw("Count can't be negative")
988- else if ((fR > u))
989- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
990- else if ((fR == 0))
991- then $Tuple2(fz, false)
992- else {
993- let fS = take(fz, (8 * fQ))
994- let fu = toInt(take(drop(fz, (8 * fQ)), 8))
995- let fv = drop(fz, (8 * (fQ + 1)))
996- let co = split(aX[fQ], "_")
997- if (if (!(fN))
998- then (fR > fu)
999- else false)
1000- then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
1001- else {
1002- let fY = if (if (!(fN))
1003- then fG(fH, split(co[ba], ","))
947+ let fL = if (if (!(fE))
948+ then fx(fy, split(cb[aM], ","))
1004949 else false)
1005950 then {
1006- let fZ = co[bb]
1007- if ((fZ == ""))
951+ let fM = cb[aN]
952+ if ((fM == ""))
1008953 then throw("Item cannot be equipped")
1009954 else {
1010- let ga = parseIntValue(fZ)
1011- let gb = (ga / 100)
1012- if ((fV != gb))
955+ let fN = parseIntValue(fM)
956+ let fO = (fN / 100)
957+ if ((fF != fO))
1013958 then throw("Segment incompatible")
1014959 else {
1015- let gc = ((ga % 100) / 10)
1016- if ((fW != gc))
960+ let fP = ((fN % 100) / 10)
961+ if ((fG != fP))
1017962 then throw("Slot incompatible")
1018963 else {
1019- let gd = (ga % 10)
1020- if (if ((fX != 0))
1021- then (gd > 1)
964+ let fQ = (fN % 10)
965+ if (if ((fH != 0))
966+ then (fQ > 1)
1022967 else false)
1023968 then throw("Big items should occupy slot 0")
1024- else (gd > 1)
969+ else (fQ > 1)
1025970 }
1026971 }
1027972 }
1028973 }
1029974 else false
1030- $Tuple2(((fS + toBytes((fu + (if (fN)
1031- then fR
1032- else -(fR))))) + fv), fY)
975+ $Tuple2(((fK + toBytes((fl + (if (fE)
976+ then fJ
977+ else -(fJ))))) + fm), fL)
1033978 }
1034979 }
1035980 }
1036981 }
1037982
1038983
1039-func ge (gf,gg,fN,fV,fW,gh) = if ((gf != ""))
984+func fR (fS,fT,fE,fF,fG,fU) = if ((fS != ""))
1040985 then {
1041- let gi = split(gf, ",")
1042- if ((size(gi) > t))
986+ let fV = split(fS, ",")
987+ if ((size(fV) > r))
1043988 then throw("Wrong slots format")
1044989 else {
1045- let gj = gi[0]
1046- let gk = if ((size(gi) > 1))
1047- then gi[1]
990+ let fW = fV[0]
991+ let fX = if ((size(fV) > 1))
992+ then fV[1]
1048993 else ""
1049- if (if ((gj == ""))
1050- then (gk == "")
994+ if (if ((fW == ""))
995+ then (fX == "")
1051996 else false)
1052- then gg
997+ then fT
1053998 else {
1054- let gl = if ((gj != ""))
1055- then fU(gj, gg, fN, fV, fW, 0, gh)
1056- else $Tuple2(gg, false)
1057- if ((gk != ""))
1058- then if (gl._2)
999+ let fY = if ((fW != ""))
1000+ then fC(fW, fT, fE, fF, fG, 0, fU)
1001+ else $Tuple2(fT, false)
1002+ if ((fX != ""))
1003+ then if (fY._2)
10591004 then throw("Big item already occupies slot")
1060- else fU(gk, gl._1, fN, fV, fW, 1, gh)._1
1061- else gl._1
1005+ else fC(fX, fY._1, fE, fF, fG, 1, fU)._1
1006+ else fY._1
10621007 }
10631008 }
10641009 }
1065- else gg
1066-
1067-
1068-func gm (gn,go,fN,gh) = {
1069- func fV (eR,gp) = {
1070- let fB = eR._1
1071- let fW = split(gp, ";")
1072- if ((size(fW) != s))
1010+ else fT
1011+
1012+
1013+func fZ (ga,gb,fE,fU) = {
1014+ func fF (eI,gc) = {
1015+ let fs = eI._1
1016+ let fG = split(gc, ";")
1017+ if ((size(fG) != q))
10731018 then throw("Wrong segment format")
10741019 else {
1075- let gq = fW[0]
1076- let gr = fW[1]
1077- if (if ((gq == ""))
1078- then (gr == "")
1020+ let gd = fG[0]
1021+ let ge = fG[1]
1022+ if (if ((gd == ""))
1023+ then (ge == "")
10791024 else false)
1080- then $Tuple2((fB + 1), eR._2)
1025+ then $Tuple2((fs + 1), eI._2)
10811026 else {
1082- let gs = ge(gq, eR._2, fN, fB, 0, gh)
1083- $Tuple2((fB + 1), ge(gr, gs, fN, fB, 1, gh))
1027+ let gf = fR(gd, eI._2, fE, fs, 0, fU)
1028+ $Tuple2((fs + 1), fR(ge, gf, fE, fs, 1, fU))
10841029 }
10851030 }
10861031 }
10871032
1088-( let eT = gn
1089- let eU = size(eT)
1090- let eV = $Tuple2(0, go)
1091- func eW (eX,eY) = if ((eY >= eU))
1092- then eX
1093- else fV(eX, eT[eY])
1094-
1095- func eZ (eX,eY) = if ((eY >= eU))
1096- then eX
1033+( let eK = ga
1034+ let eL = size(eK)
1035+ let eM = $Tuple2(0, gb)
1036+ func eN (eO,eP) = if ((eP >= eL))
1037+ then eO
1038+ else fF(eO, eK[eP])
1039+
1040+ func eQ (eO,eP) = if ((eP >= eL))
1041+ then eO
10971042 else throw("List size exceeds 6")
10981043
1099- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6))._2
1100- }
1101-
1102-
1103-func gt (gn,go,fO,fP,fN,fH) = if ((3 > size(gn)))
1104- then throw("At least duck, mines and traps parts are required")
1105- else {
1106- func fV (eR,gp) = {
1107- let fB = eR._1
1108- if ((fB == 0))
1109- then $Tuple4((fB + 1), eR._2, eR._3, eR._4)
1110- else {
1111- let gu = fL(gp, eR._2, fN, fH, eR._3, eR._4)
1112- $Tuple4((fB + 1), gu._1, gu._2, gu._3)
1113- }
1114- }
1115-
1116- let gv = {
1117- let eT = gn
1118- let eU = size(eT)
1119- let eV = $Tuple4(0, go, fO, fP)
1120- func eW (eX,eY) = if ((eY >= eU))
1121- then eX
1122- else fV(eX, eT[eY])
1123-
1124- func eZ (eX,eY) = if ((eY >= eU))
1125- then eX
1126- else throw("List size exceeds 10")
1127-
1128- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1129- }
1130- $Tuple3(gv._2, gv._3, gv._4)
1131- }
1132-
1133-
1134-func gw (B) = {
1135- let gx = G(B)
1136- let gy = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1137- let gz = gm(gy, dY, true, nil)
1138- let gA = split(gy[q], ";")[1]
1139- let ar = if ((gA == ""))
1044+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6))._2
1045+ }
1046+
1047+
1048+func gg (u) = {
1049+ let gh = z(u)
1050+ let gi = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1051+ let gj = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
1052+ let gk = fZ(gi, gj, true, nil)
1053+ let gl = split(gi[o], ";")[1]
1054+ let aj = if ((gl == ""))
11401055 then 0
11411056 else {
1142- let gB = split(gA, ",")[0]
1143- if ((gB == ""))
1057+ let gm = split(gl, ",")[0]
1058+ if ((gm == ""))
11441059 then 0
11451060 else {
1146- let fM = split(gB, ":")
1147- let dc = fM[0]
1148- let gC = fM[1]
1149- if (if (if (if (if ((dc == "06"))
1061+ let fD = split(gm, ":")
1062+ let cP = fD[0]
1063+ let gn = fD[1]
1064+ if (if (if (if (if ((cP == "06"))
11501065 then true
1151- else (dc == "07"))
1066+ else (cP == "07"))
11521067 then true
1153- else (dc == "08"))
1154- then (gC != "")
1068+ else (cP == "08"))
1069+ then (gn != "")
11551070 else false)
1156- then (parseIntValue(gC) > 0)
1071+ then (parseIntValue(gn) > 0)
11571072 else false)
1158- then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
1073+ then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
11591074 else 0
11601075 }
11611076 }
1162- let gh = ap(this, B, ar, true)
1163- let gD = gm(gy, gz, false, gh)
1164- (gD == gD)
1165- }
1166-
1167-
1168-func gE (gF,gG,gH,gI) = if ((size(gF) != aJ))
1077+ let fU = ah(this, u, aj, true)
1078+ let go = fZ(gi, gk, false, fU)
1079+ (go == go)
1080+ }
1081+
1082+
1083+func gp (gq,gr,gs,gt) = if ((size(gq) != at))
11691084 then throw("Wrong proportions data")
11701085 else {
1171- func gJ (eR,gK) = {
1172- let fj = (parseIntValue(gF[gK]) + ((gI * gG[gK]) * gH))
1173- if ((0 > fj))
1174- then throw(((((((("Panic! Pieces of type=" + toString(gK)) + ", sign=") + toString(gI)) + ", terrainCounts[i]=") + toString(gG[gK])) + ", landSizeIndex=") + toString(gH)))
1175- else (eR :+ toString(fj))
1176- }
1177-
1178- let eT = cM
1179- let eU = size(eT)
1180- let eV = nil
1181- func eW (eX,eY) = if ((eY >= eU))
1182- then eX
1183- else gJ(eX, eT[eY])
1184-
1185- func eZ (eX,eY) = if ((eY >= eU))
1186- then eX
1086+ func gu (eI,gv) = {
1087+ let fa = (parseIntValue(gq[gv]) + ((gt * gr[gv]) * gs))
1088+ if ((0 > fa))
1089+ then throw(((((((("Panic! Pieces of type=" + toString(gv)) + ", sign=") + toString(gt)) + ", terrainCounts[i]=") + toString(gr[gv])) + ", landSizeIndex=") + toString(gs)))
1090+ else (eI :+ toString(fa))
1091+ }
1092+
1093+ let eK = cz
1094+ let eL = size(eK)
1095+ let eM = nil
1096+ func eN (eO,eP) = if ((eP >= eL))
1097+ then eO
1098+ else gu(eO, eK[eP])
1099+
1100+ func eQ (eO,eP) = if ((eP >= eL))
1101+ then eO
11871102 else throw("List size exceeds 6")
11881103
1189- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1104+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
11901105 }
11911106
11921107
1193-func gL (gG,gH,gI) = {
1194- let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
1195- makeString(gE(gF, gG, gH, gI), "_")
1196- }
1197-
1198-
1199-func gM (gN) = [(size(split(gN, "A")) - 1), (size(split(gN, "B")) - 1), (size(split(gN, "C")) - 1), (size(split(gN, "D")) - 1), (size(split(gN, "E")) - 1), (size(split(gN, "F")) - 1)]
1200-
1201-
1202-func gO (gP,gG,gQ,gH,gR) = {
1203- func gS (eR,gK) = {
1204- let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1205- (eR :+ toString((parseIntValue(gP[gK]) + gT)))
1108+func gw (gr,gs,gt) = {
1109+ let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1110+ makeString(gp(gq, gr, gs, gt), "_")
1111+ }
1112+
1113+
1114+func gx (gy) = [(size(split(gy, "A")) - 1), (size(split(gy, "B")) - 1), (size(split(gy, "C")) - 1), (size(split(gy, "D")) - 1), (size(split(gy, "E")) - 1), (size(split(gy, "F")) - 1)]
1115+
1116+
1117+func gz (gA,gr,gB,gs,gC) = {
1118+ func gD (eI,gv) = {
1119+ let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1120+ (eI :+ toString((parseIntValue(gA[gv]) + gE)))
12061121 }
12071122
1208- let fc = {
1209- let eT = cM
1210- let eU = size(eT)
1211- let eV = nil
1212- func eW (eX,eY) = if ((eY >= eU))
1213- then eX
1214- else gS(eX, eT[eY])
1215-
1216- func eZ (eX,eY) = if ((eY >= eU))
1217- then eX
1123+ let eT = {
1124+ let eK = cz
1125+ let eL = size(eK)
1126+ let eM = nil
1127+ func eN (eO,eP) = if ((eP >= eL))
1128+ then eO
1129+ else gD(eO, eK[eP])
1130+
1131+ func eQ (eO,eP) = if ((eP >= eL))
1132+ then eO
12181133 else throw("List size exceeds 6")
12191134
1220- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1135+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
12211136 }
1222- makeString(fc, "_")
1223- }
1224-
1225-
1226-func gU (gG,gQ,gH,gR) = {
1227- func gS (eR,gK) = {
1228- let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1229- $Tuple2((eR._1 :+ gT), (eR._2 + gT))
1137+ makeString(eT, "_")
1138+ }
1139+
1140+
1141+func gF (gr,gB,gs,gC) = {
1142+ func gD (eI,gv) = {
1143+ let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1144+ $Tuple2((eI._1 :+ gE), (eI._2 + gE))
12301145 }
12311146
1232- let eT = cM
1233- let eU = size(eT)
1234- let eV = $Tuple2(nil, 0)
1235- func eW (eX,eY) = if ((eY >= eU))
1236- then eX
1237- else gS(eX, eT[eY])
1238-
1239- func eZ (eX,eY) = if ((eY >= eU))
1240- then eX
1147+ let eK = cz
1148+ let eL = size(eK)
1149+ let eM = $Tuple2(nil, 0)
1150+ func eN (eO,eP) = if ((eP >= eL))
1151+ then eO
1152+ else gD(eO, eK[eP])
1153+
1154+ func eQ (eO,eP) = if ((eP >= eL))
1155+ then eO
12411156 else throw("List size exceeds 6")
12421157
1243- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1244- }
1245-
1246-
1247-func gV (gW,gX,gY,gZ) = {
1248- let ha = gY._1
1249- let hb = gY._2
1250- if ((hb == 0))
1251- then $Tuple2(makeString(gW, "_"), makeString(gX, "_"))
1252- else if ((gZ >= hb))
1158+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1159+ }
1160+
1161+
1162+func gG (gH,gI,gJ,gK) = {
1163+ let gL = gJ._1
1164+ let gM = gJ._2
1165+ if ((gM == 0))
1166+ then $Tuple2(makeString(gH, "_"), makeString(gI, "_"))
1167+ else if ((gK >= gM))
12531168 then {
1254- func hc (eR,gK) = (eR :+ toString((parseIntValue(gW[gK]) + ha[gK])))
1255-
1256- let fc = {
1257- let eT = cM
1258- let eU = size(eT)
1259- let eV = nil
1260- func eW (eX,eY) = if ((eY >= eU))
1261- then eX
1262- else hc(eX, eT[eY])
1263-
1264- func eZ (eX,eY) = if ((eY >= eU))
1265- then eX
1169+ func gN (eI,gv) = (eI :+ toString((parseIntValue(gH[gv]) + gL[gv])))
1170+
1171+ let eT = {
1172+ let eK = cz
1173+ let eL = size(eK)
1174+ let eM = nil
1175+ func eN (eO,eP) = if ((eP >= eL))
1176+ then eO
1177+ else gN(eO, eK[eP])
1178+
1179+ func eQ (eO,eP) = if ((eP >= eL))
1180+ then eO
12661181 else throw("List size exceeds 6")
12671182
1268- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1183+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
12691184 }
1270- $Tuple2(makeString(fc, "_"), makeString(gX, "_"))
1185+ $Tuple2(makeString(eT, "_"), makeString(gI, "_"))
12711186 }
12721187 else {
1273- func hd (eR,gK) = {
1274- let he = fraction(ha[gK], gZ, hb)
1275- $Tuple2((eR._1 :+ toString((parseIntValue(gW[gK]) + he))), (eR._2 :+ toString(((parseIntValue(gX[gK]) + ha[gK]) - he))))
1188+ func gO (eI,gv) = {
1189+ let gP = fraction(gL[gv], gK, gM)
1190+ $Tuple2((eI._1 :+ toString((parseIntValue(gH[gv]) + gP))), (eI._2 :+ toString(((parseIntValue(gI[gv]) + gL[gv]) - gP))))
12761191 }
12771192
1278- let fc = {
1279- let eT = cM
1280- let eU = size(eT)
1281- let eV = $Tuple2(nil, nil)
1282- func eW (eX,eY) = if ((eY >= eU))
1283- then eX
1284- else hd(eX, eT[eY])
1285-
1286- func eZ (eX,eY) = if ((eY >= eU))
1287- then eX
1193+ let eT = {
1194+ let eK = cz
1195+ let eL = size(eK)
1196+ let eM = $Tuple2(nil, nil)
1197+ func eN (eO,eP) = if ((eP >= eL))
1198+ then eO
1199+ else gO(eO, eK[eP])
1200+
1201+ func eQ (eO,eP) = if ((eP >= eL))
1202+ then eO
12881203 else throw("List size exceeds 6")
12891204
1290- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1205+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
12911206 }
1292- $Tuple2(makeString(fc._1, "_"), makeString(fc._2, "_"))
1207+ $Tuple2(makeString(eT._1, "_"), makeString(eT._2, "_"))
12931208 }
12941209 }
12951210
12961211
1297-func hf (hg) = if ((hg >= toBigInt(0)))
1298- then hg
1299- else -(hg)
1300-
1301-
1302-let hh = [[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]]
1303-
1304-func hi (dC,hj) = {
1305- let hk = toInt((dC % ei))
1306- let hl = if ((hj[0] > hk))
1212+func gQ (gR) = if ((gR >= toBigInt(0)))
1213+ then gR
1214+ else -(gR)
1215+
1216+
1217+let gS = [[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]]
1218+
1219+func gT (dp,gU) = {
1220+ let gV = toInt((dp % dU))
1221+ let gW = if ((gU[0] > gV))
13071222 then "A"
1308- else if ((hj[1] > hk))
1223+ else if ((gU[1] > gV))
13091224 then "B"
1310- else if ((hj[2] > hk))
1225+ else if ((gU[2] > gV))
13111226 then "C"
1312- else if ((hj[3] > hk))
1227+ else if ((gU[3] > gV))
13131228 then "D"
1314- else if ((hj[4] > hk))
1229+ else if ((gU[4] > gV))
13151230 then "E"
13161231 else "F"
1317- hl
1318- }
1319-
1320-
1321-func hm (hn,ho) = {
1322- let hp = hh[ho]
1323- func hq (eR,eS) = $Tuple2((((((eR._1 + hi(eR._2, hp)) + hi((eR._2 / ei), hp)) + hi((eR._2 / ej), hp)) + hi((eR._2 / ek), hp)) + hi((eR._2 / el), hp)), (eR._2 / em))
1324-
1325- let gv = {
1326- let eT = [1, 2, 3, 4, 5]
1327- let eU = size(eT)
1328- let eV = $Tuple2("", (hn / eh))
1329- func eW (eX,eY) = if ((eY >= eU))
1330- then eX
1331- else hq(eX, eT[eY])
1332-
1333- func eZ (eX,eY) = if ((eY >= eU))
1334- then eX
1232+ gW
1233+ }
1234+
1235+
1236+func gX (gY,gZ) = {
1237+ let ha = gS[gZ]
1238+ func hb (eI,eJ) = $Tuple2((((((eI._1 + gT(eI._2, ha)) + gT((eI._2 / dU), ha)) + gT((eI._2 / dV), ha)) + gT((eI._2 / dW), ha)) + gT((eI._2 / dX), ha)), (eI._2 / dY))
1239+
1240+ let hc = {
1241+ let eK = [1, 2, 3, 4, 5]
1242+ let eL = size(eK)
1243+ let eM = $Tuple2("", (gY / dT))
1244+ func eN (eO,eP) = if ((eP >= eL))
1245+ then eO
1246+ else hb(eO, eK[eP])
1247+
1248+ func eQ (eO,eP) = if ((eP >= eL))
1249+ then eO
13351250 else throw("List size exceeds 5")
13361251
1337- eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
1252+ eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
13381253 }
1339- gv._1
1340- }
1341-
1342-
1343-let hr = [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]
1344-
1345-let hs = ["A", "B", "C", "D", "E", "F"]
1346-
1347-func ht (hu,gH) = {
1348- func hv (eR,dA) = {
1349- let fB = eR._2
1350- let hw = parseIntValue(dA)
1351- let hg = if ((hw == 0))
1254+ hc._1
1255+ }
1256+
1257+
1258+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]
1259+
1260+let he = ["A", "B", "C", "D", "E", "F"]
1261+
1262+func hf (hg,gs) = {
1263+ func hh (eI,dn) = {
1264+ let fs = eI._2
1265+ let hi = parseIntValue(dn)
1266+ let gR = if ((hi == 0))
13521267 then 0
1353- else if ((hw >= (4 * gH)))
1354- then (hw / gH)
1355- else if ((hw > (3 * gH)))
1268+ else if ((hi >= (4 * gs)))
1269+ then (hi / gs)
1270+ else if ((hi > (3 * gs)))
13561271 then 3
1357- else (((hw - 1) / gH) + 1)
1358- $Tuple3((eR._1 :+ hg), (eR._2 + 1), (eR._3 + hg))
1272+ else (((hi - 1) / gs) + 1)
1273+ $Tuple3((eI._1 :+ gR), (eI._2 + 1), (eI._3 + gR))
13591274 }
13601275
1361- let gv = {
1362- let eT = hu
1363- let eU = size(eT)
1364- let eV = $Tuple3(nil, 0, 0)
1365- func eW (eX,eY) = if ((eY >= eU))
1366- then eX
1367- else hv(eX, eT[eY])
1368-
1369- func eZ (eX,eY) = if ((eY >= eU))
1370- then eX
1276+ let hc = {
1277+ let eK = hg
1278+ let eL = size(eK)
1279+ let eM = $Tuple3(nil, 0, 0)
1280+ func eN (eO,eP) = if ((eP >= eL))
1281+ then eO
1282+ else hh(eO, eK[eP])
1283+
1284+ func eQ (eO,eP) = if ((eP >= eL))
1285+ then eO
13711286 else throw("List size exceeds 6")
13721287
1373- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1288+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
13741289 }
1375- let hx = gv._1
1376- let hy = value(indexOf(hx, max(hx)))
1377- let hz = (gv._3 - 25)
1378- func hA (eR,dc) = {
1379- let dM = if ((dc == hy))
1380- then (hx[dc] - hz)
1381- else hx[dc]
1382- let dQ = if ((dM == 0))
1290+ let hj = hc._1
1291+ let hk = value(indexOf(hj, max(hj)))
1292+ let hl = (hc._3 - 25)
1293+ func hm (eI,cP) = {
1294+ let dz = if ((cP == hk))
1295+ then (hj[cP] - hl)
1296+ else hj[cP]
1297+ let dD = if ((dz == 0))
13831298 then nil
1384- else split(drop(toString(pow(10, 0, dM, 0, 0, DOWN)), 1), "")
1385- let ga = hs[dc]
1386- func hB (hC,hD) = (hC :+ ga)
1387-
1388- let hE = {
1389- let eT = dQ
1390- let eU = size(eT)
1391- let eV = nil
1392- func hF (eX,eY) = if ((eY >= eU))
1393- then eX
1394- else hB(eX, eT[eY])
1395-
1396- func hG (eX,eY) = if ((eY >= eU))
1397- then eX
1299+ else split(drop(toString(pow(10, 0, dz, 0, 0, DOWN)), 1), "")
1300+ let fN = he[cP]
1301+ func hn (ho,hp) = (ho :+ fN)
1302+
1303+ let hq = {
1304+ let eK = dD
1305+ let eL = size(eK)
1306+ let eM = nil
1307+ func hr (eO,eP) = if ((eP >= eL))
1308+ then eO
1309+ else hn(eO, eK[eP])
1310+
1311+ func hs (eO,eP) = if ((eP >= eL))
1312+ then eO
13981313 else throw("List size exceeds 25")
13991314
1400- hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eV, 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)
1401- }
1402- (eR ++ hE)
1315+ 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(eM, 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)
1316+ }
1317+ (eI ++ hq)
14031318 }
14041319
1405- let fc = {
1406- let eT = cM
1407- let eU = size(eT)
1408- let eV = nil
1409- func hF (eX,eY) = if ((eY >= eU))
1410- then eX
1411- else hA(eX, eT[eY])
1412-
1413- func hG (eX,eY) = if ((eY >= eU))
1414- then eX
1320+ let eT = {
1321+ let eK = cz
1322+ let eL = size(eK)
1323+ let eM = nil
1324+ func hr (eO,eP) = if ((eP >= eL))
1325+ then eO
1326+ else hm(eO, eK[eP])
1327+
1328+ func hs (eO,eP) = if ((eP >= eL))
1329+ then eO
14151330 else throw("List size exceeds 6")
14161331
1417- hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
1332+ hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
14181333 }
1419- func hH (eR,fB) = (eR + fc[fB])
1420-
1421- let eT = hr
1422- let eU = size(eT)
1423- let eV = ""
1424- func hI (eX,eY) = if ((eY >= eU))
1425- then eX
1426- else hH(eX, eT[eY])
1427-
1428- func hJ (eX,eY) = if ((eY >= eU))
1429- then eX
1334+ func ht (eI,fs) = (eI + eT[fs])
1335+
1336+ let eK = hd
1337+ let eL = size(eK)
1338+ let eM = ""
1339+ func hu (eO,eP) = if ((eP >= eL))
1340+ then eO
1341+ else ht(eO, eK[eP])
1342+
1343+ func hv (eO,eP) = if ((eP >= eL))
1344+ then eO
14301345 else throw("List size exceeds 25")
14311346
1432- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
1433- }
1434-
1435-
1436-func hK (hL) = {
1437- let gu = split(valueOrElse(getString(hL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1438-[toString(valueOrElse(parseInt(gu[bm]), 0)), if ((size(split(gu[bn], "_")) == aJ))
1439- then gu[bn]
1440- else "0_0_0_0_0_0", if ((size(split(gu[bo], "_")) == aJ))
1441- then gu[bo]
1442- else "0_0_0_0_0_0", gu[bp]]
1443- }
1444-
1445-
1446-func hM (hN) = {
1447- let fp = split(hN, "_")
1448- ((aM * (parseIntValue(fp[1]) + 1)) * parseIntValue(fp[0]))
1449- }
1450-
1451-
1452-func hO (hP) = {
1453- let hQ = hP[bg]
1454- func hR (eR,hS) = (eR + parseIntValue(hS))
1455-
1456- func hT (eR,hS) = {
1457- let dc = eR._1
1458- let eK = (((parseIntValue(hS) + bc) - 1) / bc)
1459- $Tuple2((dc + 1), (eR._2 + (eK * cG)))
1347+ 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(eM, 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)
1348+ }
1349+
1350+
1351+func hw (hx) = {
1352+ let hy = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1353+[toString(valueOrElse(parseInt(hy[aY]), 0)), if ((size(split(hy[aZ], "_")) == at))
1354+ then hy[aZ]
1355+ else "0_0_0_0_0_0", if ((size(split(hy[ba], "_")) == at))
1356+ then hy[ba]
1357+ else "0_0_0_0_0_0", hy[bb]]
1358+ }
1359+
1360+
1361+func hz (hA) = {
1362+ let fg = split(hA, "_")
1363+ ((aw * (parseIntValue(fg[1]) + 1)) * parseIntValue(fg[0]))
1364+ }
1365+
1366+
1367+func hB (hC) = {
1368+ let hD = hC[aS]
1369+ func hE (eI,hF) = (eI + parseIntValue(hF))
1370+
1371+ func hG (eI,hF) = {
1372+ let cP = eI._1
1373+ let eB = (((parseIntValue(hF) + aO) - 1) / aO)
1374+ $Tuple2((cP + 1), (eI._2 + (eB * ct)))
14601375 }
14611376
1462- let hU = {
1463- let eT = split(hP[be], "_")
1464- let eU = size(eT)
1465- let eV = 0
1466- func eW (eX,eY) = if ((eY >= eU))
1467- then eX
1468- else hR(eX, eT[eY])
1469-
1470- func eZ (eX,eY) = if ((eY >= eU))
1471- then eX
1377+ let hH = {
1378+ let eK = split(hC[aQ], "_")
1379+ let eL = size(eK)
1380+ let eM = 0
1381+ func eN (eO,eP) = if ((eP >= eL))
1382+ then eO
1383+ else hE(eO, eK[eP])
1384+
1385+ func eQ (eO,eP) = if ((eP >= eL))
1386+ then eO
14721387 else throw("List size exceeds 6")
14731388
1474- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1389+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
14751390 }
1476- let hV = {
1477- let eT = split(hP[bf], "_")
1478- let eU = size(eT)
1479- let eV = 0
1480- func hF (eX,eY) = if ((eY >= eU))
1481- then eX
1482- else hR(eX, eT[eY])
1483-
1484- func hG (eX,eY) = if ((eY >= eU))
1485- then eX
1391+ let hI = {
1392+ let eK = split(hC[aR], "_")
1393+ let eL = size(eK)
1394+ let eM = 0
1395+ func hr (eO,eP) = if ((eP >= eL))
1396+ then eO
1397+ else hE(eO, eK[eP])
1398+
1399+ func hs (eO,eP) = if ((eP >= eL))
1400+ then eO
14861401 else throw("List size exceeds 6")
14871402
1488- hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
1403+ hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
14891404 }
1490- let hW = if ((hQ == ""))
1405+ let hJ = if ((hD == ""))
14911406 then 0
1492- else ( let eT = split_4C(hQ, "_")
1493- let eU = size(eT)
1494- let eV = $Tuple2(0, 0)
1495- func hI (eX,eY) = if ((eY >= eU))
1496- then eX
1497- else hT(eX, eT[eY])
1498-
1499- func hJ (eX,eY) = if ((eY >= eU))
1500- then eX
1407+ else ( let eK = split_4C(hD, "_")
1408+ let eL = size(eK)
1409+ let eM = $Tuple2(0, 0)
1410+ func hu (eO,eP) = if ((eP >= eL))
1411+ then eO
1412+ else hG(eO, eK[eP])
1413+
1414+ func hv (eO,eP) = if ((eP >= eL))
1415+ then eO
15011416 else throw("List size exceeds 50")
15021417
1503- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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
1504- ((hU + hV) + hW)
1505- }
1506-
1507-
1508-func hX (hY,hZ,ia) = {
1509- let hN = ((toString(hZ) + "_") + toString(ia))
1510- let ib = hM(hN)
1511- let ic = valueOrElse(getString(hY), (hN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1512- let id = split_4C(ic, ":")
1513- let ie = hO(id)
1514- let if = if ((5 > size(id)))
1515- then makeString(["0", toString(ie), toString((ib - ie)), toString(ib)], "_")
1418+ 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(eM, 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
1419+ ((hH + hI) + hJ)
1420+ }
1421+
1422+
1423+func hK (hL,hM,hN) = {
1424+ let hA = ((toString(hM) + "_") + toString(hN))
1425+ let hO = hz(hA)
1426+ let hP = valueOrElse(getString(hL), (hA + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1427+ let hQ = split_4C(hP, ":")
1428+ let hR = hB(hQ)
1429+ let hS = if ((5 > size(hQ)))
1430+ then makeString(["0", toString(hR), toString((hO - hR)), toString(hO)], "_")
15161431 else {
1517- let ig = split(id[bh], "_")
1518- let ih = parseIntValue(ig[bi])
1519- let ii = if ((size(ig) > 1))
1520- then parseIntValue(ig[bj])
1521- else ie
1522- makeString([toString(ih), toString(ii), toString(((ib - ih) - ii)), toString(ib)], "_")
1523- }
1524-[id[bd], if ((size(split(id[be], "_")) == aJ))
1525- then id[be]
1526- else "0_0_0_0_0_0", if ((size(split(id[bf], "_")) == aJ))
1527- then id[bf]
1528- else "0_0_0_0_0_0", id[bg], if]
1529- }
1530-
1531-
1532-func ij (hP) = {
1533- let ik = hO(hP)
1534- let il = parseIntValue(split(hP[bh], "_")[bi])
1535- ((hM(hP[bd]) - ik) - il)
1536- }
1537-
1538-
1539-func im (in,hP,io) = if ((size(in) != 3))
1432+ let hT = split(hQ[aT], "_")
1433+ let hU = parseIntValue(hT[aU])
1434+ let hV = if ((size(hT) > 1))
1435+ then parseIntValue(hT[aV])
1436+ else hR
1437+ makeString([toString(hU), toString(hV), toString(((hO - hU) - hV)), toString(hO)], "_")
1438+ }
1439+[hQ[aP], if ((size(split(hQ[aQ], "_")) == at))
1440+ then hQ[aQ]
1441+ else "0_0_0_0_0_0", if ((size(split(hQ[aR], "_")) == at))
1442+ then hQ[aR]
1443+ else "0_0_0_0_0_0", hQ[aS], hS]
1444+ }
1445+
1446+
1447+func hW (hC) = {
1448+ let hX = hB(hC)
1449+ let hY = parseIntValue(split(hC[aT], "_")[aU])
1450+ ((hz(hC[aP]) - hX) - hY)
1451+ }
1452+
1453+
1454+func hZ (ia,hC,ib) = if ((size(ia) != 3))
15401455 then throw("cargoListStr should contain exactly 2 ':' separators")
15411456 else {
1542- let ip = split(in[0], "_")
1543- let iq = split(in[1], "_")
1544- let ir = if ((in[2] == ""))
1457+ let ic = split(ia[0], "_")
1458+ let id = split(ia[1], "_")
1459+ let ie = if ((ia[2] == ""))
15451460 then nil
1546- else split_4C(in[2], "_")
1547- if ((size(ip) != aJ))
1461+ else split_4C(ia[2], "_")
1462+ if ((size(ic) != at))
15481463 then throw("All 6 resources should be passed")
1549- else if ((size(iq) != aJ))
1464+ else if ((size(id) != at))
15501465 then throw("All 6 materials should be passed")
15511466 else {
1552- let gZ = ij(hP)
1553- let is = split(hP[be], "_")
1554- let it = split(hP[bf], "_")
1555- let iu = if ((hP[bg] == ""))
1467+ let gK = hW(hC)
1468+ let if = split(hC[aQ], "_")
1469+ let ig = split(hC[aR], "_")
1470+ let ih = if ((hC[aS] == ""))
15561471 then nil
1557- else split_4C(hP[bg], "_")
1558- let gX = split(io[bn], "_")
1559- let iv = split(io[bo], "_")
1560- let iw = if ((io[bp] == ""))
1472+ else split_4C(hC[aS], "_")
1473+ let gI = split(ib[aZ], "_")
1474+ let ii = split(ib[ba], "_")
1475+ let ij = if ((ib[bb] == ""))
15611476 then nil
1562- else split_4C(io[bp], "_")
1563- func ix (eR,hS) = {
1564- let gK = eR._1
1565- let iy = parseIntValue(hS)
1566- let iz = parseIntValue(is[gK])
1567- let iA = parseIntValue(gX[gK])
1568- if ((iy == 0))
1569- then $Tuple4((gK + 1), (eR._2 :+ is[gK]), (eR._3 :+ gX[gK]), eR._4)
1570- else if ((iy > 0))
1571- then if ((iy > iA))
1572- then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iA)) + " available"))
1573- else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
1574- else if ((-(iy) > iz))
1575- then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iz)) + " available"))
1576- else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
1477+ else split_4C(ib[bb], "_")
1478+ func ik (eI,hF) = {
1479+ let gv = eI._1
1480+ let il = parseIntValue(hF)
1481+ let im = parseIntValue(if[gv])
1482+ let in = parseIntValue(gI[gv])
1483+ if ((il == 0))
1484+ then $Tuple4((gv + 1), (eI._2 :+ if[gv]), (eI._3 :+ gI[gv]), eI._4)
1485+ else if ((il > 0))
1486+ then if ((il > in))
1487+ then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(in)) + " available"))
1488+ else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
1489+ else if ((-(il) > im))
1490+ then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(im)) + " available"))
1491+ else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
15771492 }
15781493
1579- let fc = {
1580- let eT = ip
1581- let eU = size(eT)
1582- let eV = $Tuple4(0, nil, nil, 0)
1583- func eW (eX,eY) = if ((eY >= eU))
1584- then eX
1585- else ix(eX, eT[eY])
1586-
1587- func eZ (eX,eY) = if ((eY >= eU))
1588- then eX
1494+ let eT = {
1495+ let eK = ic
1496+ let eL = size(eK)
1497+ let eM = $Tuple4(0, nil, nil, 0)
1498+ func eN (eO,eP) = if ((eP >= eL))
1499+ then eO
1500+ else ik(eO, eK[eP])
1501+
1502+ func eQ (eO,eP) = if ((eP >= eL))
1503+ then eO
15891504 else throw("List size exceeds 6")
15901505
1591- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1506+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
15921507 }
1593- func iB (eR,hS) = {
1594- let gK = eR._1
1595- let iy = parseIntValue(hS)
1596- let iC = parseIntValue(it[gK])
1597- let iD = parseIntValue(iv[gK])
1598- if ((iy == 0))
1599- then $Tuple4((gK + 1), (eR._2 :+ it[gK]), (eR._3 :+ iv[gK]), eR._4)
1600- else if ((iy > 0))
1601- then if ((iy > iD))
1602- then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iD)) + " available"))
1603- else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
1604- else if ((-(iy) > iC))
1605- then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iC)) + " available"))
1606- else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
1508+ func io (eI,hF) = {
1509+ let gv = eI._1
1510+ let il = parseIntValue(hF)
1511+ let ip = parseIntValue(ig[gv])
1512+ let iq = parseIntValue(ii[gv])
1513+ if ((il == 0))
1514+ then $Tuple4((gv + 1), (eI._2 :+ ig[gv]), (eI._3 :+ ii[gv]), eI._4)
1515+ else if ((il > 0))
1516+ then if ((il > iq))
1517+ then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(iq)) + " available"))
1518+ else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
1519+ else if ((-(il) > ip))
1520+ then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(ip)) + " available"))
1521+ else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
16071522 }
16081523
1609- let gq = {
1610- let eT = iq
1611- let eU = size(eT)
1612- let eV = $Tuple4(0, nil, nil, fc._4)
1613- func hF (eX,eY) = if ((eY >= eU))
1614- then eX
1615- else iB(eX, eT[eY])
1616-
1617- func hG (eX,eY) = if ((eY >= eU))
1618- then eX
1524+ let gd = {
1525+ let eK = id
1526+ let eL = size(eK)
1527+ let eM = $Tuple4(0, nil, nil, eT._4)
1528+ func hr (eO,eP) = if ((eP >= eL))
1529+ then eO
1530+ else io(eO, eK[eP])
1531+
1532+ func hs (eO,eP) = if ((eP >= eL))
1533+ then eO
16191534 else throw("List size exceeds 6")
16201535
1621- hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
1536+ hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
16221537 }
1623- func iE (eR,hS) = {
1624- let gK = eR._1
1625- let iy = parseIntValue(hS)
1626- let iF = if ((size(iu) > gK))
1627- then parseIntValue(iu[gK])
1538+ func ir (eI,hF) = {
1539+ let gv = eI._1
1540+ let il = parseIntValue(hF)
1541+ let is = if ((size(ih) > gv))
1542+ then parseIntValue(ih[gv])
16281543 else 0
1629- let iG = if ((size(iw) > gK))
1630- then parseIntValue(iw[gK])
1544+ let it = if ((size(ij) > gv))
1545+ then parseIntValue(ij[gv])
16311546 else 0
1632- if ((iy == 0))
1633- then $Tuple4((gK + 1), (eR._2 :+ toString(iF)), (eR._3 :+ toString(iG)), eR._4)
1634- else if ((iy > 0))
1635- then if ((iy > iG))
1636- then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iG)) + " available"))
1547+ if ((il == 0))
1548+ then $Tuple4((gv + 1), (eI._2 :+ toString(is)), (eI._3 :+ toString(it)), eI._4)
1549+ else if ((il > 0))
1550+ then if ((il > it))
1551+ then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(it)) + " available"))
16371552 else {
1638- let fT = (eH((iF + iy), bc) - eH(iF, bc))
1639- $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
1553+ let iu = (ey((is + il), aO) - ey(is, aO))
1554+ $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
16401555 }
1641- else if ((-(iy) > iF))
1642- then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iF)) + " available"))
1556+ else if ((-(il) > is))
1557+ then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(is)) + " available"))
16431558 else {
1644- let fT = (eH((iF + iy), bc) - eH(iF, bc))
1645- $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
1559+ let iu = (ey((is + il), aO) - ey(is, aO))
1560+ $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
16461561 }
16471562 }
16481563
1649- let gu = if ((size(ir) != 0))
1564+ let hy = if ((size(ie) != 0))
16501565 then {
1651- let eT = ir
1652- let eU = size(eT)
1653- let eV = $Tuple4(0, nil, nil, gq._4)
1654- func hI (eX,eY) = if ((eY >= eU))
1655- then eX
1656- else iE(eX, eT[eY])
1657-
1658- func hJ (eX,eY) = if ((eY >= eU))
1659- then eX
1566+ let eK = ie
1567+ let eL = size(eK)
1568+ let eM = $Tuple4(0, nil, nil, gd._4)
1569+ func hu (eO,eP) = if ((eP >= eL))
1570+ then eO
1571+ else ir(eO, eK[eP])
1572+
1573+ func hv (eO,eP) = if ((eP >= eL))
1574+ then eO
16601575 else throw("List size exceeds 50")
16611576
1662- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
1577+ 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(eM, 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)
16631578 }
1664- else $Tuple4(0, iu, iw, gq._4)
1665- let iH = gu._4
1666- if ((iH > gZ))
1667- then throw((((("Attempt to put total " + toString(iH)) + " stuff, but only ") + toString(gZ)) + " warehouse space left"))
1668- else $Tuple7(makeString(fc._2, "_"), makeString(gq._2, "_"), makeString_2C(gu._2, "_"), makeString(fc._3, "_"), makeString(gq._3, "_"), makeString_2C(gu._3, "_"), iH)
1579+ else $Tuple4(0, ih, ij, gd._4)
1580+ let iv = hy._4
1581+ if ((iv > gK))
1582+ then throw((((("Attempt to put total " + toString(iv)) + " stuff, but only ") + toString(gK)) + " warehouse space left"))
1583+ else $Tuple7(makeString(eT._2, "_"), makeString(gd._2, "_"), makeString_2C(hy._2, "_"), makeString(eT._3, "_"), makeString(gd._3, "_"), makeString_2C(hy._3, "_"), iv)
16691584 }
16701585 }
16711586
16721587
1673-func iI (iJ,iK) = {
1674- let bQ = toString(iJ)
1675- let iL = hf(toBigInt(iK))
1676- let iM = valueOrElse(getInteger(eo()), (en + 1))
1677- let es = toString(iM)
1678- let ho = toInt((iL % eh))
1679- let gN = hm(iL, ho)
1680- let dv = aU[ho]
1681- let iN = Issue(eG(es, "S"), makeString([es, "S", gN, dv], "_"), 1, 0, false)
1682- let bu = calculateAssetId(iN)
1683- let iO = toBase58String(bu)
1684- $Tuple2([IntegerEntry(eo(), (iM + 1)), iN, StringEntry(er(es), iO), StringEntry(bt(iO), bQ), StringEntry(eu(es), bQ), IntegerEntry(bD(iO), 0), IntegerEntry(et(iO, bQ), 0), ScriptTransfer(iJ, 1, bu)], $Tuple2(iO, dv))
1685- }
1686-
1687-
1688-func iP (bQ,iQ,iR) = if (!(sigVerify_8Kb(iQ, iR, cy)))
1588+func iw (ix,iy) = {
1589+ let bC = toString(ix)
1590+ let iz = gQ(toBigInt(iy))
1591+ let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1592+ let ee = toString(iA)
1593+ let gZ = toInt((iz % dT))
1594+ let gy = gX(iz, gZ)
1595+ let di = aH[gZ]
1596+ let iB = Issue(ex(ee, "S"), makeString([ee, "S", gy, di], "_"), 1, 0, false)
1597+ let bg = calculateAssetId(iB)
1598+ let iC = toBase58String(bg)
1599+ $Tuple2([IntegerEntry(ea(), (iA + 1)), iB, StringEntry(ed(ee), iC), StringEntry(bf(iC), bC), StringEntry(eg(ee), bC), IntegerEntry(bq(iC), 0), IntegerEntry(ef(iC, bC), 0), ScriptTransfer(ix, 1, bg)], $Tuple2(iC, di))
1600+ }
1601+
1602+
1603+func iD (bC,iE,iF) = if (!(sigVerify_8Kb(iE, iF, cl)))
16891604 then throw("signature does not match")
16901605 else {
1691- let fp = split_4C(toUtf8String(iQ), ";")
1692- let iS = split_4C(fp[0], "|")
1693- let iT = split(iS[eC], "_")
1694- let iU = parseIntValue(iT[0])
1695- let iV = parseIntValue(iT[1])
1696- let iW = split(fp[1], ":")
1697- let iX = iW[0]
1698- let iY = parseIntValue(iS[eD])
1699- if (if ((iY > (lastBlock.timestamp + dZ)))
1606+ let fg = split_4C(toUtf8String(iE), ";")
1607+ let iG = split_4C(fg[0], "|")
1608+ let iH = split(iG[eo], "_")
1609+ let iI = parseIntValue(iH[0])
1610+ let iJ = parseIntValue(iH[1])
1611+ let iK = split(fg[1], ":")
1612+ let iL = iK[0]
1613+ let iM = parseIntValue(iG[ep])
1614+ if (if ((iM > (lastBlock.timestamp + dL)))
17001615 then true
1701- else ((lastBlock.timestamp - dZ) > iY))
1702- then throw(((("signature outdated: logTime=" + toString(iY)) + ", bcTime=") + toString(lastBlock.timestamp)))
1616+ else ((lastBlock.timestamp - dL) > iM))
1617+ then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
17031618 else {
1704- let iZ = iW[1]
1705- let ja = valueOrElse(getString(dK(bQ)), "")
1706- if ((ja != iZ))
1707- then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
1619+ let iN = iK[1]
1620+ let iO = valueOrElse(getString(dx(bC)), "")
1621+ if ((iO != iN))
1622+ then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
17081623 else {
1709- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1710- let jb = A(B)
1711- let jc = aj(valueOrElse(getInteger(E(B)), 0))
1712- let jd = valueOrElse(getInteger(jb), jc)
1713- if ((jd != iU))
1714- then throw(((("oldHealth=" + toString(jd)) + " from state does not match one from flight log=") + toString(iU)))
1715- else if ((0 >= iU))
1624+ let u = valueOrErrorMessage(getString(by(bC)), "You don't have a duck staked")
1625+ let iP = t(u)
1626+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
1627+ let iR = valueOrElse(getInteger(iP), iQ)
1628+ if ((iR != iI))
1629+ then throw(((("oldHealth=" + toString(iR)) + " from state does not match one from flight log=") + toString(iI)))
1630+ else if ((0 >= iI))
17161631 then throw("You can't fly with zero health")
1717- else if (!(gw(B)))
1632+ else if (!(gg(u)))
17181633 then throw("Equipment incompatible")
17191634 else {
1720- let je = if ((size(iS) > eE))
1721- then iS[eE]
1635+ let iS = if ((size(iG) > eq))
1636+ then iG[eq]
17221637 else ""
1723- let jf = if ((size(iS) > eF))
1724- then iS[eF]
1638+ let iT = if ((size(iG) > er))
1639+ then iG[er]
17251640 else ""
1726- let jg = if (if ((iV > 0))
1727- then (je == "$")
1641+ let iU = if (if ((iJ > 0))
1642+ then (iS == "$")
17281643 else false)
1729- then dB(invoke(dd, "sendUsdtPrize", [bQ], nil))
1644+ then do(invoke(cQ, "sendUsdtPrize", [bC], nil))
17301645 else 0
1731- $Tuple5(iV, B, jg, iX, jf)
1646+ $Tuple5(iJ, u, iU, iL, iT)
17321647 }
17331648 }
17341649 }
17351650 }
17361651
17371652
1738-func jh (Q,ji) = {
1739- let ia = valueOrElse(getInteger(bD(Q)), 0)
1740- let jj = valueOrElse(getInteger(bx(aI, Q)), 0)
1741- let jk = (ia / 6)
1742- let jl = (ia / 7)
1743- ((aL + fraction(aL, ((ia + jk) + (2 * jl)), 5)) + fraction(aL, jj, (ji * 5)))
1744- }
1745-
1746-
1747-func jm (c,jn,jo) = {
1748- let jp = if ((jn == ez))
1749- then $Tuple2(jo, valueOrElse(getString(bM(c)), ""))
1653+func iV (bp,iW) = {
1654+ let hN = valueOrElse(getInteger(bq(bp)), 0)
1655+ let iX = valueOrElse(getInteger(bj(as, bp)), 0)
1656+ let iY = (hN / 6)
1657+ let iZ = (hN / 7)
1658+ ((av + fraction(av, ((hN + iY) + (2 * iZ)), 5)) + fraction(av, iX, (iW * 5)))
1659+ }
1660+
1661+
1662+func ja (c,jb,jc) = {
1663+ let jd = if ((jb == el))
1664+ then $Tuple2(jc, valueOrElse(getString(by(c)), ""))
17501665 else {
1751- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1752- let jq = valueOrElse(getString(bO(B)), aN)
1753- let cj = split(value(jq), "_")
1754- if ((cj[br] != "L"))
1755- then throw((("Duck location type is " + cj[br]) + ", but should be L"))
1756- else $Tuple2(cj[bs], B)
1757- }
1758- let Q = jp._1
1759- let jr = jp._2
1760- let js = value(assetInfo(fromBase58String(Q)))
1761- let jt = bw(Q)
1762- let ju = valueOrErrorMessage(getInteger(jt), (("Land " + js.name) + " is not staked"))
1763- let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1764- if ((jv != c))
1765- then throw((aF + " is not yours"))
1666+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1667+ let je = valueOrElse(getString(bA(u)), ax)
1668+ let bV = split(value(je), "_")
1669+ if ((bV[bd] != "L"))
1670+ then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
1671+ else $Tuple2(bV[be], u)
1672+ }
1673+ let bp = jd._1
1674+ let jf = jd._2
1675+ let jg = value(assetInfo(fromBase58String(bp)))
1676+ let jh = bi(bp)
1677+ let ji = valueOrErrorMessage(getInteger(jh), (("Land " + jg.name) + " is not staked"))
1678+ let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1679+ if ((jj != c))
1680+ then throw((ap + " is not yours"))
17661681 else {
1767- let jw = split(js.description, "_")
1768- $Tuple4(jr, Q, jw, ju)
1769- }
1770- }
1771-
1772-
1773-func jx (c,eI,jn,jo) = if ((0 > eI))
1682+ let jk = split(jg.description, "_")
1683+ $Tuple4(jf, bp, jk, ji)
1684+ }
1685+ }
1686+
1687+
1688+func jl (c,ez,jb,jc) = if ((0 > ez))
17741689 then throw("Negative amount")
17751690 else {
1776- let ga = jm(c, jn, jo)
1777- let dH = ga._3[dk]
1778- let gG = gM(ga._3[dl])
1779- let gQ = (lastBlock.timestamp - ga._4)
1780- if ((0 > gQ))
1781- then throw(((("Saved timestamp is in future, saved = " + toString(ga._4)) + ", current = ") + toString(lastBlock.timestamp)))
1691+ let fN = ja(c, jb, jc)
1692+ let du = fN._3[cX]
1693+ let gr = gx(fN._3[cY])
1694+ let gB = (lastBlock.timestamp - fN._4)
1695+ if ((0 > gB))
1696+ then throw(((("Saved timestamp is in future, saved = " + toString(fN._4)) + ", current = ") + toString(lastBlock.timestamp)))
17821697 else {
1783- let ji = dG(dH)
1784- let jy = jh(ga._2, ji)
1785- let jz = fraction(gQ, (jy * ji), a)
1786- if ((eI > jz))
1787- then throw(((("Not enough resources, available = " + toString(jz)) + ", requested = ") + toString(eI)))
1698+ let iW = dt(du)
1699+ let jm = iV(fN._2, iW)
1700+ let jn = fraction(gB, (jm * iW), a)
1701+ if ((ez > jn))
1702+ then throw(((("Not enough resources, available = " + toString(jn)) + ", requested = ") + toString(ez)))
17881703 else {
1789- let jA = fraction((jz - eI), a, (jy * ji))
1790- let jB = (lastBlock.timestamp - jA)
1791- let hZ = (ji / cH)
1792- let gY = gU(gG, (gQ - jA), hZ, jy)
1793- let hY = bC(ga._2)
1794- let ia = valueOrElse(getInteger(bD(ga._2)), 0)
1795- let hP = hX(hY, hZ, ia)
1796- let ig = split(hP[bh], "_")
1797- let gZ = parseIntValue(ig[bk])
1798- if (if ((jn == ez))
1799- then (eI > gZ)
1704+ let jo = fraction((jn - ez), a, (jm * iW))
1705+ let jp = (lastBlock.timestamp - jo)
1706+ let hM = (iW / cu)
1707+ let gJ = gF(gr, (gB - jo), hM, jm)
1708+ let hL = bo(fN._2)
1709+ let hN = valueOrElse(getInteger(bq(fN._2)), 0)
1710+ let hC = hK(hL, hM, hN)
1711+ let hT = split(hC[aT], "_")
1712+ let gK = parseIntValue(hT[aW])
1713+ if (if ((jb == el))
1714+ then (ez > gK)
18001715 else false)
1801- then throw((("Only " + toString(gZ)) + " space left in warehouse"))
1716+ then throw((("Only " + toString(gK)) + " space left in warehouse"))
18021717 else {
1803- let hL = bN(ga._1)
1804- let io = hK(hL)
1805- let gX = split(io[bn], "_")
1806- let gW = split(hP[be], "_")
1807- let jC = if ((jn == ez))
1808- then $Tuple4(gO(gW, gG, (gQ - jA), hZ, jy), io[bn], (parseIntValue(ig[bj]) + gY._2), (parseIntValue(ig[bk]) - gY._2))
1809- else if ((jn == eA))
1810- then $Tuple4(hP[be], gO(gX, gG, (gQ - jA), hZ, jy), parseIntValue(ig[bj]), parseIntValue(ig[bk]))
1718+ let hx = bz(fN._1)
1719+ let ib = hw(hx)
1720+ let gI = split(ib[aZ], "_")
1721+ let gH = split(hC[aQ], "_")
1722+ let jq = if ((jb == el))
1723+ then $Tuple4(gz(gH, gr, (gB - jo), hM, jm), ib[aZ], (parseIntValue(hT[aV]) + gJ._2), (parseIntValue(hT[aW]) - gJ._2))
1724+ else if ((jb == em))
1725+ then $Tuple4(hC[aQ], gz(gI, gr, (gB - jo), hM, jm), parseIntValue(hT[aV]), parseIntValue(hT[aW]))
18111726 else {
1812- let jD = gV(gW, gX, gY, gZ)
1813- let jE = min([parseIntValue(ig[bk]), gY._2])
1814- $Tuple4(jD._1, jD._2, (parseIntValue(ig[bj]) + jE), (parseIntValue(ig[bk]) - jE))
1727+ let jr = gG(gH, gI, gJ, gK)
1728+ let js = min([parseIntValue(hT[aW]), gJ._2])
1729+ $Tuple4(jr._1, jr._2, (parseIntValue(hT[aV]) + js), (parseIntValue(hT[aW]) - js))
18151730 }
1816- let jF = jC._1
1817- let jG = jC._2
1818- let jH = jC._3
1819- let jI = jC._4
1820- $Tuple5([IntegerEntry(bw(ga._2), jB), IntegerEntry(bz(aF, ga._2, c), jB)], hL, [io[bm], jG, io[bo], io[bp]], hY, [hP[bd], jF, hP[bf], hP[bg], makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")])
1731+ let jt = jq._1
1732+ let ju = jq._2
1733+ let jv = jq._3
1734+ let jw = jq._4
1735+ $Tuple5([IntegerEntry(bi(fN._2), jp), IntegerEntry(bl(ap, fN._2, c), jp)], hx, [ib[aY], ju, ib[ba], ib[bb]], hL, [hC[aP], jt, hC[aR], hC[aS], makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")])
18211736 }
18221737 }
18231738 }
18241739 }
18251740
18261741
1827-func jJ (c,Q,ji,jn) = {
1828- let jt = bw(Q)
1829- let ju = value(getInteger(jt))
1830- let jz = (fraction((lastBlock.timestamp - ju), jh(Q, ji), a) * ji)
1831- jx(c, jz, jn, Q)
1832- }
1833-
1834-
1835-func jK (fe,iJ,jL,Q) = {
1836- let c = toString(iJ)
1837- let ga = jm(c, eB, Q)
1838- let ji = dG(ga._3[dk])
1839- let jM = bD(ga._2)
1840- let jN = valueOrElse(getInteger(jM), 0)
1841- if (if (!(cu))
1842- then (jN >= 3)
1742+func jx (c,bp,iW,jb) = {
1743+ let jh = bi(bp)
1744+ let ji = value(getInteger(jh))
1745+ let jn = (fraction((lastBlock.timestamp - ji), iV(bp, iW), a) * iW)
1746+ jl(c, jn, jb, bp)
1747+ }
1748+
1749+
1750+func jy (eV,ix,jz,bp) = {
1751+ let c = toString(ix)
1752+ let fN = ja(c, en, bp)
1753+ let iW = dt(fN._3[cX])
1754+ let jA = bq(fN._2)
1755+ let jB = valueOrElse(getInteger(jA), 0)
1756+ if (if (!(ch))
1757+ then (jB >= 3)
18431758 else false)
18441759 then throw("Currently max infrastructure level = 3")
18451760 else {
1846- let jO = ((sqrt(ji, 0, 0, DOWN) / 5) + 2)
1847- let ao = (jN + 1)
1848- if (if (cu)
1849- then (ao > jO)
1761+ let jC = ((sqrt(iW, 0, 0, DOWN) / 5) + 2)
1762+ let ag = (jB + 1)
1763+ if (if (ch)
1764+ then (ag > jC)
18501765 else false)
1851- then throw(("Currently max infrastructure level = " + toString(jO)))
1766+ then throw(("Currently max infrastructure level = " + toString(jC)))
18521767 else {
1853- let jP = fraction(ec, (ji * ao), cH)
1854- if (if (!(fe))
1855- then (jL != jP)
1768+ let jD = fraction(dO, (iW * ag), cu)
1769+ if (if (!(eV))
1770+ then (jz != jD)
18561771 else false)
1857- then throw(("Payment attached should be " + toString(jP)))
1772+ then throw(("Payment attached should be " + toString(jD)))
18581773 else {
1859- let hL = bN(ga._1)
1860- let io = hK(hL)
1861- let jQ = split(io[bo], "_")
1862- let jR = fraction(cC, (ji * ao), cH)
1863- let jS = makeString(fd(fe, jQ, jR), "_")
1864- let jT = jJ(c, ga._2, ji, eB)
1865- let jU = jT._5
1866- let jV = hM(jU[bd])
1867- let jW = makeString([split(jU[bd], "_")[0], toString(ao)], "_")
1868- let jX = hM(jW)
1869- let ig = split(jU[bh], "_")
1870- let jY = makeString([ig[bi], ig[bj], toString(((parseIntValue(ig[bk]) + jX) - jV)), toString(jX)], "_")
1871- $Tuple3(([IntegerEntry(jM, ao), IntegerEntry(et(ga._2, c), ao), StringEntry(hL, makeString([io[bm], jT._3[bn], jS, io[bp]], ":")), StringEntry(jT._4, makeString([jW, jU[be], jU[bf], jU[bg], jY], ":"))] ++ jT._1), ao, jR)
1774+ let hx = bz(fN._1)
1775+ let ib = hw(hx)
1776+ let jE = split(ib[ba], "_")
1777+ let jF = fraction(cp, (iW * ag), cu)
1778+ let jG = makeString(eU(eV, jE, jF), "_")
1779+ let jH = jx(c, fN._2, iW, en)
1780+ let jI = jH._5
1781+ let jJ = hz(jI[aP])
1782+ let jK = makeString([split(jI[aP], "_")[0], toString(ag)], "_")
1783+ let jL = hz(jK)
1784+ let hT = split(jI[aT], "_")
1785+ let jM = makeString([hT[aU], hT[aV], toString(((parseIntValue(hT[aW]) + jL) - jJ)), toString(jL)], "_")
1786+ $Tuple3(([IntegerEntry(jA, ag), IntegerEntry(ef(fN._2, c), ag), StringEntry(hx, makeString([ib[aY], jH._3[aZ], jG, ib[bb]], ":")), StringEntry(jH._4, makeString([jK, jI[aQ], jI[aR], jI[aS], jM], ":"))] ++ jH._1), ag, jF)
18721787 }
18731788 }
18741789 }
18751790 }
18761791
18771792
1878-func jZ (ka,kb,kc,kd) = {
1879- let ai = valueOrElse(getInteger(kb), 0)
1880- let an = (ai + kd)
1881- let ke = al(valueOrElse(getInteger(ka), 0), an)
1882- $Tuple2([IntegerEntry(ka, ke[0]), IntegerEntry(kb, an), IntegerEntry(kc, (valueOrElse(getInteger(kc), 0) + ke[1]))], an)
1883- }
1884-
1885-
1886-func kf (B,kd) = {
1887- let js = value(assetInfo(fromBase58String(B)))
1888- let c = valueOrErrorMessage(getString(bL(B)), (("NFT " + js.name) + " is orphaned"))
1889- if (if (if (cv)
1890- then (js.issuer == this)
1793+func jN (jO,jP,jQ,jR) = {
1794+ let aa = valueOrElse(getInteger(jP), 0)
1795+ let af = (aa + jR)
1796+ let jS = ad(valueOrElse(getInteger(jO), 0), af)
1797+ $Tuple2([IntegerEntry(jO, jS[0]), IntegerEntry(jP, af), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jS[1]))], af)
1798+ }
1799+
1800+
1801+func jT (u,jR) = {
1802+ let jg = value(assetInfo(fromBase58String(u)))
1803+ let c = valueOrErrorMessage(getString(bx(u)), (("NFT " + jg.name) + " is orphaned"))
1804+ if (if (if (ci)
1805+ then (jg.issuer == this)
18911806 else false)
1892- then contains(js.name, aH)
1807+ then contains(jg.name, ar)
18931808 else false)
1894- then jZ(I(c), H(c), J(c), kd)
1895- else jZ(E(B), D(B), F(B), kd)
1896- }
1897-
1898-
1899-func kg (c,kd) = jZ(I(c), H(c), J(c), kd)
1900-
1901-
1902-func kh (c) = {
1903- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1904- let ki = bH(c)
1905- let kj = getString(ki)
1906- if (!(isDefined(kj)))
1809+ then jN(B(c), A(c), C(c), jR)
1810+ else jN(x(u), w(u), y(u), jR)
1811+ }
1812+
1813+
1814+func jU (c,jR) = jN(B(c), A(c), C(c), jR)
1815+
1816+
1817+func jV (c) = {
1818+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1819+ let jW = bt(c)
1820+ let jX = getString(jW)
1821+ if (!(isDefined(jX)))
19071822 then throw("You are not eligible for ONBOARD artifact")
19081823 else {
1909- let kk = bJ(c)
1910- let kl = getString(kk)
1911- if (isDefined(kl))
1912- then throw(("You already used your ONBOARD artifact on duck " + value(kl)))
1824+ let jY = bv(c)
1825+ let jZ = getString(jY)
1826+ if (isDefined(jZ))
1827+ then throw(("You already used your ONBOARD artifact on duck " + value(jZ)))
19131828 else {
1914- let km = bI(B)
1915- let kn = getString(km)
1916- if (isDefined(kn))
1917- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kn)))
1918- else ([StringEntry(kk, B), StringEntry(km, c)] ++ kf(B, af)._1)
1829+ let ka = bu(u)
1830+ let kb = getString(ka)
1831+ if (isDefined(kb))
1832+ then throw(((("The duck " + u) + " already got points from ONBOARD artifact from user ") + value(kb)))
1833+ else ([StringEntry(jY, u), StringEntry(ka, c)] ++ jT(u, X)._1)
19191834 }
19201835 }
19211836 }
19221837
19231838
1924-func ko (c,jo) = {
1925- let ga = jm(c, eB, jo)
1926- let Q = ga._2
1927- let ji = dG(ga._3[dk])
1928- let kp = bx(aI, Q)
1929- if ((valueOrElse(getInteger(kp), 0) > 0))
1839+func kc (c,jc) = {
1840+ let fN = ja(c, en, jc)
1841+ let bp = fN._2
1842+ let iW = dt(fN._3[cX])
1843+ let kd = bj(as, bp)
1844+ if ((valueOrElse(getInteger(kd), 0) > 0))
19301845 then throw("Presale artifact is already activated")
1931- else if ((parseIntValue(ga._3[dj]) > en))
1932- then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
1846+ else if ((parseIntValue(fN._3[cW]) > dZ))
1847+ then throw((((ap + " ") + bp) + " is not eligible for presale artifact"))
19331848 else {
1934- let jT = jJ(c, Q, ji, eB)
1935- (((jT._1 :+ IntegerEntry(kp, ji)) :+ StringEntry(jT._2, makeString(jT._3, ":"))) :+ StringEntry(jT._4, makeString(jT._5, ":")))
1849+ let jH = jx(c, bp, iW, en)
1850+ (((jH._1 :+ IntegerEntry(kd, iW)) :+ StringEntry(jH._2, makeString(jH._3, ":"))) :+ StringEntry(jH._4, makeString(jH._5, ":")))
19361851 }
19371852 }
19381853
19391854
1940-func kq (B) = {
1941- let ci = valueOrElse(getInteger(dh, bT), 0)
1942- let jq = split(valueOrElse(getString(bO(B)), aN), "_")
1943- let aA = lastBlock.timestamp
1944- let ck = cc(dh, ci)
1945- let ce = ck[bY]
1946- let cf = ck[bZ]
1947- if ((jq[br] != "T"))
1855+func ke (u) = {
1856+ let bU = valueOrElse(getInteger(cU, bF), 0)
1857+ let je = split(valueOrElse(getString(bA(u)), ax), "_")
1858+ let bW = lastBlock.timestamp
1859+ let bX = bO(cU, bU)
1860+ let bQ = bX[bK]
1861+ let bR = bX[bL]
1862+ if ((je[bd] != "T"))
19481863 then false
1949- else if (if (if ((parseIntValue(jq[bq]) == ci))
1950- then (cf[cb] == "INPROGRESS")
1864+ else if (if (if ((parseIntValue(je[bc]) == bU))
1865+ then (bR[bN] == "INPROGRESS")
19511866 else false)
1952- then (parseIntValue(ce[ca]) > aA)
1867+ then (parseIntValue(bQ[bM]) > bW)
19531868 else false)
19541869 then throw("Your duck is taking part in the tournament")
1955- else dF(invoke(this, "exitTournamentInternal", [B], nil))
1956- }
1957-
1958-
1959-func kr (ks,ao,kt,c,ku,kv) = {
1960- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1961- if (kq(B))
1870+ else ds(invoke(this, "exitTournamentInternal", [u], nil))
1871+ }
1872+
1873+
1874+func kf (kg,ag,kh,c,ki,kj) = {
1875+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1876+ if (ke(u))
19621877 then throw("mergeInternal_checkTournament")
19631878 else {
1964- func kw (eR,Q) = {
1965- let js = value(assetInfo(fromBase58String(Q)))
1966- let jt = bw(Q)
1967- let ju = valueOrErrorMessage(getInteger(jt), (("NFT " + js.name) + " is not staked"))
1968- let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1969- if ((jv != c))
1970- then throw((aF + " is not yours"))
1879+ func kk (eI,bp) = {
1880+ let jg = value(assetInfo(fromBase58String(bp)))
1881+ let jh = bi(bp)
1882+ let ji = valueOrErrorMessage(getInteger(jh), (("NFT " + jg.name) + " is not staked"))
1883+ let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1884+ if ((jj != c))
1885+ then throw((ap + " is not yours"))
19711886 else {
1972- let jw = split(js.description, "_")
1973- let dv = jw[dm]
1974- if (if ((eR._3 != ""))
1975- then (eR._3 != dv)
1887+ let jk = split(jg.description, "_")
1888+ let di = jk[cZ]
1889+ if (if ((eI._3 != ""))
1890+ then (eI._3 != di)
19761891 else false)
19771892 then throw("Lands should be on the same continent to merge")
19781893 else {
1979- let dH = jw[dk]
1980- let kx = eR._1
1981- let gK = valueOrErrorMessage(indexOf(kx, dH), "You haven't passed all the lands needed")
1982- let ky = (take(kx, gK) + drop(kx, (gK + 1)))
1983- let ji = dG(dH)
1984- let kz = (eR._2 + valueOrElse(getInteger(bx(aI, Q)), 0))
1985- let ia = valueOrElse(getInteger(bD(Q)), 0)
1986- let kA = {
1987- let cz = dH
1988- if (("S" == cz))
1894+ let du = jk[cX]
1895+ let kl = eI._1
1896+ let gv = valueOrErrorMessage(indexOf(kl, du), "You haven't passed all the lands needed")
1897+ let km = (take(kl, gv) + drop(kl, (gv + 1)))
1898+ let iW = dt(du)
1899+ let kn = (eI._2 + valueOrElse(getInteger(bj(as, bp)), 0))
1900+ let hN = valueOrElse(getInteger(bq(bp)), 0)
1901+ let ko = {
1902+ let cm = du
1903+ if (("S" == cm))
19891904 then 3
1990- else if (("M" == cz))
1905+ else if (("M" == cm))
19911906 then 4
1992- else if (("L" == cz))
1907+ else if (("L" == cm))
19931908 then 5
1994- else if (("XL" == cz))
1909+ else if (("XL" == cm))
19951910 then 6
19961911 else throw("Only S, M, L, XL can merge")
19971912 }
1998- if ((ia != kA))
1913+ if ((hN != ko))
19991914 then throw("All lands should be maxed to merge")
20001915 else {
2001- let es = jw[dj]
2002- let gG = gM(jw[dl])
2003- let gQ = (lastBlock.timestamp - ju)
2004- if ((0 > gQ))
2005- then throw(((("Saved timestamp is in future, saved = " + toString(ju)) + ", current = ") + toString(lastBlock.timestamp)))
1916+ let ee = jk[cW]
1917+ let gr = gx(jk[cY])
1918+ let gB = (lastBlock.timestamp - ji)
1919+ if ((0 > gB))
1920+ then throw(((("Saved timestamp is in future, saved = " + toString(ji)) + ", current = ") + toString(lastBlock.timestamp)))
20061921 else {
2007- let jy = jh(Q, ji)
2008- let hZ = (ji / cH)
2009- let jG = gO(split(eR._4, "_"), gG, gQ, hZ, jy)
2010- let fb = gE(eR._6, gG, hZ, -1)
2011- let kB = gE(eR._10, gG, hZ, -1)
2012- let hu = gE(eR._9, gG, hZ, 1)
2013- let kC = eR._7
2014- let dc = indexOf(kC, Q)
2015- if (!(isDefined(dc)))
2016- then throw(("Your staked lands don't contain " + Q))
1922+ let jm = iV(bp, iW)
1923+ let hM = (iW / cu)
1924+ let ju = gz(split(eI._4, "_"), gr, gB, hM, jm)
1925+ let eS = gp(eI._6, gr, hM, -1)
1926+ let kp = gp(eI._10, gr, hM, -1)
1927+ let hg = gp(eI._9, gr, hM, 1)
1928+ let kq = eI._7
1929+ let cP = indexOf(kq, bp)
1930+ if (!(isDefined(cP)))
1931+ then throw(("Your staked lands don't contain " + bp))
20171932 else {
2018- let kD = bv(Q)
2019- let kE = valueOrElse(getString(kD), "")
2020- $Tuple10(ky, kz, dv, jG, ((((((((((((eR._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(er(es))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(et(Q, c))) :+ DeleteEntry(bx(aI, Q))) :+ DeleteEntry(eu(es))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kD)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kE != ""))
2021- then [DeleteEntry(ep(kE))]
2022- else nil)), fb, removeByIndex(kC, value(dc)), (eR._8 + ji), hu, kB)
1933+ let kr = bh(bp)
1934+ let ks = valueOrElse(getString(kr), "")
1935+ $Tuple10(km, kn, di, ju, ((((((((((((eI._5 :+ DeleteEntry(bi(bp))) :+ DeleteEntry(bl(ap, bp, c))) :+ DeleteEntry(ed(ee))) :+ DeleteEntry(bf(bp))) :+ DeleteEntry(bq(bp))) :+ DeleteEntry(ef(bp, c))) :+ DeleteEntry(bj(as, bp))) :+ DeleteEntry(eg(ee))) :+ DeleteEntry(bo(bp))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(bp), 1)) ++ (if ((ks != ""))
1936+ then [DeleteEntry(eb(ks))]
1937+ else nil)), eS, removeByIndex(kq, value(cP)), (eI._8 + iW), hg, kp)
20231938 }
20241939 }
20251940 }
20271942 }
20281943 }
20291944
2030- let hL = bN(B)
2031- let io = hK(hL)
2032- let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
2033- let kF = dw(c)
2034- let kG = getString(kF)
2035- let kH = if (isDefined(kG))
2036- then split_51C(value(kG), "_")
1945+ let hx = bz(u)
1946+ let ib = hw(hx)
1947+ let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1948+ let kt = dj(c)
1949+ let ku = getString(kt)
1950+ let kv = if (isDefined(ku))
1951+ then split_51C(value(ku), "_")
20371952 else nil
2038- let kI = split(value(assetInfo(fromBase58String(ku[0]))).description, "_")[dm]
2039- let kJ = split(valueOrElse(getString(du(kI)), "0_0_0_0_0_0"), "_")
2040- let fc = {
2041- let eT = ku
2042- let eU = size(eT)
2043- let eV = $Tuple10(kt, 0, "", io[bn], nil, gF, kH, 0, split("0_0_0_0_0_0", "_"), kJ)
2044- func eW (eX,eY) = if ((eY >= eU))
2045- then eX
2046- else kw(eX, eT[eY])
2047-
2048- func eZ (eX,eY) = if ((eY >= eU))
2049- then eX
1953+ let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
1954+ let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
1955+ let eT = {
1956+ let eK = ki
1957+ let eL = size(eK)
1958+ let eM = $Tuple10(kh, 0, "", ib[aZ], nil, gq, kv, 0, split("0_0_0_0_0_0", "_"), kx)
1959+ func eN (eO,eP) = if ((eP >= eL))
1960+ then eO
1961+ else kk(eO, eK[eP])
1962+
1963+ func eQ (eO,eP) = if ((eP >= eL))
1964+ then eO
20501965 else throw("List size exceeds 5")
20511966
2052- eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
1967+ eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
20531968 }
2054- let dv = fc._3
2055- let ho = valueOrErrorMessage(indexOf(aU, dv), ("Unknown continent: " + dv))
2056- let gN = ht(fc._9, (dG(ks) / cH))
2057- let iM = valueOrElse(getInteger(eo()), (en + 1))
2058- let kK = toString(iM)
2059- let iN = Issue(eG(kK, ks), makeString([kK, ks, gN, dv], "_"), 1, 0, false)
2060- let bu = calculateAssetId(iN)
2061- let kL = toBase58String(bu)
2062- let jS = makeString(fd((kv > 0), split(io[bo], "_"), kv), "_")
2063- let kM = dx(c)
2064- let kN = valueOrElse(getInteger(kM), 0)
2065- $Tuple2((((((((((((((((fc._5 :+ (if ((size(fc._7) > 0))
2066- then StringEntry(kF, makeString_11C(fc._7, "_"))
2067- else DeleteEntry(kF))) :+ IntegerEntry(kM, if ((fc._8 > kN))
1969+ let di = eT._3
1970+ let gZ = valueOrErrorMessage(indexOf(aH, di), ("Unknown continent: " + di))
1971+ let gy = hf(eT._9, (dt(kg) / cu))
1972+ let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1973+ let ky = toString(iA)
1974+ let iB = Issue(ex(ky, kg), makeString([ky, kg, gy, di], "_"), 1, 0, false)
1975+ let bg = calculateAssetId(iB)
1976+ let kz = toBase58String(bg)
1977+ let jG = makeString(eU((kj > 0), split(ib[ba], "_"), kj), "_")
1978+ let kA = dk(c)
1979+ let kB = valueOrElse(getInteger(kA), 0)
1980+ $Tuple2((((((((((((((((eT._5 :+ (if ((size(eT._7) > 0))
1981+ then StringEntry(kt, makeString_11C(eT._7, "_"))
1982+ else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eT._8 > kB))
20681983 then 0
2069- else (kN - fc._8))) :+ IntegerEntry(eo(), (iM + 1))) :+ iN) :+ StringEntry(er(kK), kL)) :+ StringEntry(bt(kL), c)) :+ StringEntry(eu(kK), c)) :+ IntegerEntry(bx(aI, kL), fc._2)) :+ IntegerEntry(bD(kL), ao)) :+ IntegerEntry(et(kL, c), ao)) :+ StringEntry(hL, makeString([io[bm], fc._4, jS, io[bp]], ":"))) :+ StringEntry(dt(), makeString(fc._6, "_"))) :+ StringEntry(du(dv), makeString(fc._10, "_"))) :+ StringEntry(bO(B), makeString([dv, "L", kL], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kL)
2070- }
2071- }
2072-
2073-
2074-func kO (c,ku) = kr("M", 3, "SSSS", c, ku, 0)
2075-
2076-
2077-func kP (c,ku) = kr("L", 4, "SMM", c, ku, (cC * 4))
2078-
2079-
2080-func kQ (c,ku) = kr("XL", 5, "SSSML", c, ku, (cC * 47))
2081-
2082-
2083-func kR (c,ku) = kr("XXL", 6, "LXL", c, ku, (cC * 54))
2084-
2085-
2086-func kS (c,ku) = {
2087- let cz = size(ku)
2088- if ((4 == cz))
2089- then kO(c, ku)
2090- else if ((3 == cz))
2091- then kP(c, ku)
2092- else if ((5 == cz))
2093- then kQ(c, ku)
2094- else if ((2 == cz))
2095- then kR(c, ku)
1984+ else (kB - eT._8))) :+ IntegerEntry(ea(), (iA + 1))) :+ iB) :+ StringEntry(ed(ky), kz)) :+ StringEntry(bf(kz), c)) :+ StringEntry(eg(ky), c)) :+ IntegerEntry(bj(as, kz), eT._2)) :+ IntegerEntry(bq(kz), ag)) :+ IntegerEntry(ef(kz, c), ag)) :+ StringEntry(hx, makeString([ib[aY], eT._4, jG, ib[bb]], ":"))) :+ StringEntry(dg(), makeString(eT._6, "_"))) :+ StringEntry(dh(di), makeString(eT._10, "_"))) :+ StringEntry(bA(u), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bg)), kz)
1985+ }
1986+ }
1987+
1988+
1989+func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
1990+
1991+
1992+func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
1993+
1994+
1995+func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
1996+
1997+
1998+func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
1999+
2000+
2001+func kG (c,ki) = {
2002+ let cm = size(ki)
2003+ if ((4 == cm))
2004+ then kC(c, ki)
2005+ else if ((3 == cm))
2006+ then kD(c, ki)
2007+ else if ((5 == cm))
2008+ then kE(c, ki)
2009+ else if ((2 == cm))
2010+ then kF(c, ki)
20962011 else throw("Unknown merge")
20972012 }
20982013
20992014
2100-func kT (gK) = if (if ((gK.originCaller != dd))
2101- then valueOrElse(getBoolean(dJ()), false)
2015+func kH (gv) = if (if ((gv.originCaller != cQ))
2016+ then valueOrElse(getBoolean(dw()), false)
21022017 else false)
21032018 then throw("Contracts are under maintenance")
2104- else [StringEntry(dK(toString(gK.originCaller)), toBase58String(gK.transactionId))]
2105-
2106-
2107-@Callable(gK)
2108-func constructorV1 (kU) = if ((gK.caller != this))
2019+ else [StringEntry(dx(toString(gv.originCaller)), toBase58String(gv.transactionId))]
2020+
2021+
2022+@Callable(gv)
2023+func constructorV1 (kI) = if ((gv.caller != this))
21092024 then throw("Permission denied")
2110- else [StringEntry(cX(), kU)]
2111-
2112-
2113-
2114-@Callable(gK)
2115-func saveInteger (cP,eI) = if ((gK.caller != this))
2025+ else [StringEntry(cK(), kI)]
2026+
2027+
2028+
2029+@Callable(gv)
2030+func saveInteger (cC,ez) = if ((gv.caller != this))
21162031 then throw("saveInteger is not public method")
2117- else [IntegerEntry(cP, eI)]
2118-
2119-
2120-
2121-@Callable(gK)
2122-func setBlocked (kV) = if ((gK.caller != this))
2032+ else [IntegerEntry(cC, ez)]
2033+
2034+
2035+
2036+@Callable(gv)
2037+func setBlocked (kJ) = if ((gv.caller != this))
21232038 then throw("permission denied")
2124- else [BooleanEntry(dJ(), kV)]
2125-
2126-
2127-
2128-@Callable(gK)
2039+ else [BooleanEntry(dw(), kJ)]
2040+
2041+
2042+
2043+@Callable(gv)
21292044 func stakeLand () = {
2130- let kW = kT(gK)
2131- if ((size(gK.payments) != 1))
2045+ let kK = kH(gv)
2046+ if ((size(gv.payments) != 1))
21322047 then throw("Exactly one payment required")
21332048 else {
2134- let kX = value(gK.payments[0])
2135- let bu = value(kX.assetId)
2136- let cO = toString(gK.caller)
2137- if ((kX.amount != 1))
2138- then throw((("NFT " + aF) + " token should be attached as payment"))
2049+ let kL = value(gv.payments[0])
2050+ let bg = value(kL.assetId)
2051+ let cB = toString(gv.caller)
2052+ if ((kL.amount != 1))
2053+ then throw((("NFT " + ap) + " token should be attached as payment"))
21392054 else {
2140- let js = value(assetInfo(bu))
2141- if ((js.issuer != this))
2055+ let jg = value(assetInfo(bg))
2056+ if ((jg.issuer != this))
21422057 then throw("Unknown issuer of token")
2143- else if (!(contains(js.name, aF)))
2144- then throw((("Only NFT " + aF) + " tokens are accepted"))
2058+ else if (!(contains(jg.name, ap)))
2059+ then throw((("Only NFT " + ap) + " tokens are accepted"))
21452060 else {
2146- let kY = drop(js.name, 4)
2147- let es = if (contains(kY, "XXL"))
2148- then dropRight(kY, 3)
2149- else if (contains(kY, "XL"))
2150- then dropRight(kY, 2)
2151- else dropRight(kY, 1)
2152- if (!(isDefined(parseInt(es))))
2153- then throw(("Cannot parse land number from " + js.name))
2061+ let kM = drop(jg.name, 4)
2062+ let ee = if (contains(kM, "XXL"))
2063+ then dropRight(kM, 3)
2064+ else if (contains(kM, "XL"))
2065+ then dropRight(kM, 2)
2066+ else dropRight(kM, 1)
2067+ if (!(isDefined(parseInt(ee))))
2068+ then throw(("Cannot parse land number from " + jg.name))
21542069 else {
2155- let Q = toBase58String(bu)
2156- let jt = bw(Q)
2157- if (isDefined(getInteger(jt)))
2158- then throw((("NFT " + js.name) + " is already staked"))
2070+ let bp = toBase58String(bg)
2071+ let jh = bi(bp)
2072+ if (isDefined(getInteger(jh)))
2073+ then throw((("NFT " + jg.name) + " is already staked"))
21592074 else {
2160- let jw = split(js.description, "_")
2161- let gG = gM(jw[dl])
2162- let ji = dG(jw[dk])
2163- let hZ = (ji / cH)
2164- let fb = gL(gG, hZ, 1)
2165- let kZ = du(jw[dm])
2166- let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2167- let la = makeString(gE(kJ, gG, hZ, 1), "_")
2168- let kF = dw(cO)
2169- let kG = getString(kF)
2170- let kC = if (isDefined(kG))
2171- then split_51C(value(kG), "_")
2075+ let jk = split(jg.description, "_")
2076+ let gr = gx(jk[cY])
2077+ let iW = dt(jk[cX])
2078+ let hM = (iW / cu)
2079+ let eS = gw(gr, hM, 1)
2080+ let kN = dh(jk[cZ])
2081+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2082+ let kO = makeString(gp(kx, gr, hM, 1), "_")
2083+ let kt = dj(cB)
2084+ let ku = getString(kt)
2085+ let kq = if (isDefined(ku))
2086+ then split_51C(value(ku), "_")
21722087 else nil
2173- if (containsElement(kC, Q))
2174- then throw(("Your staked lands already contain " + Q))
2175- else if ((size(kC) >= aK))
2176- then throw((("Your already staked max (" + toString(aK)) + ") lands"))
2088+ if (containsElement(kq, bp))
2089+ then throw(("Your staked lands already contain " + bp))
2090+ else if ((size(kq) >= au))
2091+ then throw((("Your already staked max (" + toString(au)) + ") lands"))
21772092 else {
2178- let ia = valueOrElse(getInteger(bD(Q)), 0)
2179- let kM = dx(cO)
2180- let lb = valueOrElse(getInteger(kM), 0)
2181- let lc = invoke(dg, "onStakeUnstakeLand", [cO], nil)
2182- $Tuple2(([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cO), lastBlock.timestamp), StringEntry(kF, makeString_11C((kC :+ Q), "_")), IntegerEntry(kM, (lb + ji)), StringEntry(bt(Q), cO), StringEntry(eu(es), cO), IntegerEntry(et(Q, cO), ia), StringEntry(dt(), fb), StringEntry(kZ, la)] ++ kW), lc)
2093+ let hN = valueOrElse(getInteger(bq(bp)), 0)
2094+ let kA = dk(cB)
2095+ let kP = valueOrElse(getInteger(kA), 0)
2096+ let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2097+ $Tuple2(([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(ap, bp, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ bp), "_")), IntegerEntry(kA, (kP + iW)), StringEntry(bf(bp), cB), StringEntry(eg(ee), cB), IntegerEntry(ef(bp, cB), hN), StringEntry(dg(), eS), StringEntry(kN, kO)] ++ kK), kQ)
21832098 }
21842099 }
21852100 }
21902105
21912106
21922107
2193-@Callable(gK)
2194-func unstakeLand (jo) = {
2195- let kW = kT(gK)
2196- if ((size(gK.payments) != 0))
2108+@Callable(gv)
2109+func unstakeLand (jc) = {
2110+ let kK = kH(gv)
2111+ if ((size(gv.payments) != 0))
21972112 then throw("No payments required")
21982113 else {
2199- let c = toString(gK.caller)
2200- let ga = jm(c, eA, jo)
2201- let Q = ga._2
2202- let jw = ga._3
2203- let kF = dw(c)
2204- let gG = gM(jw[dl])
2205- let ji = dG(jw[dk])
2206- let hZ = (ji / cH)
2207- let fb = gL(gG, hZ, -1)
2208- let kZ = du(jw[dm])
2209- let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2210- let la = makeString(gE(kJ, gG, hZ, -1), "_")
2211- let jT = jJ(c, Q, ji, eA)
2212- let kC = split_51C(valueOrElse(getString(kF), ""), "_")
2213- let dc = indexOf(kC, Q)
2214- if (!(isDefined(dc)))
2215- then throw(("Your staked lands don't contain " + Q))
2114+ let c = toString(gv.caller)
2115+ let fN = ja(c, em, jc)
2116+ let bp = fN._2
2117+ let jk = fN._3
2118+ let kt = dj(c)
2119+ let gr = gx(jk[cY])
2120+ let iW = dt(jk[cX])
2121+ let hM = (iW / cu)
2122+ let eS = gw(gr, hM, -1)
2123+ let kN = dh(jk[cZ])
2124+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2125+ let kO = makeString(gp(kx, gr, hM, -1), "_")
2126+ let jH = jx(c, bp, iW, em)
2127+ let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2128+ let cP = indexOf(kq, bp)
2129+ if (!(isDefined(cP)))
2130+ then throw(("Your staked lands don't contain " + bp))
22162131 else {
2217- let aA = lastBlock.timestamp
2218- let ld = valueOrElse(getInteger(df, bP(c)), 0)
2219- if ((ld >= aA))
2220- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ld)))
2132+ let bW = lastBlock.timestamp
2133+ let kR = valueOrElse(getInteger(cS, bB(c)), 0)
2134+ if ((kR >= bW))
2135+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
22212136 else {
2222- let le = (valueOrElse(getInteger(dg, b(c)), 0) + cD)
2223- if ((le > aA))
2224- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(le)))
2137+ let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2138+ if ((kS > bW))
2139+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
22252140 else {
2226- let kM = dx(c)
2227- let kN = valueOrElse(getInteger(kM), 0)
2228- let lf = if ((ji > kN))
2141+ let kA = dk(c)
2142+ let kB = valueOrElse(getInteger(kA), 0)
2143+ let kT = if ((iW > kB))
22292144 then 0
2230- else (kN - ji)
2231- let lc = invoke(dg, "onStakeUnstakeLand", [c], nil)
2232- $Tuple2(([ScriptTransfer(gK.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dt(), fb), StringEntry(kZ, la), StringEntry(jT._2, makeString(jT._3, ":")), if ((size(kC) > 1))
2233- then StringEntry(kF, makeString_11C(removeByIndex(kC, value(dc)), "_"))
2234- else DeleteEntry(kF), IntegerEntry(kM, lf)] ++ kW), lc)
2145+ else (kB - iW)
2146+ let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2147+ $Tuple2(([ScriptTransfer(gv.caller, 1, fromBase58String(bp)), DeleteEntry(bi(bp)), DeleteEntry(bl(ap, bp, c)), StringEntry(dg(), eS), StringEntry(kN, kO), StringEntry(jH._2, makeString(jH._3, ":")), if ((size(kq) > 1))
2148+ then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2149+ else DeleteEntry(kt), IntegerEntry(kA, kT)] ++ kK), kQ)
22352150 }
22362151 }
22372152 }
22402155
22412156
22422157
2243-@Callable(gK)
2158+@Callable(gv)
22442159 func stakeDuck () = {
2245- let kW = kT(gK)
2246- if ((size(gK.payments) != 1))
2160+ let kK = kH(gv)
2161+ if ((size(gv.payments) != 1))
22472162 then throw("Exactly one payment required")
22482163 else {
2249- let kX = value(gK.payments[0])
2250- let bu = value(kX.assetId)
2251- let cO = toString(gK.caller)
2252- if ((kX.amount != 1))
2253- then throw((("NFT " + aG) + " token should be attached as payment"))
2164+ let kL = value(gv.payments[0])
2165+ let bg = value(kL.assetId)
2166+ let cB = toString(gv.caller)
2167+ if ((kL.amount != 1))
2168+ then throw((("NFT " + aq) + " token should be attached as payment"))
22542169 else {
2255- let js = value(assetInfo(bu))
2256- let lg = if (if (cv)
2257- then (js.issuer == this)
2170+ let jg = value(assetInfo(bg))
2171+ let kU = if (if (ci)
2172+ then (jg.issuer == this)
22582173 else false)
2259- then contains(js.name, aH)
2174+ then contains(jg.name, ar)
22602175 else false
2261- if (if (if ((js.issuer != dW))
2262- then (js.issuer != dX)
2176+ if (if (if ((jg.issuer != dJ))
2177+ then (jg.issuer != dK)
22632178 else false)
2264- then !(lg)
2179+ then !(kU)
22652180 else false)
2266- then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token"))
2267- else if (if (!(contains(js.name, aG)))
2268- then !(lg)
2181+ then throw((((("Unknown issuer of " + aq) + " or ") + ar) + " token"))
2182+ else if (if (!(contains(jg.name, aq)))
2183+ then !(kU)
22692184 else false)
2270- then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted"))
2185+ then throw((((("Only NFT " + aq) + " or ") + ar) + " tokens are accepted"))
22712186 else {
2272- let lh = toBase58String(bu)
2273- let jt = bw(lh)
2274- if (isDefined(getInteger(jt)))
2275- then throw((("NFT " + js.name) + " is already staked"))
2276- else if (isDefined(getString(bM(cO))))
2277- then throw(("You already staked one duck: " + js.name))
2187+ let kV = toBase58String(bg)
2188+ let jh = bi(kV)
2189+ if (isDefined(getInteger(jh)))
2190+ then throw((("NFT " + jg.name) + " is already staked"))
2191+ else if (isDefined(getString(by(cB))))
2192+ then throw(("You already staked one duck: " + jg.name))
22782193 else {
2279- let li = bO(lh)
2280- let ch = getString(li)
2281- let hL = bN(lh)
2282- let lj = getString(hL)
2283- let jb = A(lh)
2284- let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2285- let lk = valueOrElse(getInteger(jb), jc)
2286- ([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cO), lastBlock.timestamp), StringEntry(bL(lh), cO), StringEntry(bM(cO), lh)] ++ (if (isDefined(ch))
2194+ let kW = bA(kV)
2195+ let bT = getString(kW)
2196+ let hx = bz(kV)
2197+ let kX = getString(hx)
2198+ let iP = t(kV)
2199+ let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2200+ let kY = valueOrElse(getInteger(iP), iQ)
2201+ ([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(aq, toBase58String(bg), cB), lastBlock.timestamp), StringEntry(bx(kV), cB), StringEntry(by(cB), kV)] ++ (if (isDefined(bT))
22872202 then nil
2288- else ([StringEntry(li, aN)] ++ (if (isDefined(lj))
2203+ else ([StringEntry(kW, ax)] ++ (if (isDefined(kX))
22892204 then nil
2290- else (([StringEntry(hL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(jb, lk)) ++ kW)))))
2205+ else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iP, kY)) ++ kK)))))
22912206 }
22922207 }
22932208 }
22962211
22972212
22982213
2299-@Callable(gK)
2300-func unstakeDuck (lh) = {
2301- let kW = kT(gK)
2302- if ((size(gK.payments) != 0))
2214+@Callable(gv)
2215+func unstakeDuck (kV) = {
2216+ let kK = kH(gv)
2217+ if ((size(gv.payments) != 0))
23032218 then throw("No payments required")
23042219 else {
2305- let bu = fromBase58String(lh)
2306- let cO = toString(gK.caller)
2307- let js = value(assetInfo(bu))
2308- let jt = bw(lh)
2309- if (!(isDefined(getInteger(jt))))
2310- then throw((("NFT " + js.name) + " is not staked"))
2311- else if (!(isDefined(getString(bM(cO)))))
2312- then throw((("The duck " + js.name) + " is not staked"))
2220+ let bg = fromBase58String(kV)
2221+ let cB = toString(gv.caller)
2222+ let jg = value(assetInfo(bg))
2223+ let jh = bi(kV)
2224+ if (!(isDefined(getInteger(jh))))
2225+ then throw((("NFT " + jg.name) + " is not staked"))
2226+ else if (!(isDefined(getString(by(cB)))))
2227+ then throw((("The duck " + jg.name) + " is not staked"))
23132228 else {
2314- let jv = valueOrErrorMessage(getString(bL(lh)), (("NFT " + js.name) + " is orphaned"))
2315- if ((jv != cO))
2229+ let jj = valueOrErrorMessage(getString(bx(kV)), (("NFT " + jg.name) + " is orphaned"))
2230+ if ((jj != cB))
23162231 then throw("Staked NFT is not yours")
2317- else if (kq(lh))
2232+ else if (ke(kV))
23182233 then throw("unstakeDuck_checkTournament")
23192234 else {
2320- let jb = A(lh)
2321- let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2322- let av = valueOrElse(getInteger(jb), jc)
2323- if ((jc > av))
2324- then throw((("Please heal your duck to " + toString(jc)) + "hp before unstaking"))
2325- else ([ScriptTransfer(gK.caller, 1, bu), DeleteEntry(jt), DeleteEntry(jb), DeleteEntry(bO(lh)), DeleteEntry(bL(lh)), DeleteEntry(bz(aG, lh, cO)), DeleteEntry(bM(cO))] ++ kW)
2235+ let iP = t(kV)
2236+ let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2237+ let an = valueOrElse(getInteger(iP), iQ)
2238+ if ((iQ > an))
2239+ then throw((("Please heal your duck to " + toString(iQ)) + "hp before unstaking"))
2240+ else ([ScriptTransfer(gv.caller, 1, bg), DeleteEntry(jh), DeleteEntry(iP), DeleteEntry(bA(kV)), DeleteEntry(bx(kV)), DeleteEntry(bl(aq, kV, cB)), DeleteEntry(by(cB))] ++ kK)
23262241 }
23272242 }
23282243 }
23302245
23312246
23322247
2333-@Callable(gK)
2334-func claimRes (eI,ll) = {
2335- let kW = kT(gK)
2336- if ((size(gK.payments) != 0))
2248+@Callable(gv)
2249+func claimRes (ez,kZ) = {
2250+ let kK = kH(gv)
2251+ if ((size(gv.payments) != 0))
23372252 then throw("No payments required")
23382253 else {
2339- let c = toString(gK.originCaller)
2340- let fj = jx(c, eI, eA, ll)
2341- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2342- $Tuple2(((((fj._1 ++ kf(B, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._3[bn])
2343- }
2344- }
2345-
2346-
2347-
2348-@Callable(gK)
2349-func claimResToWH (eI,ll) = {
2350- let kW = kT(gK)
2351- if ((size(gK.payments) != 0))
2254+ let c = toString(gv.originCaller)
2255+ let fa = jl(c, ez, em, kZ)
2256+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2257+ $Tuple2(((((fa._1 ++ jT(u, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._3[aZ])
2258+ }
2259+ }
2260+
2261+
2262+
2263+@Callable(gv)
2264+func claimResToWH (ez,kZ) = {
2265+ let kK = kH(gv)
2266+ if ((size(gv.payments) != 0))
23522267 then throw("No payments required")
23532268 else {
2354- let c = toString(gK.originCaller)
2355- let fj = jx(c, eI, ez, ll)
2356- $Tuple2(((((fj._1 ++ kg(c, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._5[be])
2357- }
2358- }
2359-
2360-
2361-
2362-@Callable(gK)
2363-func flight (iQ,iR) = {
2364- let kW = kT(gK)
2365- if ((size(gK.payments) != 0))
2269+ let c = toString(gv.originCaller)
2270+ let fa = jl(c, ez, el, kZ)
2271+ $Tuple2(((((fa._1 ++ jU(c, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._5[aQ])
2272+ }
2273+ }
2274+
2275+
2276+
2277+@Callable(gv)
2278+func flight (iE,iF) = {
2279+ let kK = kH(gv)
2280+ if ((size(gv.payments) != 0))
23662281 then throw("No payments required")
23672282 else {
2368- let bQ = toString(gK.caller)
2369- let hp = iP(bQ, iQ, iR)
2370- let iV = hp._1
2371- let B = hp._2
2372- let li = bO(B)
2373- let jq = valueOrElse(getString(li), aN)
2374- let iX = hp._4
2375- if ((iX == jq))
2283+ let bC = toString(gv.caller)
2284+ let ha = iD(bC, iE, iF)
2285+ let iJ = ha._1
2286+ let u = ha._2
2287+ let kW = bA(u)
2288+ let je = valueOrElse(getString(kW), ax)
2289+ let iL = ha._4
2290+ if ((iL == je))
23762291 then throw("You can't fly to the same location")
23772292 else {
2378- let cr = split(iX, "_")
2379- let lm = (cr[br] == "T")
2380- let ln = (cr[br] == "D")
2381- let gx = G(B)
2382- let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2383- let lp = fk(lo, hp._5)
2384- let lq = lp._1
2385- let lr = lp._2
2386- let ls = if (!(cl(dh, jq)))
2387- then if (lm)
2388- then cp(jq, iX, 5)
2389- else if (!(ln))
2390- then if ((iV > 0))
2391- then $Tuple2(iX, iV)
2392- else $Tuple2(jq, 0)
2393- else if ((iV > 0))
2293+ let ce = split(iL, "_")
2294+ let la = (ce[bd] == "T")
2295+ let lb = (ce[bd] == "D")
2296+ let gh = z(u)
2297+ let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2298+ let ld = fb(lc, ha._5)
2299+ let le = ld._1
2300+ let lf = ld._2
2301+ let hp = ld._3
2302+ let lg = if (!(bY(cU, je)))
2303+ then if (la)
2304+ then cc(je, iL, 5)
2305+ else if (!(lb))
2306+ then if ((iJ > 0))
2307+ then $Tuple2(iL, iJ)
2308+ else $Tuple2(je, 0)
2309+ else if ((iJ > 0))
23942310 then {
2395- let dA = invoke(this, "processDelivery", [B], nil)
2396- if ((dA == dA))
2397- then $Tuple2(jq, iV)
2311+ let dn = invoke(this, "processDelivery", [u], nil)
2312+ if ((dn == dn))
2313+ then $Tuple2(je, iJ)
23982314 else throw("Strict value is not equal to itself.")
23992315 }
2400- else $Tuple2(jq, 0)
2401- else if (cg(dh, jq))
2402- then if (!(cg(dh, iX)))
2316+ else $Tuple2(je, 0)
2317+ else if (bS(cU, je))
2318+ then if (!(bS(cU, iL)))
24032319 then throw("Your duck is taking part in the tournament")
24042320 else {
2405- let lt = parseIntValue(cr[bs])
2406- let lu = split(jq, "_")
2407- let ci = valueOrElse(getInteger(dh, bT), 0)
2408- if ((lt != (parseIntValue(lu[bs]) + 1)))
2409- then cp(jq, iX, 7)
2410- else if ((iV > 0))
2321+ let lh = parseIntValue(ce[be])
2322+ let li = split(je, "_")
2323+ let bU = valueOrElse(getInteger(cU, bF), 0)
2324+ if ((lh != (parseIntValue(li[be]) + 1)))
2325+ then cc(je, iL, 7)
2326+ else if ((iJ > 0))
24112327 then {
2412- let lv = valueOrElse(getInteger(dh, bX(ci, B)), 0)
2413- let lw = if ((lt > lv))
2414- then invoke(dh, "saveDuckResult", [B, lt], nil)
2328+ let lj = valueOrElse(getInteger(cU, bJ(bU, u)), 0)
2329+ let lk = if ((lh > lj))
2330+ then invoke(cU, "saveDuckResult", [u, lh], nil)
24152331 else unit
2416- if ((lw == lw))
2417- then $Tuple2(iX, iV)
2332+ if ((lk == lk))
2333+ then $Tuple2(iL, iJ)
24182334 else throw("Strict value is not equal to itself.")
24192335 }
2420- else $Tuple2(jq, 0)
2336+ else $Tuple2(je, 0)
24212337 }
2422- else throw(("Unknown curLocation:" + jq))
2423- let lx = ls._1
2424- let ly = ls._2
2425- $Tuple2(((([StringEntry(li, lx), StringEntry(gx, lq), IntegerEntry(A(B), ly)] ++ kW) ++ (if (lr)
2426- then [StringEntry(M(B), "0_0_0_0_0")]
2427- else nil)) ++ kf(B, if ((iV > 0))
2428- then Y
2429- else Z)._1), hp._3)
2338+ else throw(("Unknown curLocation:" + je))
2339+ let ll = lg._1
2340+ let lm = lg._2
2341+ $Tuple2(((([StringEntry(kW, ll), StringEntry(gh, le), IntegerEntry(t(u), lm)] ++ kK) ++ (if (lf)
2342+ then [StringEntry(F(u), "0_0_0_0_0")]
2343+ else nil)) ++ jT(u, if ((iJ > 0))
2344+ then O
2345+ else P)._1), ha._3)
24302346 }
24312347 }
24322348 }
24332349
24342350
24352351
2436-@Callable(gK)
2437-func heal (lz,lA,lB) = {
2438- let kW = kT(gK)
2439- if (if (if ((0 > lz))
2352+@Callable(gv)
2353+func heal (ln,lo,lp) = {
2354+ let kK = kH(gv)
2355+ if (if (if ((0 > ln))
24402356 then true
2441- else (0 > lA))
2357+ else (0 > lo))
24422358 then true
2443- else (0 > lB))
2359+ else (0 > lp))
24442360 then throw("Quantity cannot be negative")
24452361 else {
2446- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2447- if (kq(B))
2362+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2363+ if (ke(u))
24482364 then throw("heal_checkTournament")
24492365 else {
2450- let lC = [lz, lA, lB]
2451- let jb = A(B)
2452- let jc = aj(valueOrElse(getInteger(E(B)), 0))
2453- let lD = valueOrElse(getInteger(jb), jc)
2454- if ((lD >= jc))
2455- then throw((("HP should be < " + toString(jc)) + " to heal"))
2366+ let lq = [ln, lo, lp]
2367+ let iP = t(u)
2368+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2369+ let lr = valueOrElse(getInteger(iP), iQ)
2370+ if ((lr >= iQ))
2371+ then throw((("HP should be < " + toString(iQ)) + " to heal"))
24562372 else {
2457- let hL = bN(B)
2458- let io = hK(hL)
2459- let lE = if ((io[bp] == ""))
2373+ let hx = bz(u)
2374+ let ib = hw(hx)
2375+ let ls = if ((ib[bb] == ""))
24602376 then nil
2461- else split_4C(io[bp], "_")
2462- func lF (eR,co) = {
2463- let dC = eR._2
2464- let hg = if ((size(lE) > dC))
2465- then parseIntValue(lE[dC])
2377+ else split_4C(ib[bb], "_")
2378+ func lt (eI,cb) = {
2379+ let dp = eI._2
2380+ let gR = if ((size(ls) > dp))
2381+ then parseIntValue(ls[dp])
24662382 else 0
2467- if ((3 > dC))
2383+ if ((3 > dp))
24682384 then {
2469- let lG = lC[dC]
2470- if ((lG > hg))
2471- then throw(((("You have only " + toString(hg)) + " of ") + aT[dC]))
2472- else $Tuple3((eR._1 :+ toString((hg - lG))), (dC + 1), (eR._3 + (parseIntValue(split(co, "_")[aZ]) * lG)))
2385+ let lu = lq[dp]
2386+ if ((lu > gR))
2387+ then throw(((("You have only " + toString(gR)) + " of ") + aG[dp]))
2388+ else $Tuple3((eI._1 :+ toString((gR - lu))), (dp + 1), (eI._3 + (parseIntValue(split(cb, "_")[aL]) * lu)))
24732389 }
2474- else $Tuple3((eR._1 :+ toString(hg)), (dC + 1), eR._3)
2390+ else $Tuple3((eI._1 :+ toString(gR)), (dp + 1), eI._3)
24752391 }
24762392
2477- let fj = {
2478- let eT = aX
2479- let eU = size(eT)
2480- let eV = $Tuple3(nil, 0, 0)
2481- func eW (eX,eY) = if ((eY >= eU))
2482- then eX
2483- else lF(eX, eT[eY])
2484-
2485- func eZ (eX,eY) = if ((eY >= eU))
2486- then eX
2393+ let fa = {
2394+ let eK = aJ
2395+ let eL = size(eK)
2396+ let eM = $Tuple3(nil, 0, 0)
2397+ func eN (eO,eP) = if ((eP >= eL))
2398+ then eO
2399+ else lt(eO, eK[eP])
2400+
2401+ func eQ (eO,eP) = if ((eP >= eL))
2402+ then eO
24872403 else throw("List size exceeds 50")
24882404
2489- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
2405+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
24902406 }
2491- let lH = min([jc, (lD + fj._3)])
2492- $Tuple2((([IntegerEntry(jb, lH), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], makeString(fj._1, "_")], ":"))] ++ kW) ++ kf(B, (ag * ((lz + lA) + lB)))._1), lH)
2407+ let lv = min([iQ, (lr + fa._3)])
2408+ $Tuple2((([IntegerEntry(iP, lv), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], makeString(fa._1, "_")], ":"))] ++ kK) ++ jT(u, (Y * ((ln + lo) + lp)))._1), lv)
24932409 }
24942410 }
24952411 }
24972413
24982414
24992415
2500-@Callable(gK)
2416+@Callable(gv)
25012417 func healES () = {
2502- let kW = kT(gK)
2503- if ((size(gK.payments) != 1))
2418+ let kK = kH(gv)
2419+ if ((size(gv.payments) != 1))
25042420 then throw("Exactly one payment required")
25052421 else {
2506- let kX = value(gK.payments[0])
2507- if ((kX.assetId != cA))
2422+ let kL = value(gv.payments[0])
2423+ if ((kL.assetId != cn))
25082424 then throw("Allowed USDT payment only!")
25092425 else {
2510- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2511- if (kq(B))
2426+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2427+ if (ke(u))
25122428 then throw("healES_checkTournament")
25132429 else {
2514- let jb = A(B)
2515- let jc = aj(valueOrElse(getInteger(E(B)), 0))
2516- let lD = valueOrElse(getInteger(jb), jc)
2517- if ((lD > 0))
2430+ let iP = t(u)
2431+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2432+ let lr = valueOrElse(getInteger(iP), iQ)
2433+ if ((lr > 0))
25182434 then throw("HP should be 0 to call Emergency Service")
25192435 else {
2520- let hL = bN(B)
2521- let io = hK(hL)
2522- let lE = if ((io[bp] == ""))
2436+ let hx = bz(u)
2437+ let ib = hw(hx)
2438+ let ls = if ((ib[bb] == ""))
25232439 then nil
2524- else split_4C(io[bp], "_")
2525- let lI = if ((size(lE) > 0))
2526- then parseIntValue(lE[0])
2440+ else split_4C(ib[bb], "_")
2441+ let lw = if ((size(ls) > 0))
2442+ then parseIntValue(ls[0])
25272443 else 0
2528- let lJ = if ((size(lE) > 1))
2529- then parseIntValue(lE[1])
2444+ let lx = if ((size(ls) > 1))
2445+ then parseIntValue(ls[1])
25302446 else 0
2531- let lK = if ((size(lE) > 2))
2532- then parseIntValue(lE[2])
2447+ let ly = if ((size(ls) > 2))
2448+ then parseIntValue(ls[2])
25332449 else 0
2534- if (if (if ((lI > 0))
2450+ if (if (if ((lw > 0))
25352451 then true
2536- else (lJ > 0))
2452+ else (lx > 0))
25372453 then true
2538- else (lK > 0))
2454+ else (ly > 0))
25392455 then throw("You have to use own Medical Kit")
25402456 else {
2541- let lL = getString(de, bR())
2542- let lM = if (isDefined(lL))
2543- then split_4C(value(lL), "_")
2457+ let lz = getString(cR, bD())
2458+ let lA = if (isDefined(lz))
2459+ then split_4C(value(lz), "_")
25442460 else nil
2545- let lN = if ((size(lM) > 0))
2546- then parseIntValue(lM[0])
2461+ let lB = if ((size(lA) > 0))
2462+ then parseIntValue(lA[0])
25472463 else 0
2548- if ((0 >= lN))
2464+ if ((0 >= lB))
25492465 then throw("There are no Medical Kits L1 at Emergency Service storage")
25502466 else {
2551- let lH = (lD + parseIntValue(split(aX[0], "_")[aZ]))
2552- let lO = makeString([toString((lN - 1)), removeByIndex(lM, 0)], "_")
2553- let co = split(aX[0], "_")
2554- let lP = cn(co)
2555- let lQ = fraction((lP * aP), aO, (cG * bc))
2556- if ((kX.amount != lQ))
2557- then throw(("Payment attached should be " + toString(lQ)))
2467+ let lv = (lr + parseIntValue(split(aJ[0], "_")[aL]))
2468+ let lC = makeString([toString((lB - 1)), removeByIndex(lA, 0)], "_")
2469+ let cb = split(aJ[0], "_")
2470+ let lD = ca(cb)
2471+ let lE = fraction((lD * az), ay, (ct * aO))
2472+ if ((kL.amount != lE))
2473+ then throw(("Payment attached should be " + toString(lE)))
25582474 else {
2559- let fj = dy(invoke(de, "updateEsStorage", [lO], [AttachedPayment(cA, lQ)]))
2560- $Tuple2(((kW :+ IntegerEntry(jb, lH)) ++ kf(B, aa)._1), fj)
2475+ let fa = dl(invoke(cR, "updateEsStorage", [lC], [AttachedPayment(cn, lE)]))
2476+ $Tuple2(((kK :+ IntegerEntry(iP, lv)) ++ jT(u, S)._1), fa)
25612477 }
25622478 }
25632479 }
25692485
25702486
25712487
2572-@Callable(gK)
2573-func updateBackpack (B,lR) = if ((gK.caller != de))
2488+@Callable(gv)
2489+func updateBackpack (u,lF) = if ((gv.caller != cR))
25742490 then throw("permission denied")
2575- else $Tuple2([StringEntry(bN(B), lR)], lR)
2576-
2577-
2578-
2579-@Callable(gK)
2491+ else $Tuple2([StringEntry(bz(u), lF)], lF)
2492+
2493+
2494+
2495+@Callable(gv)
25802496 func commitForRandom () = {
2581- let kW = kT(gK)
2582- let lS = (height + dr)
2583- let c = toString(gK.caller)
2584- $Tuple2(([IntegerEntry(ds(c), lS)] ++ kW), lS)
2585- }
2586-
2587-
2588-
2589-@Callable(gK)
2590-func revealRandom (dS) = {
2591- let kW = kT(gK)
2592- let c = toString(gK.caller)
2593- let lT = ds(c)
2594- let lS = valueOrErrorMessage(getInteger(lT), "You have to commitForRandom() first!")
2595- if ((lS > height))
2596- then throw(("Random number is not ready yet, wait until height = " + toString(lS)))
2497+ let kK = kH(gv)
2498+ let lG = (height + de)
2499+ let c = toString(gv.caller)
2500+ $Tuple2(([IntegerEntry(df(c), lG)] ++ kK), lG)
2501+ }
2502+
2503+
2504+
2505+@Callable(gv)
2506+func revealRandom (dF) = {
2507+ let kK = kH(gv)
2508+ let c = toString(gv.caller)
2509+ let lH = df(c)
2510+ let lG = valueOrErrorMessage(getInteger(lH), "You have to commitForRandom() first!")
2511+ if ((lG > height))
2512+ then throw(("Random number is not ready yet, wait until height = " + toString(lG)))
25972513 else {
2598- let dU = value(value(blockInfoByHeight(lS)).vrf)
2599- let dT = toBytes(valueOrElse(getString(dK(c)), ""))
2600- let lU = dR(dS, dT, dU)
2601- $Tuple2(([DeleteEntry(lT)] ++ kW), lU)
2602- }
2603- }
2604-
2605-
2606-
2607-@Callable(gK)
2514+ let dH = value(value(blockInfoByHeight(lG)).vrf)
2515+ let dG = toBytes(valueOrElse(getString(dx(c)), ""))
2516+ let lI = dE(dF, dG, dH)
2517+ $Tuple2(([DeleteEntry(lH)] ++ kK), lI)
2518+ }
2519+ }
2520+
2521+
2522+
2523+@Callable(gv)
26082524 func buySLand () = {
2609- let kW = kT(gK)
2610- if ((size(gK.payments) != 1))
2525+ let kK = kH(gv)
2526+ if ((size(gv.payments) != 1))
26112527 then throw("Exactly one payment required")
26122528 else {
2613- let kX = value(gK.payments[0])
2614- if ((kX.assetId != cA))
2529+ let kL = value(gv.payments[0])
2530+ if ((kL.assetId != cn))
26152531 then throw("Allowed USDT payment only!")
2616- else if ((kX.amount != ee))
2617- then throw(("Payment attached should be " + toString(ee)))
2532+ else if ((kL.amount != dQ))
2533+ then throw(("Payment attached should be " + toString(dQ)))
26182534 else {
2619- let fj = iI(gK.caller, gK.transactionId)
2620- let lV = dB(invoke(di, "burnAcres", [eg], nil))
2621- $Tuple2((((fj._1 :+ ScriptTransfer(de, kX.amount, cA)) ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
2535+ let fa = iw(gv.caller, gv.transactionId)
2536+ let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2537+ $Tuple2((((fa._1 :+ ScriptTransfer(cR, kL.amount, cn)) ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
26222538 }
26232539 }
26242540 }
26252541
26262542
26272543
2628-@Callable(gK)
2629-func expedition (iQ,iR) = {
2630- let kW = kT(gK)
2631- if ((size(gK.payments) != 0))
2544+@Callable(gv)
2545+func expedition (iE,iF) = {
2546+ let kK = kH(gv)
2547+ if ((size(gv.payments) != 0))
26322548 then throw("No payments required")
26332549 else {
2634- let bQ = toString(gK.caller)
2635- let hp = iP(bQ, iQ, iR)
2636- let B = hp._2
2637- let jb = A(B)
2638- let hL = bN(B)
2639- let io = hK(hL)
2640- let jQ = split(io[bo], "_")
2641- let jS = makeString(fd(true, jQ, ed), "_")
2642- let gx = G(B)
2643- let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2644- let lW = fk(lo, hp._5)
2645- let lq = lW._1
2646- let lr = lW._2
2647- let lX = iI(gK.caller, gK.transactionId)
2648- let iO = lX._2._1
2649- let fj = if ((0 >= hp._1))
2650- then $Tuple3([IntegerEntry(jb, 0), StringEntry(gx, lq)], "", 0)
2651- else $Tuple3((lX._1 ++ (if (lr)
2652- then [StringEntry(M(B), "0_0_0_0_0")]
2653- else ((((nil :+ StringEntry(bO(B), makeString([lX._2._2, "L", iO], "_"))) :+ IntegerEntry(jb, hp._1)) :+ StringEntry(gx, lq)) :+ StringEntry(hL, makeString([io[bm], io[bn], jS, io[bp]], ":"))))), iO, hp._3)
2654- if (kq(B))
2550+ let bC = toString(gv.caller)
2551+ let ha = iD(bC, iE, iF)
2552+ let u = ha._2
2553+ let iP = t(u)
2554+ let hx = bz(u)
2555+ let ib = hw(hx)
2556+ let jE = split(ib[ba], "_")
2557+ let jG = makeString(eU(true, jE, dP), "_")
2558+ let gh = z(u)
2559+ let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2560+ let lK = fb(lc, ha._5)
2561+ let le = lK._1
2562+ let lf = lK._2
2563+ let hp = lK._3
2564+ let lL = iw(gv.caller, gv.transactionId)
2565+ let iC = lL._2._1
2566+ let fa = if ((0 >= ha._1))
2567+ then $Tuple3([IntegerEntry(iP, 0), StringEntry(gh, le)], "", 0)
2568+ else $Tuple3((lL._1 ++ (if (lf)
2569+ then [StringEntry(F(u), "0_0_0_0_0")]
2570+ else ((((nil :+ StringEntry(bA(u), makeString([lL._2._2, "L", iC], "_"))) :+ IntegerEntry(iP, ha._1)) :+ StringEntry(gh, le)) :+ StringEntry(hx, makeString([ib[aY], ib[aZ], jG, ib[bb]], ":"))))), iC, ha._3)
2571+ if (ke(u))
26552572 then throw("expedition_checkTournament")
26562573 else {
2657- let lV = dB(invoke(di, "burnAcres", [eg], nil))
2658- $Tuple2(((fj._1 ++ kf(B, ac)._1) ++ kW), $Tuple3(fj._2, fj._3, lV))
2574+ let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2575+ $Tuple2(((fa._1 ++ jT(u, U)._1) ++ kK), $Tuple3(fa._2, fa._3, lJ))
26592576 }
26602577 }
26612578 }
26622579
26632580
26642581
2665-@Callable(gK)
2582+@Callable(gv)
26662583 func buySLandForAcres () = {
2667- let kW = kT(gK)
2668- if ((size(gK.payments) != 1))
2584+ let kK = kH(gv)
2585+ if ((size(gv.payments) != 1))
26692586 then throw("exactly 1 payment must be attached")
26702587 else {
2671- let kX = gK.payments[0]
2672- let fq = kX.amount
2673- if (if (!(isDefined(kX.assetId)))
2588+ let kL = gv.payments[0]
2589+ let fh = kL.amount
2590+ if (if (!(isDefined(kL.assetId)))
26742591 then true
2675- else (value(kX.assetId) != dq))
2592+ else (value(kL.assetId) != dd))
26762593 then throw("ACRES payments only!")
2677- else if ((fq != eg))
2678- then throw(("Payment attached should be " + toString(eg)))
2594+ else if ((fh != dS))
2595+ then throw(("Payment attached should be " + toString(dS)))
26792596 else {
2680- let fj = iI(gK.caller, gK.transactionId)
2681- let lV = dB(invoke(di, "burnAcres", [eg], [AttachedPayment(dq, fq)]))
2682- $Tuple2(((fj._1 ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
2597+ let fa = iw(gv.caller, gv.transactionId)
2598+ let lJ = do(invoke(cV, "burnAcres", [dS], [AttachedPayment(dd, fh)]))
2599+ $Tuple2(((fa._1 ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
26832600 }
26842601 }
26852602 }
26862603
26872604
26882605
2689-@Callable(gK)
2690-func upgradeInfra (Q) = {
2691- let kW = kT(gK)
2692- if ((size(gK.payments) != 0))
2606+@Callable(gv)
2607+func upgradeInfra (bp) = {
2608+ let kK = kH(gv)
2609+ if ((size(gv.payments) != 0))
26932610 then throw("No payments required")
26942611 else {
2695- let fj = jK(true, gK.caller, 0, Q)
2696- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2697- $Tuple2(((fj._1 ++ kW) ++ kf(B, fraction(ad, fj._3, cG))._1), fj._2)
2698- }
2699- }
2700-
2701-
2702-
2703-@Callable(gK)
2704-func activateArtifact (lY,lZ) = {
2705- let kW = kT(gK)
2706- if ((size(gK.payments) != 0))
2612+ let fa = jy(true, gv.caller, 0, bp)
2613+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2614+ $Tuple2(((fa._1 ++ kK) ++ jT(u, fraction(V, fa._3, ct))._1), fa._2)
2615+ }
2616+ }
2617+
2618+
2619+
2620+@Callable(gv)
2621+func activateArtifact (lM,lN) = {
2622+ let kK = kH(gv)
2623+ if ((size(gv.payments) != 0))
27072624 then throw("No payments required")
27082625 else {
2709- let c = toString(gK.caller)
2710- let fj = {
2711- let cz = lY
2712- if (("PRESALE" == cz))
2713- then ko(c, lZ)
2714- else if (("ONBOARD" == cz))
2715- then kh(c)
2626+ let c = toString(gv.caller)
2627+ let fa = {
2628+ let cm = lM
2629+ if (("PRESALE" == cm))
2630+ then kc(c, lN)
2631+ else if (("ONBOARD" == cm))
2632+ then jV(c)
27162633 else throw("Unknown artifact")
27172634 }
2718- (fj ++ kW)
2719- }
2720- }
2721-
2722-
2723-
2724-@Callable(gK)
2725-func mergeLands (ku) = {
2726- let kW = kT(gK)
2727- if ((size(gK.payments) != 0))
2635+ (fa ++ kK)
2636+ }
2637+ }
2638+
2639+
2640+
2641+@Callable(gv)
2642+func mergeLands (ki) = {
2643+ let kK = kH(gv)
2644+ if ((size(gv.payments) != 0))
27282645 then throw("No payments required")
27292646 else {
2730- let fj = kS(toString(gK.caller), ku)
2731- $Tuple2(((fj._1 ++ kW) ++ kg(toString(gK.caller), ae)._1), fj._2)
2732- }
2733- }
2734-
2735-
2736-
2737-@Callable(gK)
2738-func cargoExchange (ma,Q) = {
2739- let kW = kT(gK)
2740- if ((size(gK.payments) != 0))
2647+ let fa = kG(toString(gv.caller), ki)
2648+ $Tuple2(((fa._1 ++ kK) ++ jU(toString(gv.caller), W)._1), fa._2)
2649+ }
2650+ }
2651+
2652+
2653+
2654+@Callable(gv)
2655+func cargoExchange (lO,bp) = {
2656+ let kK = kH(gv)
2657+ if ((size(gv.payments) != 0))
27412658 then throw("No payments required")
27422659 else {
2743- let in = split_4C(ma, ":")
2744- let c = toString(gK.originCaller)
2745- let js = value(assetInfo(fromBase58String(Q)))
2746- let jt = bw(Q)
2747- if (!(isDefined(getInteger(jt))))
2748- then throw((js.name + " is not staked"))
2660+ let ia = split_4C(lO, ":")
2661+ let c = toString(gv.originCaller)
2662+ let jg = value(assetInfo(fromBase58String(bp)))
2663+ let jh = bi(bp)
2664+ if (!(isDefined(getInteger(jh))))
2665+ then throw((jg.name + " is not staked"))
27492666 else {
2750- let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
2751- if ((jv != c))
2752- then throw((aF + " is not yours"))
2667+ let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
2668+ if ((jj != c))
2669+ then throw((ap + " is not yours"))
27532670 else {
2754- let hZ = (dG(split(js.description, "_")[dk]) / cH)
2755- let ia = valueOrElse(getInteger(bD(Q)), 0)
2756- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2757- let jq = valueOrElse(getString(bO(B)), aN)
2758- let cj = split(value(jq), "_")
2759- if ((cj[br] != "L"))
2760- then throw((("Duck location type is " + cj[br]) + ", but should be L"))
2761- else if ((cj[bs] != Q))
2762- then throw(("Duck should be on the land " + Q))
2671+ let hM = (dt(split(jg.description, "_")[cX]) / cu)
2672+ let hN = valueOrElse(getInteger(bq(bp)), 0)
2673+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2674+ let je = valueOrElse(getString(bA(u)), ax)
2675+ let bV = split(value(je), "_")
2676+ if ((bV[bd] != "L"))
2677+ then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
2678+ else if ((bV[be] != bp))
2679+ then throw(("Duck should be on the land " + bp))
27632680 else {
2764- let hY = bC(Q)
2765- let hP = hX(hY, hZ, ia)
2766- let hL = bN(B)
2767- let io = hK(hL)
2768- let fj = im(in, hP, io)
2769- let ig = split(hP[bh], "_")
2770- let jH = (parseIntValue(ig[bj]) + fj._7)
2771- let jI = (parseIntValue(ig[bk]) - fj._7)
2772- ([StringEntry(hL, makeString_2C([io[bm], fj._4, fj._5, fj._6], ":")), StringEntry(hY, makeString_2C([hP[bd], fj._1, fj._2, fj._3, makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")], ":"))] ++ kW)
2681+ let hL = bo(bp)
2682+ let hC = hK(hL, hM, hN)
2683+ let hx = bz(u)
2684+ let ib = hw(hx)
2685+ let fa = hZ(ia, hC, ib)
2686+ let hT = split(hC[aT], "_")
2687+ let jv = (parseIntValue(hT[aV]) + fa._7)
2688+ let jw = (parseIntValue(hT[aW]) - fa._7)
2689+ ([StringEntry(hx, makeString_2C([ib[aY], fa._4, fa._5, fa._6], ":")), StringEntry(hL, makeString_2C([hC[aP], fa._1, fa._2, fa._3, makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")], ":"))] ++ kK)
27732690 }
27742691 }
27752692 }
27782695
27792696
27802697
2781-@Callable(gK)
2782-func saveWarehouse (ic,Q) = if ((gK.caller != de))
2698+@Callable(gv)
2699+func saveWarehouse (hP,bp) = if ((gv.caller != cR))
27832700 then throw("Access denied")
27842701 else {
2785- let hY = bC(Q)
2786- let id = split_4C(ic, ":")
2787- if ((size(id) != 5))
2702+ let hL = bo(bp)
2703+ let hQ = split_4C(hP, ":")
2704+ if ((size(hQ) != 5))
27882705 then throw("warehouse string should contain 4 ':' separators")
27892706 else {
2790- let mb = split(id[bh], "_")[bi]
2791- let jH = hO(id)
2792- let mc = hM(id[bd])
2793- let jI = ((mc - parseIntValue(mb)) - jH)
2794- if ((0 > jI))
2707+ let lP = split(hQ[aT], "_")[aU]
2708+ let jv = hB(hQ)
2709+ let lQ = hz(hQ[aP])
2710+ let jw = ((lQ - parseIntValue(lP)) - jv)
2711+ if ((0 > jw))
27952712 then throw("Operation leads to negative free warehouse space")
27962713 else {
2797- let md = makeString_2C([id[bd], id[be], id[bf], id[bg], makeString([mb, toString(jH), toString(jI), toString(mc)], "_")], ":")
2798- $Tuple2([StringEntry(hY, md)], md)
2714+ let lR = makeString_2C([hQ[aP], hQ[aQ], hQ[aR], hQ[aS], makeString([lP, toString(jv), toString(jw), toString(lQ)], "_")], ":")
2715+ $Tuple2([StringEntry(hL, lR)], lR)
27992716 }
28002717 }
28012718 }
28022719
28032720
28042721
2805-@Callable(gK)
2806-func setCustomName (bu,kE,by) = {
2807- let kW = kT(gK)
2808- if ((size(gK.payments) != 1))
2722+@Callable(gv)
2723+func setCustomName (bg,ks,bk) = {
2724+ let kK = kH(gv)
2725+ if ((size(gv.payments) != 1))
28092726 then throw("Exactly one payment required")
28102727 else {
2811- let kX = value(gK.payments[0])
2812- if ((kX.assetId != cA))
2728+ let kL = value(gv.payments[0])
2729+ if ((kL.assetId != cn))
28132730 then throw("Allowed USDT payment only!")
2814- else if ((kX.amount != ea))
2815- then throw(("Payment should be " + toString(ea)))
2816- else if (contains(kE, "__"))
2817- then throw(("Name should not contain '__': " + kE))
2818- else if ((size(kE) > eb))
2819- then throw(("Name too long, maxLength=" + toString(eb)))
2731+ else if ((kL.amount != dM))
2732+ then throw(("Payment should be " + toString(dM)))
2733+ else if (contains(ks, "__"))
2734+ then throw(("Name should not contain '__': " + ks))
2735+ else if ((size(ks) > dN))
2736+ then throw(("Name too long, maxLength=" + toString(dN)))
28202737 else {
2821- let c = toString(gK.originCaller)
2822- let me = {
2823- let cz = by
2824- if (("ACCOUNT" == cz))
2738+ let c = toString(gv.originCaller)
2739+ let lS = {
2740+ let cm = bk
2741+ if (("ACCOUNT" == cm))
28252742 then {
2826- let mf = ew(kE)
2827- let mg = getString(mf)
2828- if (isDefined(mg))
2829- then throw(("Name already registered: " + kE))
2743+ let lT = ei(ks)
2744+ let lU = getString(lT)
2745+ if (isDefined(lU))
2746+ then throw(("Name already registered: " + ks))
28302747 else {
2831- let mh = bG(c)
2832- let mi = getString(mh)
2833- let mj = if (isDefined(mi))
2834- then [DeleteEntry(ew(value(mi)))]
2748+ let lV = bs(c)
2749+ let lW = getString(lV)
2750+ let lX = if (isDefined(lW))
2751+ then [DeleteEntry(ei(value(lW)))]
28352752 else nil
2836- (((mj :+ StringEntry(mh, kE)) :+ StringEntry(mf, c)) ++ kg(c, ab)._1)
2753+ (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jU(c, T)._1)
28372754 }
28382755 }
2839- else if (("LAND" == cz))
2756+ else if (("LAND" == cm))
28402757 then {
2841- let js = value(assetInfo(fromBase58String(bu)))
2842- let jt = bw(bu)
2843- if (!(isDefined(getInteger(jt))))
2844- then throw((js.name + " is not staked"))
2758+ let jg = value(assetInfo(fromBase58String(bg)))
2759+ let jh = bi(bg)
2760+ if (!(isDefined(getInteger(jh))))
2761+ then throw((jg.name + " is not staked"))
28452762 else {
2846- let jv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + js.name) + " is orphaned"))
2847- if ((jv != c))
2848- then throw((aF + " is not yours"))
2763+ let jj = valueOrErrorMessage(getString(bf(bg)), (("NFT " + jg.name) + " is orphaned"))
2764+ if ((jj != c))
2765+ then throw((ap + " is not yours"))
28492766 else {
2850- let mf = ep(kE)
2851- let mg = getString(mf)
2852- if (isDefined(mg))
2853- then throw(("Name already registered: " + kE))
2767+ let lT = eb(ks)
2768+ let lU = getString(lT)
2769+ if (isDefined(lU))
2770+ then throw(("Name already registered: " + ks))
28542771 else {
2855- let mk = bv(bu)
2856- let mi = getString(mk)
2857- let mj = if (isDefined(mi))
2858- then [DeleteEntry(ep(value(mi)))]
2772+ let lY = bh(bg)
2773+ let lW = getString(lY)
2774+ let lX = if (isDefined(lW))
2775+ then [DeleteEntry(eb(value(lW)))]
28592776 else nil
2860- (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kg(c, ab)._1)
2777+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jU(c, T)._1)
28612778 }
28622779 }
28632780 }
28642781 }
2865- else if (("DUCK" == cz))
2782+ else if (("DUCK" == cm))
28662783 then {
2867- let js = value(assetInfo(fromBase58String(bu)))
2868- let jt = bw(bu)
2869- if (if (!(isDefined(getInteger(jt))))
2784+ let jg = value(assetInfo(fromBase58String(bg)))
2785+ let jh = bi(bg)
2786+ if (if (!(isDefined(getInteger(jh))))
28702787 then true
2871- else !(isDefined(getString(bM(c)))))
2872- then throw((js.name + " is not staked"))
2788+ else !(isDefined(getString(by(c)))))
2789+ then throw((jg.name + " is not staked"))
28732790 else {
2874- let jv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + js.name) + " is orphaned"))
2875- if ((jv != c))
2876- then throw((aG + " is not yours"))
2791+ let jj = valueOrErrorMessage(getString(bx(bg)), (("NFT " + jg.name) + " is orphaned"))
2792+ if ((jj != c))
2793+ then throw((aq + " is not yours"))
28772794 else {
2878- let mf = ev(kE)
2879- let mg = getString(mf)
2880- if (isDefined(mg))
2881- then throw(("Name already registered: " + kE))
2795+ let lT = eh(ks)
2796+ let lU = getString(lT)
2797+ if (isDefined(lU))
2798+ then throw(("Name already registered: " + ks))
28822799 else {
2883- let mk = bF(bu)
2884- let mi = getString(mk)
2885- let mj = if (isDefined(mi))
2886- then [DeleteEntry(ev(value(mi)))]
2800+ let lY = br(bg)
2801+ let lW = getString(lY)
2802+ let lX = if (isDefined(lW))
2803+ then [DeleteEntry(eh(value(lW)))]
28872804 else nil
2888- (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kf(bu, ab)._1)
2805+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jT(bg, T)._1)
28892806 }
28902807 }
28912808 }
28922809 }
28932810 else throw("Unknown entity type")
28942811 }
2895- $Tuple2(((me :+ ScriptTransfer(de, kX.amount, cA)) ++ kW), 0)
2812+ $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cn)) ++ kK), 0)
28962813 }
28972814 }
28982815 }
28992816
29002817
29012818
2902-@Callable(gK)
2903-func setReferrals (ml,mm) = if ((gK.callerPublicKey != cy))
2819+@Callable(gv)
2820+func setReferrals (lZ,ma) = if ((gv.callerPublicKey != cl))
29042821 then throw("Permission denied")
29052822 else {
2906- let kW = kT(gK)
2907- if ((size(gK.payments) != 0))
2823+ let kK = kH(gv)
2824+ if ((size(gv.payments) != 0))
29082825 then throw("No payments required")
2909- else if (!(isDefined(addressFromString(ml))))
2910- then throw(("Invalid address: " + ml))
2826+ else if (!(isDefined(addressFromString(lZ))))
2827+ then throw(("Invalid address: " + lZ))
29112828 else {
2912- let mn = addressFromString(mm)
2913- if (!(isDefined(mn)))
2914- then throw(("Invalid address: " + mm))
2829+ let mb = addressFromString(ma)
2830+ if (!(isDefined(mb)))
2831+ then throw(("Invalid address: " + ma))
29152832 else {
2916- let mo = getString(dK(ml))
2917- if (!(isDefined(mo)))
2833+ let mc = getString(dx(lZ))
2834+ if (!(isDefined(mc)))
29182835 then throw("oldPlayer didn't do any tx in game")
2919- else if ((0 >= wavesBalance(value(mn)).available))
2836+ else if ((0 >= wavesBalance(value(mb)).available))
29202837 then throw("newPlayer has no WAVES")
29212838 else {
2922- let mp = ex()
2923- let mq = getString(mp)
2924- let mr = if (isDefined(mq))
2925- then split_4C(value(mq), "_")
2839+ let md = ej()
2840+ let me = getString(md)
2841+ let mf = if (isDefined(me))
2842+ then split_4C(value(me), "_")
29262843 else nil
2927- if (containsElement(mr, mm))
2928- then throw((mm + " is not newbie (already has referrals)"))
2844+ if (containsElement(mf, ma))
2845+ then throw((ma + " is not newbie (already has referrals)"))
29292846 else {
2930- let ki = bH(mm)
2931- let kj = getString(ki)
2932- if (if (isDefined(kj))
2933- then isDefined(addressFromString(value(kj)))
2847+ let jW = bt(ma)
2848+ let jX = getString(jW)
2849+ if (if (isDefined(jX))
2850+ then isDefined(addressFromString(value(jX)))
29342851 else false)
2935- then throw(((mm + " already has refBy: ") + value(kj)))
2852+ then throw(((ma + " already has refBy: ") + value(jX)))
29362853 else {
2937- let ms = bK(ml)
2938- let mt = getString(ms)
2939- let mu = if (isDefined(mt))
2940- then split_4C(value(mt), "_")
2854+ let mg = bw(lZ)
2855+ let mh = getString(mg)
2856+ let mi = if (isDefined(mh))
2857+ then split_4C(value(mh), "_")
29412858 else nil
2942- if (containsElement(mu, mm))
2943- then throw((((ml + " already contains ") + mm) + " within referrals"))
2859+ if (containsElement(mi, ma))
2860+ then throw((((lZ + " already contains ") + ma) + " within referrals"))
29442861 else {
2945- let mv = makeString_2C((mu :+ mm), "_")
2946- let mw = if (containsElement(mr, ml))
2947- then value(mq)
2948- else makeString_2C((mr :+ ml), "_")
2949- $Tuple2(([StringEntry(ki, ml), StringEntry(ms, mv), StringEntry(mp, mw)] ++ kW), 0)
2862+ let mj = makeString_2C((mi :+ ma), "_")
2863+ let mk = if (containsElement(mf, lZ))
2864+ then value(me)
2865+ else makeString_2C((mf :+ lZ), "_")
2866+ $Tuple2(([StringEntry(jW, lZ), StringEntry(mg, mj), StringEntry(md, mk)] ++ kK), 0)
29502867 }
29512868 }
29522869 }
29572874
29582875
29592876
2960-@Callable(gK)
2961-func distributePoints (mx,my,mz,mA,mB) = {
2962- let kW = kT(gK)
2963- if ((size(gK.payments) != 0))
2877+@Callable(gv)
2878+func distributePoints (ml,mm,mn,mo,mp) = {
2879+ let kK = kH(gv)
2880+ if ((size(gv.payments) != 0))
29642881 then throw("No payments required")
29652882 else {
2966- let c = toString(gK.originCaller)
2967- let mC = dD(invoke(dg, "checkWlgXpREADONLY", [c], nil))
2968- let mD = dB(mC[1])
2969- let mE = if ((0 >= mD))
2883+ let c = toString(gv.originCaller)
2884+ let mq = dq(invoke(cT, "checkWlgXpREADONLY", [c], nil))
2885+ let mr = do(mq[1])
2886+ let ms = if ((0 >= mr))
29702887 then $Tuple2(0, nil)
29712888 else {
2972- let kd = dB(invoke(dg, "takeWlgXp", [c], nil))
2973- if ((kd == kd))
2974- then $Tuple2(mD, [IntegerEntry(I(c), dB(mC[0])), IntegerEntry(H(c), dB(mC[2]))])
2889+ let jR = do(invoke(cT, "takeWlgXp", [c], nil))
2890+ if ((jR == jR))
2891+ then $Tuple2(mr, [IntegerEntry(B(c), do(mq[0])), IntegerEntry(A(c), do(mq[2]))])
29752892 else throw("Strict value is not equal to itself.")
29762893 }
2977- let mF = mE._1
2978- let mG = mE._2
2979- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2980- let mH = J(c)
2981- let mI = (valueOrElse(getInteger(mH), 0) + mF)
2982- let mJ = F(B)
2983- let mK = valueOrElse(getInteger(mJ), 0)
2984- let mL = (mI + mK)
2985- let mM = ((((mx + my) + mz) + mA) + mB)
2986- if ((mM > mL))
2987- then throw((("There are only " + toString(mL)) + " free points to distribute"))
2894+ let mt = ms._1
2895+ let mu = ms._2
2896+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2897+ let mv = C(c)
2898+ let mw = (valueOrElse(getInteger(mv), 0) + mt)
2899+ let mx = y(u)
2900+ let my = valueOrElse(getInteger(mx), 0)
2901+ let mz = (mw + my)
2902+ let mA = ((((ml + mm) + mn) + mo) + mp)
2903+ if ((mA > mz))
2904+ then throw((("There are only " + toString(mz)) + " free points to distribute"))
29882905 else {
2989- let mN = C(B)
2990- let at = split(valueOrElse(getString(mN), "0_0_0_0_0"), "_")
2991- let mO = (mI - mM)
2992- $Tuple2((([IntegerEntry(mH, if ((0 > mO))
2906+ let mB = v(u)
2907+ let al = split(valueOrElse(getString(mB), "0_0_0_0_0"), "_")
2908+ let mC = (mw - mA)
2909+ $Tuple2((([IntegerEntry(mv, if ((0 > mC))
29932910 then 0
2994- else mO), IntegerEntry(mJ, if ((0 > mO))
2995- then (mK + mO)
2996- else mK), StringEntry(mN, makeString([toString((parseIntValue(at[l]) + mx)), toString((parseIntValue(at[m]) + my)), toString((parseIntValue(at[n]) + mz)), toString((parseIntValue(at[o]) + mA)), toString((parseIntValue(at[p]) + mB))], "_"))] ++ kW) ++ mG), 0)
2911+ else mC), IntegerEntry(mx, if ((0 > mC))
2912+ then (my + mC)
2913+ else my), StringEntry(mB, makeString([toString((parseIntValue(al[j]) + ml)), toString((parseIntValue(al[k]) + mm)), toString((parseIntValue(al[l]) + mn)), toString((parseIntValue(al[m]) + mo)), toString((parseIntValue(al[n]) + mp))], "_"))] ++ kK) ++ mu), 0)
29972914 }
29982915 }
29992916 }
30002917
30012918
30022919
3003-@Callable(gK)
3004-func splitByGlobalWeightsREADONLY (eI) = $Tuple2(nil, fa(eI))
3005-
3006-
3007-
3008-@Callable(gK)
3009-func splitByGlobalAndLocalWeightsREADONLY (mP,mQ,gN) = {
3010- let gG = gM(gN)
3011- $Tuple2(nil, $Tuple2(fa(mP), eL(mQ, gG)))
3012- }
3013-
3014-
3015-
3016-@Callable(gK)
3017-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hK(bN(B)), ":"))
3018-
3019-
3020-
3021-@Callable(gK)
3022-func getWarehouseREADONLY (Q) = {
3023- let js = value(assetInfo(fromBase58String(Q)))
3024- let hZ = (dG(split(js.description, "_")[dk]) / cH)
3025- let ia = valueOrElse(getInteger(bD(Q)), 0)
3026- $Tuple2(nil, makeString_2C(hX(bC(Q), hZ, ia), ":"))
3027- }
3028-
3029-
3030-
3031-@Callable(gK)
3032-func saveLastTx () = if (!(containsElement([dg, de, dh, di], gK.caller)))
2920+@Callable(gv)
2921+func splitByGlobalWeightsREADONLY (ez) = $Tuple2(nil, eR(ez))
2922+
2923+
2924+
2925+@Callable(gv)
2926+func splitByGlobalAndLocalWeightsREADONLY (mD,mE,gy) = {
2927+ let gr = gx(gy)
2928+ $Tuple2(nil, $Tuple2(eR(mD), eC(mE, gr)))
2929+ }
2930+
2931+
2932+
2933+@Callable(gv)
2934+func getBackpackREADONLY (u) = $Tuple2(nil, makeString(hw(bz(u)), ":"))
2935+
2936+
2937+
2938+@Callable(gv)
2939+func getWarehouseREADONLY (bp) = {
2940+ let jg = value(assetInfo(fromBase58String(bp)))
2941+ let hM = (dt(split(jg.description, "_")[cX]) / cu)
2942+ let hN = valueOrElse(getInteger(bq(bp)), 0)
2943+ $Tuple2(nil, makeString_2C(hK(bo(bp), hM, hN), ":"))
2944+ }
2945+
2946+
2947+
2948+@Callable(gv)
2949+func saveLastTx () = if (!(containsElement([cT, cR, cU, cV], gv.caller)))
30332950 then throw("Access denied")
3034- else $Tuple2(kT(gK), 42)
3035-
3036-
3037-
3038-@Callable(gK)
3039-func updateDuckStats (B,kd) = if ((gK.caller != de))
2951+ else $Tuple2(kH(gv), 42)
2952+
2953+
2954+
2955+@Callable(gv)
2956+func updateDuckStats (u,jR) = if ((gv.caller != cR))
30402957 then throw("Access denied")
3041- else kf(B, kd)
3042-
3043-
3044-
3045-@Callable(gK)
3046-func updateAccStats (c,kd) = if (!(containsElement([dg, de, di], gK.caller)))
2958+ else jT(u, jR)
2959+
2960+
2961+
2962+@Callable(gv)
2963+func updateAccStats (c,jR) = if (!(containsElement([cT, cR, cV], gv.caller)))
30472964 then throw("Access denied")
3048- else kg(c, kd)
3049-
3050-
3051-
3052-@Callable(gK)
3053-func equipDuck (mR) = {
3054- let kW = kT(gK)
3055- if ((size(gK.payments) != 0))
2965+ else jU(c, jR)
2966+
2967+
2968+
2969+@Callable(gv)
2970+func equipDuck (mF) = {
2971+ let kK = kH(gv)
2972+ if ((size(gv.payments) != 0))
30562973 then throw("No payments required")
30572974 else {
3058- let c = toString(gK.originCaller)
3059- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3060- if (kq(B))
2975+ let c = toString(gv.originCaller)
2976+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2977+ if (ke(u))
30612978 then throw("equipDuck_checkTournament")
30622979 else {
3063- let gx = G(B)
3064- let mS = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3065- let hL = bN(B)
3066- let io = hK(hL)
3067- let lq = split(mR, "_")
3068- if ((size(lq) != r))
2980+ let gh = z(u)
2981+ let mG = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2982+ let hx = bz(u)
2983+ let ib = hw(hx)
2984+ let le = split(mF, "_")
2985+ if ((size(le) != p))
30692986 then throw("Wrong equipment string")
30702987 else {
3071- let gz = gm(mS, fx(io[bp]), true, nil)
3072- let gA = split(lq[q], ";")[1]
3073- let ar = if ((gA == ""))
2988+ let gk = fZ(mG, fo(ib[bb]), true, nil)
2989+ let gl = split(le[o], ";")[1]
2990+ let aj = if ((gl == ""))
30742991 then 0
30752992 else {
3076- let gB = split(gA, ",")[0]
3077- if ((gB == ""))
2993+ let gm = split(gl, ",")[0]
2994+ if ((gm == ""))
30782995 then 0
30792996 else {
3080- let fM = split(gB, ":")
3081- let dc = fM[0]
3082- let gC = fM[1]
3083- if (if (if (if (if ((dc == "06"))
2997+ let fD = split(gm, ":")
2998+ let cP = fD[0]
2999+ let gn = fD[1]
3000+ if (if (if (if (if ((cP == "06"))
30843001 then true
3085- else (dc == "07"))
3002+ else (cP == "07"))
30863003 then true
3087- else (dc == "08"))
3088- then (gC != "")
3004+ else (cP == "08"))
3005+ then (gn != "")
30893006 else false)
3090- then (parseIntValue(gC) > 0)
3007+ then (parseIntValue(gn) > 0)
30913008 else false)
3092- then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
3009+ then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
30933010 else 0
30943011 }
30953012 }
3096- let gh = ap(this, B, ar, true)
3097- let gD = gm(lq, gz, false, gh)
3098- let mT = fC(gD)
3099- $Tuple2(([StringEntry(gx, mR), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], mT], ":")), StringEntry(M(B), makeString([toString(gh[7]), toString(gh[8]), toString(gh[9]), toString(gh[10]), toString(gh[11])], "_"))] ++ kW), 0)
3013+ let fU = ah(this, u, aj, true)
3014+ let go = fZ(le, gk, false, fU)
3015+ let mH = ft(go)
3016+ $Tuple2(([StringEntry(gh, mF), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], mH], ":")), StringEntry(F(u), makeString([toString(fU[7]), toString(fU[8]), toString(fU[9]), toString(fU[10]), toString(fU[11])], "_"))] ++ kK), 0)
31003017 }
31013018 }
31023019 }
31043021
31053022
31063023
3107-@Callable(gK)
3108-func fortificateLand (Q,mU) = {
3109- let kW = kT(gK)
3110- if ((size(gK.payments) != 0))
3111- then throw("No payments required")
3112- else {
3113- let c = toString(gK.originCaller)
3114- let B = valueOrElse(getString(bM(c)), "")
3115- let fH = ap(this, B, 0, false)
3116- let mV = bE(Q)
3117- let mW = split(valueOrElse(getString(mV), ":0_15:0_18:0"), "_")
3118- let js = value(assetInfo(fromBase58String(Q)))
3119- let hZ = (dG(split(js.description, "_")[dk]) / cH)
3120- let ia = valueOrElse(getInteger(bD(Q)), 0)
3121- let hY = bC(Q)
3122- let id = hX(hY, hZ, ia)
3123- let mX = split(id[bh], "_")
3124- let mY = parseIntValue(mX[bj])
3125- let mZ = parseIntValue(mX[bk])
3126- let na = split(mU, "_")
3127- let nb = gt(mW, fx(id[bg]), mY, mZ, true, nil)
3128- let gz = nb._1
3129- let nc = nb._2
3130- let nd = nb._3
3131- let ne = gt(na, gz, nc, nd, false, fH)
3132- let gD = ne._1
3133- let nf = ne._2
3134- let ng = ne._3
3135- let mT = fC(gD)
3136- let jY = makeString([mX[bi], toString(nf), toString(ng), mX[bl]], "_")
3137- $Tuple2(([StringEntry(mV, mU), StringEntry(hY, makeString_2C([id[bd], id[be], id[bf], mT, jY], ":"))] ++ kW), 0)
3138- }
3139- }
3140-
3141-
3142-
3143-@Callable(gK)
3144-func initDuckTourAttempt (B) = if ((gK.caller != dh))
3024+@Callable(gv)
3025+func initDuckTourAttempt (u) = if ((gv.caller != cU))
31453026 then throw("Access denied")
31463027 else {
3147- let jb = A(B)
3148- let jc = aj(valueOrElse(getInteger(E(B)), 0))
3149- let lk = valueOrElse(getInteger(jb), jc)
3150- let nh = bO(B)
3151- let jq = valueOrElse(getString(nh), aN)
3152- let ci = valueOrElse(getInteger(dh, bT), 0)
3153- let ni = (toString(ci) + "_T_0")
3154- $Tuple2([IntegerEntry(K(B), lk), IntegerEntry(jb, jc), StringEntry(L(B), jq), StringEntry(nh, ni)], ni)
3028+ let iP = t(u)
3029+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
3030+ let kY = valueOrElse(getInteger(iP), iQ)
3031+ let mI = bA(u)
3032+ let je = valueOrElse(getString(mI), ax)
3033+ let bU = valueOrElse(getInteger(cU, bF), 0)
3034+ let mJ = (toString(bU) + "_T_0")
3035+ $Tuple2([IntegerEntry(D(u), kY), IntegerEntry(iP, iQ), StringEntry(E(u), je), StringEntry(mI, mJ)], mJ)
31553036 }
31563037
31573038
31583039
3159-@Callable(gK)
3040+@Callable(gv)
31603041 func breakAttempt () = {
3161- let kW = kT(gK)
3162- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
3163- let nh = bO(B)
3164- let jq = valueOrElse(getString(nh), aN)
3165- if ((split(jq, "_")[br] != "T"))
3042+ let kK = kH(gv)
3043+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
3044+ let mI = bA(u)
3045+ let je = valueOrElse(getString(mI), ax)
3046+ if ((split(je, "_")[bd] != "T"))
31663047 then throw("Your duck is not in the tournament")
31673048 else {
3168- let nj = getIntegerValue(K(B))
3169- let nk = getStringValue(L(B))
3170- $Tuple2(((kW :+ IntegerEntry(A(B), nj)) :+ StringEntry(nh, nk)), jq)
3171- }
3172- }
3173-
3174-
3175-
3176-@Callable(gK)
3177-func breakAttemptCallback () = if ((gK.caller != dh))
3049+ let mK = getIntegerValue(D(u))
3050+ let mL = getStringValue(E(u))
3051+ $Tuple2(((kK :+ IntegerEntry(t(u), mK)) :+ StringEntry(mI, mL)), je)
3052+ }
3053+ }
3054+
3055+
3056+
3057+@Callable(gv)
3058+func breakAttemptCallback () = if ((gv.caller != cU))
31783059 then throw("Access denied")
31793060 else {
3180- let B = valueOrErrorMessage(getString(bM(toString(gK.originCaller))), "You don't have a duck staked")
3181- $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback")
3061+ let u = valueOrErrorMessage(getString(by(toString(gv.originCaller))), "You don't have a duck staked")
3062+ $Tuple2([IntegerEntry(t(u), getIntegerValue(D(u))), StringEntry(bA(u), getStringValue(E(u)))], "breakAttemptCallback")
31823063 }
31833064
31843065
31853066
3186-@Callable(gK)
3187-func exitTournamentInternal (B) = if ((gK.caller != this))
3067+@Callable(gv)
3068+func exitTournamentInternal (u) = if ((gv.caller != this))
31883069 then throw("Access denied")
31893070 else {
3190- let nj = getIntegerValue(K(B))
3191- let nk = getStringValue(L(B))
3192- $Tuple2([IntegerEntry(A(B), nj), StringEntry(bO(B), nk)], false)
3071+ let mK = getIntegerValue(D(u))
3072+ let mL = getStringValue(E(u))
3073+ $Tuple2([IntegerEntry(t(u), mK), StringEntry(bA(u), mL)], false)
31933074 }
31943075
31953076
31963077
3197-@Callable(gK)
3198-func processDelivery (B) = if ((gK.caller != this))
3078+@Callable(gv)
3079+func processDelivery (u) = if ((gv.caller != this))
31993080 then throw("Access denied")
32003081 else {
3201- let c = toString(gK.originCaller)
3202- let nl = valueOrElse(getInteger(de, bS), 0)
3203- if ((aQ > nl))
3204- then throw(("Delivery is not available, fund=" + dL(nl, 6)))
3082+ let c = toString(gv.originCaller)
3083+ let mM = valueOrElse(getInteger(cR, bE), 0)
3084+ if ((aA > mM))
3085+ then throw(("Delivery is not available, fund=" + dy(mM, 6)))
32053086 else {
3206- let aA = lastBlock.timestamp
3207- let nm = V(c)
3208- let nn = valueOrElse(getInteger(W(c)), 0)
3209- let no = (aA / a)
3210- let fR = if ((nn == no))
3211- then valueOrElse(getInteger(nm), 0)
3087+ let bW = lastBlock.timestamp
3088+ let mN = L(c)
3089+ let mO = valueOrElse(getInteger(M(c)), 0)
3090+ let mP = (bW / a)
3091+ let fJ = if ((mO == mP))
3092+ then valueOrElse(getInteger(mN), 0)
32123093 else 0
3213- let np = valueOrElse(getInteger(di, d(c)), 0)
3214- let nq = (aR + (np / aS))
3215- if ((fR >= nq))
3216- then throw((("You already used " + toString(nq)) + " delivery attempts for today"))
3094+ let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3095+ let mR = (aE + (mQ / aF))
3096+ if ((fJ >= mR))
3097+ then throw((("You already used " + toString(mR)) + " delivery attempts for today"))
32173098 else {
3218- let nr = U(B)
3219- let ns = invoke(de, "sendDeliveryReward", [c], nil)
3220- $Tuple2([IntegerEntry(nm, (fR + 1)), IntegerEntry(W(c), no), IntegerEntry(nr, (valueOrElse(getInteger(nr), 0) + 1))], ns)
3099+ let mS = K(u)
3100+ let mT = invoke(cR, "sendDeliveryReward", [c], nil)
3101+ $Tuple2([IntegerEntry(mN, (fJ + 1)), IntegerEntry(M(c), mP), IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))], mT)
32213102 }
32223103 }
32233104 }
32243105
32253106
32263107
3227-@Callable(gK)
3228-func prepareRobbery (iQ,iR) = {
3229- let kW = kT(gK)
3230- if (!(sigVerify_8Kb(iQ, iR, cy)))
3231- then throw("signature does not match")
3232- else if ((size(gK.payments) != 1))
3233- then throw("exactly 1 payment must be attached")
3234- else {
3235- let kX = gK.payments[0]
3236- let nt = kX.amount
3237- if (if (!(isDefined(kX.assetId)))
3238- then true
3239- else (value(kX.assetId) != do))
3240- then throw("WLGOLD payments only!")
3108+@Callable(gv)
3109+func robLand (iE,iF) = {
3110+ let kK = kH(gv)
3111+ if ((size(gv.payments) != 1))
3112+ then throw("exactly 1 payment must be attached")
3113+ else {
3114+ let kL = gv.payments[0]
3115+ let mU = kL.amount
3116+ if (if (!(isDefined(kL.assetId)))
3117+ then true
3118+ else (value(kL.assetId) != db))
3119+ then throw("WLGOLD payments only!")
3120+ else if ((mU != aB))
3121+ then throw((("Payment should be " + dy(aB, 8)) + " WLGOLD"))
32413122 else {
3242- let fp = split(toUtf8String(iQ), "|")
3243- if ((2 > size(fp)))
3244- then throw("Wrong message format")
3123+ let c = toString(gv.caller)
3124+ if (!(sigVerify_8Kb(iE, iF, cl)))
3125+ then throw("signature does not match")
32453126 else {
3246- let iZ = if ((size(fp) >= 2))
3247- then fp[2]
3248- else ""
3249- let bQ = toString(gK.caller)
3250- let ja = valueOrElse(getString(dK(bQ)), "")
3251- if ((ja != iZ))
3252- then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
3127+ let fg = split_4C(toUtf8String(iE), ";")
3128+ let mV = split_4C(fg[0], "|")
3129+ let iH = split(mV[es], "_")
3130+ let iI = parseIntValue(iH[0])
3131+ let iJ = parseIntValue(iH[1])
3132+ let iT = mV[et]
3133+ let mW = split(fg[1], "|")
3134+ let mX = mW[eu]
3135+ if ((mX != "B"))
3136+ then throw("Only bank robbery is supported")
32533137 else {
3254- let B = fp[0]
3255- if (kq(B))
3256- then throw("prepareRobbery_checkTournament")
3138+ let iM = parseIntValue(mW[ew])
3139+ if (if ((iM > (lastBlock.timestamp + dL)))
3140+ then true
3141+ else ((lastBlock.timestamp - dL) > iM))
3142+ then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
32573143 else {
3258- let aB = ax(this, B)._1
3259- if ((aB > nt))
3260- then throw(((("Payment " + toString(nt)) + " < required ") + toString(aB)))
3144+ let iN = mW[ev]
3145+ let iO = valueOrElse(getString(dx(c)), "")
3146+ if ((iO != iN))
3147+ then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
32613148 else {
3262- let nu = split(fp[1], "_")
3263- let aA = lastBlock.timestamp
3264- let aC = valueOrElse(getInteger(S(B)), 0)
3265- let aD = valueOrElse(getString(T(B)), "")
3266- let aE = valueOrElse(getInteger(R(aD)), 0)
3267- if (if ((aC != y))
3268- then (aE > aA)
3269- else false)
3270- then throw(("You already started robbing, wait till " + toString(aE)))
3149+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
3150+ let gh = z(u)
3151+ let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
3152+ let mY = fb(lc, iT)
3153+ let le = mY._1
3154+ let lf = mY._2
3155+ let mZ = mY._3
3156+ let je = valueOrElse(getString(bA(u)), ax)
3157+ if (bS(cU, je))
3158+ then throw("Your duck is taking part in the tournament")
32713159 else {
3272- func nv (eR,Q) = {
3273- let nw = valueOrElse(getInteger(P(Q)), 0)
3274- let nx = valueOrElse(getInteger(R(Q)), 0)
3275- if ((nw > size(v)))
3276- then throw("Invalid state")
3277- else if ((aA > nx))
3160+ let bW = lastBlock.timestamp
3161+ let mN = I(c)
3162+ let mO = valueOrElse(getInteger(J(c)), 0)
3163+ let mP = (bW / a)
3164+ let fJ = if ((mO == mP))
3165+ then valueOrElse(getInteger(mN), 0)
3166+ else 0
3167+ let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3168+ let na = (aC + (mQ / aD))
3169+ if ((fJ >= na))
3170+ then throw((("You already used " + toString(na)) + " robbery attempts for today"))
3171+ else {
3172+ let mS = H(u)
3173+ let nb = if ((iJ > 0))
32783174 then {
3279- let ny = valueOrElse(getInteger(bw(Q)), 0)
3280- if ((0 >= ny))
3281- then eR
3282- else {
3283- let gr = value(assetInfo(fromBase58String(Q)))
3284- let jw = split(gr.description, "_")
3285- let ji = dG(jw[dk])
3286- let nz = jh(Q, ji)
3287- let gQ = (aA - ny)
3288- let jz = fraction(gQ, (nz * ji), a)
3289- if ((w > jz))
3290- then eR
3291- else (eR :+ Q)
3292- }
3175+ let mM = assetBalance(this, db)
3176+ let nc = if (mZ)
3177+ then (2 * aB)
3178+ else (5 * aB)
3179+ if ((nc > mM))
3180+ then throw(((("Robbery is not available, funds = " + dy(mM, 8)) + " WLGOLD, required = ") + dy(nc, 8)))
3181+ else [ScriptTransfer(gv.caller, nc, db)]
32933182 }
3294- else eR
3295- }
3296-
3297- let nA = {
3298- let eT = nu
3299- let eU = size(eT)
3300- let eV = nil
3301- func eW (eX,eY) = if ((eY >= eU))
3302- then eX
3303- else nv(eX, eT[eY])
3304-
3305- func eZ (eX,eY) = if ((eY >= eU))
3306- then eX
3307- else throw("List size exceeds 10")
3308-
3309- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3310- }
3311- if ((size(nA) == 0))
3312- then throw("No candidates for robbery")
3313- else {
3314- let nB = dR(size(nA), iQ, iR)
3315- let Q = nA[nB]
3316- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kW), Q)
3183+ else nil
3184+ $Tuple2((((((((((kK ++ nb) ++ (if (lf)
3185+ then [StringEntry(F(u), "0_0_0_0_0")]
3186+ else nil)) ++ jT(u, if ((iJ > 0))
3187+ then Q
3188+ else R)._1) :+ IntegerEntry(G(u), bW)) :+ IntegerEntry(mN, (fJ + 1))) :+ IntegerEntry(J(c), mP)) :+ IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))) :+ StringEntry(gh, le)) :+ IntegerEntry(t(u), max([iJ, 0]))), 0)
33173189 }
33183190 }
33193191 }
33213193 }
33223194 }
33233195 }
3324- }
3325- }
3326-
3327-
3328-
3329-@Callable(gK)
3330-func robLand (iQ,iR) = {
3331- let kW = kT(gK)
3332- if (!(sigVerify_8Kb(iQ, iR, cy)))
3333- then throw("signature does not match")
3334- else {
3335- let bQ = toString(gK.caller)
3336- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3337- let aA = lastBlock.timestamp
3338- $Tuple2((kW :+ IntegerEntry(N(B), aA)), 0)
3339- }
3340- }
3341-
3342-
3343-
3344-@Callable(gK)
3345-func buyRoboDuck () = if (!(cv))
3196+ }
3197+ }
3198+
3199+
3200+
3201+@Callable(gv)
3202+func buyRoboDuck () = if (!(ci))
33463203 then throw("Feature is turned off")
33473204 else {
3348- let kW = kT(gK)
3349- if ((size(gK.payments) != 1))
3205+ let kK = kH(gv)
3206+ if ((size(gv.payments) != 1))
33503207 then throw("Exactly one payment required")
33513208 else {
3352- let kX = value(gK.payments[0])
3353- if ((kX.assetId != cA))
3209+ let kL = value(gv.payments[0])
3210+ if ((kL.assetId != cn))
33543211 then throw("Allowed USDT payment only!")
3355- else if ((kX.amount != ef))
3356- then throw((("Payment attached should be " + dL(ef, 6)) + " USDT"))
3212+ else if ((kL.amount != dR))
3213+ then throw((("Payment attached should be " + dy(dR, 6)) + " USDT"))
33573214 else {
3358- let nC = valueOrElse(getInteger(ey()), 0)
3359- let nD = toBytes(nC)
3360- let eq = ((aH + "-") + takeRight(toBase16String(nD), 8))
3361- let nE = takeRight(toBase16String(sha256_16Kb(nD)), 6)
3362- let iN = Issue(eq, ("Robo Duck NFT for WavesLands game, background color = #" + nE), 1, 0, false)
3363- let bu = calculateAssetId(iN)
3364- $Tuple2(((((kW :+ IntegerEntry(ey(), (nC + 1))) :+ iN) :+ ScriptTransfer(gK.originCaller, 1, bu)) :+ ScriptTransfer(de, kX.amount, cA)), $Tuple2(toBase58String(bu), nE))
3215+ let nd = valueOrElse(getInteger(ek()), 0)
3216+ let ne = toBytes(nd)
3217+ let ec = ((ar + "-") + takeRight(toBase16String(ne), 8))
3218+ let nf = takeRight(toBase16String(sha256_16Kb(ne)), 6)
3219+ let iB = Issue(ec, ("Robo Duck NFT for WavesLands game, background color = #" + nf), 1, 0, false)
3220+ let bg = calculateAssetId(iB)
3221+ $Tuple2(((((kK :+ IntegerEntry(ek(), (nd + 1))) :+ iB) :+ ScriptTransfer(gv.originCaller, 1, bg)) :+ ScriptTransfer(cR, kL.amount, cn)), $Tuple2(toBase58String(bg), nf))
33653222 }
33663223 }
33673224 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 86400000
55
66 func b (c) = ("lastArbTimeUser_" + c)
77
88
99 func d (c) = ("acresStakedAmountByUser_" + c)
1010
1111
1212 let e = 100000000
1313
1414 let f = 3200
1515
1616 let g = 4000
1717
1818 let h = 3
1919
20-let i = 100000000
21-
22-let j = 400
23-
24-let k = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
25-
26-let l = 0
27-
28-let m = 1
29-
30-let n = 2
31-
32-let o = 3
33-
34-let p = 4
35-
36-let q = 0
37-
38-let r = 6
39-
40-let s = 2
41-
42-let t = 2
43-
44-let u = 30
45-
46-let v = [0, 600000, 900000, 43200000, 21600000]
47-
48-let w = 20000000
49-
50-let x = 1
51-
52-let y = 0
53-
54-let z = 1
55-
56-func A (B) = ("duckHealth_" + B)
57-
58-
59-func C (B) = ("duckChars_" + B)
60-
61-
62-func D (B) = ("duckXP_" + B)
63-
64-
65-func E (B) = ("duckLevel_" + B)
66-
67-
68-func F (B) = ("duckFreePoints_" + B)
69-
70-
71-func G (B) = ("duckEquipment_" + B)
72-
73-
74-func H (c) = ("userXP_" + c)
75-
76-
77-func I (c) = ("userLevel_" + c)
78-
79-
80-func J (c) = ("userFreePoints_" + c)
81-
82-
83-func K (B) = ("savedHealth_" + B)
84-
85-
86-func L (B) = ("savedLocation_" + B)
87-
88-
89-func M (B) = ("duckBuffs_" + B)
90-
91-
92-func N (B) = ("lastRobberyTime_" + B)
93-
94-
95-func O (B) = ("lastRobberyCost_" + B)
96-
97-
98-func P (Q) = ("landRobberyState_" + Q)
99-
100-
101-func R (Q) = ("landCooldownETA_" + Q)
102-
103-
104-func S (B) = ("duckRobberyState_" + B)
105-
106-
107-func T (B) = ("lockedLandByDuck_" + B)
108-
109-
110-func U (B) = ("totalDeliveryCountByDuck_" + B)
111-
112-
113-func V (c) = ("userDeliveryCount_" + c)
114-
115-
116-func W (c) = ("userLastDeliveryDay_" + c)
117-
118-
119-let X = 10000
20+let i = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
21+
22+let j = 0
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 0
33+
34+let p = 6
35+
36+let q = 2
37+
38+let r = 2
39+
40+let s = 30
41+
42+func t (u) = ("duckHealth_" + u)
43+
44+
45+func v (u) = ("duckChars_" + u)
46+
47+
48+func w (u) = ("duckXP_" + u)
49+
50+
51+func x (u) = ("duckLevel_" + u)
52+
53+
54+func y (u) = ("duckFreePoints_" + u)
55+
56+
57+func z (u) = ("duckEquipment_" + u)
58+
59+
60+func A (c) = ("userXP_" + c)
61+
62+
63+func B (c) = ("userLevel_" + c)
64+
65+
66+func C (c) = ("userFreePoints_" + c)
67+
68+
69+func D (u) = ("savedHealth_" + u)
70+
71+
72+func E (u) = ("savedLocation_" + u)
73+
74+
75+func F (u) = ("duckBuffs_" + u)
76+
77+
78+func G (u) = ("lastRobberyTime_" + u)
79+
80+
81+func H (u) = ("totalRobberyCountByDuck_" + u)
82+
83+
84+func I (c) = ("userRobberyCount_" + c)
85+
86+
87+func J (c) = ("userLastRobberyDay_" + c)
88+
89+
90+func K (u) = ("totalDeliveryCountByDuck_" + u)
91+
92+
93+func L (c) = ("userDeliveryCount_" + c)
94+
95+
96+func M (c) = ("userLastDeliveryDay_" + c)
97+
98+
99+let N = 10000
100+
101+let O = 10000
102+
103+let P = 2000
104+
105+let Q = 10000
106+
107+let R = 2000
108+
109+let S = 100000
110+
111+let T = 1000000
112+
113+let U = 5000000
114+
115+let V = 10000
116+
117+let W = 1000000
118+
119+let X = 1000000
120120
121121 let Y = 10000
122122
123-let Z = 2000
124-
125-let aa = 100000
126-
127-let ab = 1000000
128-
129-let ac = 5000000
130-
131-let ad = 10000
132-
133-let ae = 1000000
134-
135-let af = 1000000
136-
137-let ag = 10000
138-
139-func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e)
140-
141-
142-func aj (ak) = (100 + ak)
143-
144-
145-func al (am,an) = {
146- let ao = ah(an)
147-[ao, (h * (ao - am))]
148- }
149-
150-
151-func ap (aq,B,ar,as) = {
152- let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_")
153- let au = valueOrElse(getInteger(aq, E(B)), 0)
154- let av = valueOrElse(getInteger(aq, A(B)), aj(au))
155- let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_")
156- ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as)
157- then [ar, ar, ar, ar, ar]
158- else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])]))
159- }
160-
161-
162-func ax (aq,B) = {
163- let ay = valueOrElse(getInteger(aq, O(B)), 0)
164- let az = valueOrElse(getInteger(aq, N(B)), 0)
165- let aA = lastBlock.timestamp
166- let aB = max([i, (ay - (j * (aA - az)))])
167- let aC = valueOrElse(getInteger(aq, S(B)), 0)
168- let aD = valueOrElse(getString(aq, T(B)), "")
169- let aE = valueOrElse(getInteger(aq, R(aD)), 0)
170- $Tuple5(aB, az, aC, aD, aE)
171- }
172-
173-
174-let aF = "LAND"
175-
176-let aG = "DUCK"
177-
178-let aH = "ROBO"
179-
180-let aI = "PRESALE"
181-
182-let aJ = 6
183-
184-let aK = 25
185-
186-let aL = 3456000
187-
188-let aM = 10000000000
189-
190-let aN = "Africa_F_Africa"
191-
192-let aO = 39637
193-
194-let aP = 10
195-
196-let aQ = 50000
197-
198-let aR = 0
199-
200-let aS = 200000000
201-
202-let aT = ["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", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
203-
204-let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
205-
206-let aV = 10000000
207-
208-let aW = [15, 16, 17, 18, 19, 20, 21, 22, 23]
209-
210-let aX = ["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_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
211-
212-let aY = 6
213-
214-let aZ = 8
215-
216-let ba = 9
217-
218-let bb = 10
219-
220-let bc = 10
221-
222-let bd = 0
223-
224-let be = 1
225-
226-let bf = 2
227-
228-let bg = 3
229-
230-let bh = 4
231-
232-let bi = 0
233-
234-let bj = 1
235-
236-let bk = 2
237-
238-let bl = 3
239-
240-let bm = 0
241-
242-let bn = 1
243-
244-let bo = 2
245-
246-let bp = 3
247-
248-let bq = 0
249-
250-let br = 1
251-
252-let bs = 2
253-
254-func bt (bu) = ("no_" + bu)
255-
256-
257-func bv (bu) = ("lcna_" + bu)
258-
259-
260-func bw (bu) = ("st_" + bu)
261-
262-
263-func bx (by,bu) = makeString(["las", by, bu], "_")
264-
265-
266-func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB)
267-
268-
269-func bC (Q) = ("wh_" + Q)
270-
271-
272-func bD (bu) = ("infraLevel_" + bu)
273-
274-
275-func bE (Q) = ("fortifications_" + Q)
276-
277-
278-func bF (bu) = ("duckCustomNameByAssetId_" + bu)
279-
280-
281-func bG (c) = ("accountCustomNameByAddr_" + c)
282-
283-
284-func bH (c) = ("accRefBy_" + c)
285-
286-
287-func bI (B) = ("onboardArtActivatedOnDuck_" + B)
288-
289-
290-func bJ (c) = ("onboardArtActivatedDuckBy_" + c)
291-
292-
293-func bK (c) = ("accReferrals_" + c)
294-
295-
296-func bL (bu) = ("duckOwner_" + bu)
297-
298-
299-func bM (bB) = ("stakedDuckByOwner_" + bB)
300-
301-
302-func bN (B) = ("backPack_" + B)
303-
304-
305-func bO (B) = ("duckLocation_" + B)
306-
307-
308-func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ)
309-
310-
311-func bR () = "emergencyWarehouseProducts"
312-
313-
314-let bS = "deliveryFund"
315-
316-let bT = "%s__lastTourId"
317-
318-func bU (bV) = ("%s%d__tourStaticData__" + toString(bV))
319-
320-
321-func bW (bV) = ("%s%d__tourDynamicData__" + toString(bV))
322-
323-
324-func bX (bV,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bV), B], "__")
325-
326-
327-let bY = 0
328-
329-let bZ = 1
330-
331-let ca = 6
332-
333-let cb = 1
334-
335-func cc (cd,bV) = {
336- let ce = split(valueOrErrorMessage(getString(cd, bU(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
337- let cf = split_4C(valueOrErrorMessage(getString(cd, bW(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
338-[ce, cf]
339- }
340-
341-
342-func cg (cd,ch) = {
343- let ci = valueOrElse(getInteger(cd, bT), 0)
344- let cj = split(ch, "_")
345- let aA = lastBlock.timestamp
346- let ck = cc(cd, ci)
347- let ce = ck[bY]
348- let cf = ck[bZ]
349- if (if (if ((cj[br] == "T"))
350- then (parseIntValue(cj[bq]) == ci)
123+func Z (aa) = fraction(f, pow(aa, 4, g, 4, 4, DOWN), e)
124+
125+
126+func ab (ac) = (100 + ac)
127+
128+
129+func ad (ae,af) = {
130+ let ag = Z(af)
131+[ag, (h * (ag - ae))]
132+ }
133+
134+
135+func ah (ai,u,aj,ak) = {
136+ let al = split(valueOrElse(getString(ai, v(u)), "0_0_0_0_0"), "_")
137+ let am = valueOrElse(getInteger(ai, x(u)), 0)
138+ let an = valueOrElse(getInteger(ai, t(u)), ab(am))
139+ let ao = split(valueOrElse(getString(ai, F(u)), "0_0_0_0_0"), "_")
140+ ([parseIntValue(al[j]), parseIntValue(al[k]), parseIntValue(al[l]), parseIntValue(al[m]), parseIntValue(al[n]), am, an] ++ (if (ak)
141+ then [aj, aj, aj, aj, aj]
142+ else [parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n])]))
143+ }
144+
145+
146+let ap = "LAND"
147+
148+let aq = "DUCK"
149+
150+let ar = "ROBO"
151+
152+let as = "PRESALE"
153+
154+let at = 6
155+
156+let au = 25
157+
158+let av = 3456000
159+
160+let aw = 10000000000
161+
162+let ax = "Africa_F_Africa"
163+
164+let ay = 39637
165+
166+let az = 10
167+
168+let aA = 50000
169+
170+let aB = 100000000
171+
172+let aC = 0
173+
174+let aD = 200000000
175+
176+let aE = 0
177+
178+let aF = 200000000
179+
180+let aG = ["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", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
181+
182+let aH = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
183+
184+let aI = 10000000
185+
186+let aJ = ["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_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
187+
188+let aK = 6
189+
190+let aL = 8
191+
192+let aM = 9
193+
194+let aN = 10
195+
196+let aO = 10
197+
198+let aP = 0
199+
200+let aQ = 1
201+
202+let aR = 2
203+
204+let aS = 3
205+
206+let aT = 4
207+
208+let aU = 0
209+
210+let aV = 1
211+
212+let aW = 2
213+
214+let aX = 3
215+
216+let aY = 0
217+
218+let aZ = 1
219+
220+let ba = 2
221+
222+let bb = 3
223+
224+let bc = 0
225+
226+let bd = 1
227+
228+let be = 2
229+
230+func bf (bg) = ("no_" + bg)
231+
232+
233+func bh (bg) = ("lcna_" + bg)
234+
235+
236+func bi (bg) = ("st_" + bg)
237+
238+
239+func bj (bk,bg) = makeString(["las", bk, bg], "_")
240+
241+
242+func bl (bm,bg,bn) = ((((("sttao_" + bm) + "_") + bg) + "_") + bn)
243+
244+
245+func bo (bp) = ("wh_" + bp)
246+
247+
248+func bq (bg) = ("infraLevel_" + bg)
249+
250+
251+func br (bg) = ("duckCustomNameByAssetId_" + bg)
252+
253+
254+func bs (c) = ("accountCustomNameByAddr_" + c)
255+
256+
257+func bt (c) = ("accRefBy_" + c)
258+
259+
260+func bu (u) = ("onboardArtActivatedOnDuck_" + u)
261+
262+
263+func bv (c) = ("onboardArtActivatedDuckBy_" + c)
264+
265+
266+func bw (c) = ("accReferrals_" + c)
267+
268+
269+func bx (bg) = ("duckOwner_" + bg)
270+
271+
272+func by (bn) = ("stakedDuckByOwner_" + bn)
273+
274+
275+func bz (u) = ("backPack_" + u)
276+
277+
278+func bA (u) = ("duckLocation_" + u)
279+
280+
281+func bB (bC) = ("%s%s__userGwlReleaseTime__" + bC)
282+
283+
284+func bD () = "emergencyWarehouseProducts"
285+
286+
287+let bE = "deliveryFund"
288+
289+let bF = "%s__lastTourId"
290+
291+func bG (bH) = ("%s%d__tourStaticData__" + toString(bH))
292+
293+
294+func bI (bH) = ("%s%d__tourDynamicData__" + toString(bH))
295+
296+
297+func bJ (bH,u) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bH), u], "__")
298+
299+
300+let bK = 0
301+
302+let bL = 1
303+
304+let bM = 6
305+
306+let bN = 1
307+
308+func bO (bP,bH) = {
309+ let bQ = split(valueOrErrorMessage(getString(bP, bG(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
310+ let bR = split_4C(valueOrErrorMessage(getString(bP, bI(bH)), (("Error reading tournament " + toString(bH)) + " data")), "__")
311+[bQ, bR]
312+ }
313+
314+
315+func bS (bP,bT) = {
316+ let bU = valueOrElse(getInteger(bP, bF), 0)
317+ let bV = split(bT, "_")
318+ let bW = lastBlock.timestamp
319+ let bX = bO(bP, bU)
320+ let bQ = bX[bK]
321+ let bR = bX[bL]
322+ if (if (if ((bV[bd] == "T"))
323+ then (parseIntValue(bV[bc]) == bU)
351324 else false)
352- then (cf[cb] == "INPROGRESS")
325+ then (bR[bN] == "INPROGRESS")
353326 else false)
354- then (parseIntValue(ce[ca]) > aA)
327+ then (parseIntValue(bQ[bM]) > bW)
355328 else false
356329 }
357330
358331
359-func cl (cd,ch) = {
360- let ci = valueOrElse(getInteger(cd, bT), 0)
361- let cj = split(ch, "_")
362- let aA = lastBlock.timestamp
363- let ck = cc(cd, ci)
364- let ce = ck[bY]
365- let cf = ck[bZ]
366- let cm = cj[br]
367- if (if (if ((cj[br] == "T"))
368- then (parseIntValue(cj[bq]) == ci)
332+func bY (bP,bT) = {
333+ let bU = valueOrElse(getInteger(bP, bF), 0)
334+ let bV = split(bT, "_")
335+ let bW = lastBlock.timestamp
336+ let bX = bO(bP, bU)
337+ let bQ = bX[bK]
338+ let bR = bX[bL]
339+ let bZ = bV[bd]
340+ if (if (if ((bV[bd] == "T"))
341+ then (parseIntValue(bV[bc]) == bU)
369342 else false)
370- then (cf[cb] == "INPROGRESS")
343+ then (bR[bN] == "INPROGRESS")
371344 else false)
372- then (parseIntValue(ce[ca]) > aA)
345+ then (parseIntValue(bQ[bM]) > bW)
373346 else false
374347 }
375348
376349
377-func cn (co) = (parseIntValue(co[aY]) * aV)
378-
379-
380-func cp (cq,cr,cs) = throw(((((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr) + ", case=") + toString(cs)))
381-
382-
383-let ct = false
384-
385-let cu = false
386-
387-let cv = false
388-
389-let cw = 86400000
390-
391-let cx = take(drop(this.bytes, 1), 1)
392-
393-let cy = {
394- let cz = cx
395- if ((base58'2W' == cz))
396- then if (ct)
350+func ca (cb) = (parseIntValue(cb[aK]) * aI)
351+
352+
353+func cc (cd,ce,cf) = throw(((((("Cheat attempt: oldLoc=" + cd) + ", newLoc=") + ce) + ", case=") + toString(cf)))
354+
355+
356+let cg = false
357+
358+let ch = false
359+
360+let ci = false
361+
362+let cj = 86400000
363+
364+let ck = take(drop(this.bytes, 1), 1)
365+
366+let cl = {
367+ let cm = ck
368+ if ((base58'2W' == cm))
369+ then if (cg)
397370 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
398371 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
399- else if ((base58'2T' == cz))
372+ else if ((base58'2T' == cm))
400373 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
401374 else throw("Unknown chain")
402375 }
403376
404-let cA = {
405- let cz = cx
406- if ((base58'2W' == cz))
377+let cn = {
378+ let cm = ck
379+ if ((base58'2W' == cm))
407380 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
408- else if ((base58'2T' == cz))
381+ else if ((base58'2T' == cm))
409382 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
410383 else throw("Unknown chain")
411384 }
412385
413-let cB = {
414- let cz = cx
415- if ((base58'2W' == cz))
386+let co = {
387+ let cm = ck
388+ if ((base58'2W' == cm))
416389 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
417- else if ((base58'2T' == cz))
390+ else if ((base58'2T' == cm))
418391 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
419392 else throw("Unknown chain")
420393 }
421394
422-let cC = {
423- let cz = cx
424- if ((base58'2W' == cz))
395+let cp = {
396+ let cm = ck
397+ if ((base58'2W' == cm))
425398 then 10000000000
426- else if ((base58'2T' == cz))
399+ else if ((base58'2T' == cm))
427400 then 100000000
428401 else throw("Unknown chain")
429402 }
430403
431-let cD = {
432- let cz = cx
433- if ((base58'2W' == cz))
434- then cw
435- else if ((base58'2T' == cz))
404+let cq = {
405+ let cm = ck
406+ if ((base58'2W' == cm))
407+ then cj
408+ else if ((base58'2T' == cm))
436409 then 60000
437410 else throw("Unknown chain")
438411 }
439412
440-let cE = "__"
441-
442-let cF = 1000000
443-
444-let cG = 100000000
445-
446-let cH = 25
447-
448-let cI = 100
449-
450-let cJ = 225
451-
452-let cK = 400
453-
454-let cL = 625
455-
456-let cM = [0, 1, 2, 3, 4, 5]
457-
458-func cN (cO,cP) = valueOrErrorMessage(getString(cO, cP), makeString(["mandatory ", toString(cO), ".", cP, " is not defined"], ""))
459-
460-
461-let cQ = 1
462-
463-let cR = 2
464-
465-let cS = 3
466-
467-let cT = 4
468-
469-let cU = 7
470-
471-let cV = 8
472-
473-func cW () = "%s__restConfig"
474-
475-
476-func cX () = "%s__restAddr"
477-
478-
479-func cY (cZ) = split_4C(cN(cZ, cW()), cE)
480-
481-
482-func da (db,dc) = valueOrErrorMessage(addressFromString(db[dc]), ("Rest cfg doesn't contain address at index " + toString(dc)))
483-
484-
485-let dd = addressFromStringValue(valueOrElse(getString(this, cX()), cB))
486-
487-let db = cY(dd)
488-
489-let aq = da(db, cQ)
490-
491-let de = da(db, cR)
492-
493-let df = da(db, cS)
494-
495-let dg = da(db, cT)
496-
497-let dh = da(db, cU)
498-
499-let di = da(db, cV)
500-
501-let dj = 0
502-
503-let dk = 1
504-
505-let dl = 2
506-
507-let dm = 3
508-
509-let dn = "wlg_assetId"
510-
511-let do = valueOrErrorMessage(getBinary(dg, dn), "WLGOLD is not issued yet")
512-
513-let dp = "acresAssetId"
514-
515-let dq = valueOrErrorMessage(getBinary(di, dp), "ACRES is not issued yet")
516-
517-let dr = 2
518-
519-func ds (cO) = ("finishBlockFor_" + cO)
520-
521-
522-func dt () = "resTypesProportions"
523-
524-
525-func du (dv) = ("resTypesByContinent_" + dv)
526-
527-
528-func dw (bB) = ("stakedLandsByOwner_" + bB)
529-
530-
531-func dx (bB) = ("stakedPiecesByOwner_" + bB)
532-
533-
534-func dy (dz) = {
535- let cz = dz
536- if ($isInstanceOf(cz, "String"))
413+let cr = "__"
414+
415+let cs = 1000000
416+
417+let ct = 100000000
418+
419+let cu = 25
420+
421+let cv = 100
422+
423+let cw = 225
424+
425+let cx = 400
426+
427+let cy = 625
428+
429+let cz = [0, 1, 2, 3, 4, 5]
430+
431+func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], ""))
432+
433+
434+let cD = 1
435+
436+let cE = 2
437+
438+let cF = 3
439+
440+let cG = 4
441+
442+let cH = 7
443+
444+let cI = 8
445+
446+func cJ () = "%s__restConfig"
447+
448+
449+func cK () = "%s__restAddr"
450+
451+
452+func cL (cM) = split_4C(cA(cM, cJ()), cr)
453+
454+
455+func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP)))
456+
457+
458+let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co))
459+
460+let cO = cL(cQ)
461+
462+let ai = cN(cO, cD)
463+
464+let cR = cN(cO, cE)
465+
466+let cS = cN(cO, cF)
467+
468+let cT = cN(cO, cG)
469+
470+let cU = cN(cO, cH)
471+
472+let cV = cN(cO, cI)
473+
474+let cW = 0
475+
476+let cX = 1
477+
478+let cY = 2
479+
480+let cZ = 3
481+
482+let da = "wlg_assetId"
483+
484+let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet")
485+
486+let dc = "acresAssetId"
487+
488+let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet")
489+
490+let de = 2
491+
492+func df (cB) = ("finishBlockFor_" + cB)
493+
494+
495+func dg () = "resTypesProportions"
496+
497+
498+func dh (di) = ("resTypesByContinent_" + di)
499+
500+
501+func dj (bn) = ("stakedLandsByOwner_" + bn)
502+
503+
504+func dk (bn) = ("stakedPiecesByOwner_" + bn)
505+
506+
507+func dl (dm) = {
508+ let cm = dm
509+ if ($isInstanceOf(cm, "String"))
537510 then {
538- let dA = cz
539- dA
511+ let dn = cm
512+ dn
540513 }
541514 else throw("fail to cast into String")
542515 }
543516
544517
545-func dB (dz) = {
546- let cz = dz
547- if ($isInstanceOf(cz, "Int"))
518+func do (dm) = {
519+ let cm = dm
520+ if ($isInstanceOf(cm, "Int"))
548521 then {
549- let dC = cz
550- dC
522+ let dp = cm
523+ dp
551524 }
552525 else throw("fail to cast into Int")
553526 }
554527
555528
556-func dD (dz) = {
557- let cz = dz
558- if ($isInstanceOf(cz, "List[Any]"))
529+func dq (dm) = {
530+ let cm = dm
531+ if ($isInstanceOf(cm, "List[Any]"))
559532 then {
560- let dE = cz
561- dE
533+ let dr = cm
534+ dr
562535 }
563536 else throw("fail to cast into List[Any]")
564537 }
565538
566539
567-func dF (dz) = {
568- let cz = dz
569- if ($isInstanceOf(cz, "Boolean"))
540+func ds (dm) = {
541+ let cm = dm
542+ if ($isInstanceOf(cm, "Boolean"))
570543 then {
571- let dA = cz
572- dA
544+ let dn = cm
545+ dn
573546 }
574547 else throw("fail to cast into Boolean")
575548 }
576549
577550
578-func dG (dH) = {
579- let cz = dH
580- if (("S" == cz))
581- then cH
582- else if (("M" == cz))
583- then cI
584- else if (("L" == cz))
585- then cJ
586- else if (("XL" == cz))
587- then cK
588- else if (("XXL" == cz))
589- then cL
551+func dt (du) = {
552+ let cm = du
553+ if (("S" == cm))
554+ then cu
555+ else if (("M" == cm))
556+ then cv
557+ else if (("L" == cm))
558+ then cw
559+ else if (("XL" == cm))
560+ then cx
561+ else if (("XXL" == cm))
562+ then cy
590563 else throw("Unknown land size")
591564 }
592565
593566
594-func dI (dA) = isDefined(parseInt(dA))
595-
596-
597-func dJ () = "contractsBlocked"
598-
599-
600-func dK (c) = ("lastTxIdByUser_" + c)
601-
602-
603-func dL (dM,dN) = {
604- let dO = pow(10, 0, dN, 0, 0, DOWN)
605- let dP = toString((dM % dO))
606- let dQ = drop(toString(dO), (1 + size(dP)))
607- (((toString((dM / dO)) + ".") + dQ) + dP)
608- }
609-
610-
611-func dR (dS,dT,dU) = if ((0 >= dS))
567+func dv (dn) = isDefined(parseInt(dn))
568+
569+
570+func dw () = "contractsBlocked"
571+
572+
573+func dx (c) = ("lastTxIdByUser_" + c)
574+
575+
576+func dy (dz,dA) = {
577+ let dB = pow(10, 0, dA, 0, 0, DOWN)
578+ let dC = toString((dz % dB))
579+ let dD = drop(toString(dB), (1 + size(dC)))
580+ (((toString((dz / dB)) + ".") + dD) + dC)
581+ }
582+
583+
584+func dE (dF,dG,dH) = if ((0 >= dF))
612585 then throw("maxValue should be > 0")
613586 else {
614- let dV = sha256((dT + dU))
615- (toInt(dV) % dS)
587+ let dI = sha256((dG + dH))
588+ (toInt(dI) % dF)
616589 }
617590
618591
619-let dW = {
620- let cz = cx
621- if ((base58'2W' == cz))
592+let dJ = {
593+ let cm = ck
594+ if ((base58'2W' == cm))
622595 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
623- else if ((base58'2T' == cz))
596+ else if ((base58'2T' == cm))
624597 then this
625598 else throw("Unknown chain")
626599 }
627600
628-let dX = {
629- let cz = cx
630- if ((base58'2W' == cz))
601+let dK = {
602+ let cm = ck
603+ if ((base58'2W' == cm))
631604 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
632- else if ((base58'2T' == cz))
605+ else if ((base58'2T' == cm))
633606 then this
634607 else throw("Unknown chain")
635608 }
636609
637-let dY = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
638-
639-let dZ = 300000
640-
641-let ea = 5000000
642-
643-let eb = 50
644-
645-let ec = 10000000
646-
647-let ed = {
648- let cz = cx
649- if ((base58'2W' == cz))
610+let dL = 300000
611+
612+let dM = 5000000
613+
614+let dN = 50
615+
616+let dO = 10000000
617+
618+let dP = {
619+ let cm = ck
620+ if ((base58'2W' == cm))
650621 then 252289527462
651- else if ((base58'2T' == cz))
622+ else if ((base58'2T' == cm))
652623 then 2522895274
653624 else throw("Unknown chain")
654625 }
655626
656-let ee = {
657- let cz = cx
658- if ((base58'2W' == cz))
627+let dQ = {
628+ let cm = ck
629+ if ((base58'2W' == cm))
659630 then 250000000
660- else if ((base58'2T' == cz))
631+ else if ((base58'2T' == cm))
661632 then 250000000
662633 else throw("Unknown chain")
663634 }
664635
665-let ef = 100000
666-
667-let eg = 2500000000
668-
669-let eh = toBigInt(5)
670-
671-let ei = toBigInt(20)
672-
673-let ej = toBigInt((20 * 20))
674-
675-let ek = toBigInt(((20 * 20) * 20))
676-
677-let el = toBigInt((((20 * 20) * 20) * 20))
678-
679-let em = toBigInt(((((20 * 20) * 20) * 20) * 20))
680-
681-let en = 500
682-
683-func eo () = "nextLandNum"
684-
685-
686-func ep (eq) = ("lcn_" + eq)
687-
688-
689-func er (es) = ("la_" + es)
690-
691-
692-func et (bu,bB) = ((("ilao_" + bu) + "_") + bB)
693-
694-
695-func eu (es) = ("lo_" + es)
696-
697-
698-func ev (eq) = ("duckByCustomName_" + eq)
699-
700-
701-func ew (eq) = ("accountByCustomName_" + eq)
702-
703-
704-func ex () = "oldiesList"
705-
706-
707-func ey () = "nextRoboDuck"
708-
709-
710-let ez = 0
711-
712-let eA = 1
713-
714-let eB = 2
715-
716-let eC = 0
717-
718-let eD = 5
719-
720-let eE = 6
721-
722-let eF = 7
723-
724-func eG (es,dH) = ((aF + es) + dH)
725-
726-
727-func eH (eI,eJ) = {
728- let eK = if ((eI >= 0))
729- then (((eI + eJ) - 1) / eJ)
730- else -((((-(eI) + eJ) - 1) / eJ))
731- (eK * cG)
732- }
733-
734-
735-func eL (eM,eN) = {
736- let eO = (((((eN[0] + eN[1]) + eN[2]) + eN[3]) + eN[4]) + eN[5])
737- if ((0 >= eO))
636+let dR = 100000
637+
638+let dS = 2500000000
639+
640+let dT = toBigInt(5)
641+
642+let dU = toBigInt(20)
643+
644+let dV = toBigInt((20 * 20))
645+
646+let dW = toBigInt(((20 * 20) * 20))
647+
648+let dX = toBigInt((((20 * 20) * 20) * 20))
649+
650+let dY = toBigInt(((((20 * 20) * 20) * 20) * 20))
651+
652+let dZ = 500
653+
654+func ea () = "nextLandNum"
655+
656+
657+func eb (ec) = ("lcn_" + ec)
658+
659+
660+func ed (ee) = ("la_" + ee)
661+
662+
663+func ef (bg,bn) = ((("ilao_" + bg) + "_") + bn)
664+
665+
666+func eg (ee) = ("lo_" + ee)
667+
668+
669+func eh (ec) = ("duckByCustomName_" + ec)
670+
671+
672+func ei (ec) = ("accountByCustomName_" + ec)
673+
674+
675+func ej () = "oldiesList"
676+
677+
678+func ek () = "nextRoboDuck"
679+
680+
681+let el = 0
682+
683+let em = 1
684+
685+let en = 2
686+
687+let eo = 0
688+
689+let ep = 5
690+
691+let eq = 6
692+
693+let er = 7
694+
695+let es = 0
696+
697+let et = 1
698+
699+let eu = 0
700+
701+let ev = 2
702+
703+let ew = 3
704+
705+func ex (ee,du) = ((ap + ee) + du)
706+
707+
708+func ey (ez,eA) = {
709+ let eB = if ((ez >= 0))
710+ then (((ez + eA) - 1) / eA)
711+ else -((((-(ez) + eA) - 1) / eA))
712+ (eB * ct)
713+ }
714+
715+
716+func eC (eD,eE) = {
717+ let eF = (((((eE[0] + eE[1]) + eE[2]) + eE[3]) + eE[4]) + eE[5])
718+ if ((0 >= eF))
738719 then throw("Zero weights sum")
739720 else {
740- let eP = fraction(eM, cF, eO)
741- func eQ (eR,eS) = (eR :+ fraction(eS, eP, cF))
742-
743- let eT = eN
744- let eU = size(eT)
745- let eV = nil
746- func eW (eX,eY) = if ((eY >= eU))
747- then eX
748- else eQ(eX, eT[eY])
749-
750- func eZ (eX,eY) = if ((eY >= eU))
751- then eX
721+ let eG = fraction(eD, cs, eF)
722+ func eH (eI,eJ) = (eI :+ fraction(eJ, eG, cs))
723+
724+ let eK = eE
725+ let eL = size(eK)
726+ let eM = nil
727+ func eN (eO,eP) = if ((eP >= eL))
728+ then eO
729+ else eH(eO, eK[eP])
730+
731+ func eQ (eO,eP) = if ((eP >= eL))
732+ then eO
752733 else throw("List size exceeds 6")
753734
754- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
755- }
756- }
757-
758-
759-func fa (eM) = {
760- let fb = split(value(getString(dt())), "_")
761- if ((size(fb) != aJ))
735+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
736+ }
737+ }
738+
739+
740+func eR (eD) = {
741+ let eS = split(value(getString(dg())), "_")
742+ if ((size(eS) != at))
762743 then throw("Wrong proportions data")
763744 else {
764- let fc = [parseIntValue(fb[0]), parseIntValue(fb[1]), parseIntValue(fb[2]), parseIntValue(fb[3]), parseIntValue(fb[4]), parseIntValue(fb[5])]
765- eL(eM, fc)
766- }
767- }
768-
769-
770-func fd (fe,ff,fg) = {
771- let fh = fa(fg)
772- func fi (eR,dc) = {
773- let fj = (parseIntValue(ff[dc]) - fh[dc])
774- if ((0 > fj))
775- then throw(((((("Not enough material idx=" + toString(dc)) + ", you have ") + ff[dc]) + ", but need ") + toString(fh[dc])))
776- else (eR :+ toString(fj))
745+ let eT = [parseIntValue(eS[0]), parseIntValue(eS[1]), parseIntValue(eS[2]), parseIntValue(eS[3]), parseIntValue(eS[4]), parseIntValue(eS[5])]
746+ eC(eD, eT)
747+ }
748+ }
749+
750+
751+func eU (eV,eW,eX) = {
752+ let eY = eR(eX)
753+ func eZ (eI,cP) = {
754+ let fa = (parseIntValue(eW[cP]) - eY[cP])
755+ if ((0 > fa))
756+ then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eW[cP]) + ", but need ") + toString(eY[cP])))
757+ else (eI :+ toString(fa))
777758 }
778759
779- if (fe)
760+ if (eV)
780761 then {
781- let eT = cM
782- let eU = size(eT)
783- let eV = nil
784- func eW (eX,eY) = if ((eY >= eU))
785- then eX
786- else fi(eX, eT[eY])
787-
788- func eZ (eX,eY) = if ((eY >= eU))
789- then eX
762+ let eK = cz
763+ let eL = size(eK)
764+ let eM = nil
765+ func eN (eO,eP) = if ((eP >= eL))
766+ then eO
767+ else eZ(eO, eK[eP])
768+
769+ func eQ (eO,eP) = if ((eP >= eL))
770+ then eO
790771 else throw("List size exceeds 6")
791772
792- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
793- }
794- else ff
795- }
796-
797-
798-func fk (fl,fm) = if ((fm == ""))
799- then $Tuple2(fl, false)
773+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
774+ }
775+ else eW
776+ }
777+
778+
779+func fb (fc,fd) = if ((fd == ""))
780+ then $Tuple3(fc, false, false)
800781 else {
801- func fn (eR,fo) = {
802- let fp = split(fo, ",")
803- if ((size(fp) != 2))
782+ func fe (eI,ff) = {
783+ let fg = split(ff, ",")
784+ if ((size(fg) != 2))
804785 then throw("Incorrect format, should be index,amount")
805786 else {
806- let dc = parseIntValue(fp[0])
807- if (if ((0 > dc))
787+ let cP = parseIntValue(fg[0])
788+ if (if ((0 > cP))
808789 then true
809- else (dc >= size(aX)))
790+ else (cP >= size(aJ)))
810791 then throw("Unknown product idx")
811792 else {
812- let fq = parseIntValue(fp[1])
813- let fr = split(eR._1, (fp[0] + ":"))
814- if ((size(fr) != 2))
815- then throw((("You don't have " + aT[dc]) + " equipped"))
793+ let fh = parseIntValue(fg[1])
794+ let fi = split(eI._1, (fg[0] + ":"))
795+ if ((size(fi) != 2))
796+ then throw((("You don't have " + aG[cP]) + " equipped"))
816797 else {
817- let fs = fr[1]
818- let ft = if (dI(take(drop(fs, 1), 1)))
798+ let fj = fi[1]
799+ let fk = if (dv(take(drop(fj, 1), 1)))
819800 then 2
820801 else 1
821- let fu = parseIntValue(take(fs, ft))
822- let fv = drop(fs, ft)
823- let fw = if ((fu >= fq))
824- then (fu - fq)
825- else throw(((((("You equipped " + toString(fu)) + " of ") + aT[dc]) + ", but tried to use ") + toString(fq)))
826- $Tuple2(((((fr[0] + fp[0]) + ":") + toString(fw)) + fv), if (eR._2)
802+ let fl = parseIntValue(take(fj, fk))
803+ let fm = drop(fj, fk)
804+ let fn = if ((fl >= fh))
805+ then (fl - fh)
806+ else throw(((((("You equipped " + toString(fl)) + " of ") + aG[cP]) + ", but tried to use ") + toString(fh)))
807+ $Tuple3(((((fi[0] + fg[0]) + ":") + toString(fn)) + fm), if (eI._2)
827808 then true
828- else if (if ((dc >= 6))
829- then (8 >= dc)
809+ else if (if ((cP >= 6))
810+ then (8 >= cP)
830811 else false)
831- then (fw == 0)
812+ then (fn == 0)
813+ else false, if (eI._3)
814+ then true
815+ else if (if ((cP >= 3))
816+ then (5 >= cP)
817+ else false)
818+ then (fh > 0)
832819 else false)
833820 }
834821 }
835822 }
836823 }
837824
838- let eT = split(fm, "_")
839- let eU = size(eT)
840- let eV = $Tuple2(fl, false)
841- func eW (eX,eY) = if ((eY >= eU))
842- then eX
843- else fn(eX, eT[eY])
844-
845- func eZ (eX,eY) = if ((eY >= eU))
846- then eX
825+ let eK = split(fd, "_")
826+ let eL = size(eK)
827+ let eM = $Tuple3(fc, false, false)
828+ func eN (eO,eP) = if ((eP >= eL))
829+ then eO
830+ else fe(eO, eK[eP])
831+
832+ func eQ (eO,eP) = if ((eP >= eL))
833+ then eO
847834 else throw("List size exceeds 10")
848835
849- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
836+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
850837 }
851838
852839
853-func fx (fy) = {
854- let fz = if ((fy == ""))
840+func fo (fp) = {
841+ let fq = if ((fp == ""))
855842 then nil
856- else split_4C(fy, "_")
857- func fA (eR,co) = {
858- let fB = (size(eR) / 8)
859- let fu = if ((size(fz) > fB))
860- then parseIntValue(fz[fB])
843+ else split_4C(fp, "_")
844+ func fr (eI,cb) = {
845+ let fs = (size(eI) / 8)
846+ let fl = if ((size(fq) > fs))
847+ then parseIntValue(fq[fs])
861848 else 0
862- (eR + toBytes(fu))
849+ (eI + toBytes(fl))
863850 }
864851
865- let eT = aX
866- let eU = size(eT)
867- let eV = base58''
868- func eW (eX,eY) = if ((eY >= eU))
869- then eX
870- else fA(eX, eT[eY])
871-
872- func eZ (eX,eY) = if ((eY >= eU))
873- then eX
852+ let eK = aJ
853+ let eL = size(eK)
854+ let eM = base58''
855+ func eN (eO,eP) = if ((eP >= eL))
856+ then eO
857+ else fr(eO, eK[eP])
858+
859+ func eQ (eO,eP) = if ((eP >= eL))
860+ then eO
874861 else throw("List size exceeds 50")
875862
876- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
877- }
878-
879-
880-func fC (fD) = {
881- func fE (eR,co) = {
882- let fB = size(eR)
883- let fF = take(drop(fD, (8 * fB)), 8)
884- (eR :+ toString(toInt(fF)))
863+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
864+ }
865+
866+
867+func ft (fu) = {
868+ func fv (eI,cb) = {
869+ let fs = size(eI)
870+ let fw = take(drop(fu, (8 * fs)), 8)
871+ (eI :+ toString(toInt(fw)))
885872 }
886873
887874 makeString_2C({
888- let eT = aX
889- let eU = size(eT)
890- let eV = nil
891- func eW (eX,eY) = if ((eY >= eU))
892- then eX
893- else fE(eX, eT[eY])
894-
895- func eZ (eX,eY) = if ((eY >= eU))
896- then eX
875+ let eK = aJ
876+ let eL = size(eK)
877+ let eM = nil
878+ func eN (eO,eP) = if ((eP >= eL))
879+ then eO
880+ else fv(eO, eK[eP])
881+
882+ func eQ (eO,eP) = if ((eP >= eL))
883+ then eO
897884 else throw("List size exceeds 50")
898885
899- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
886+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
900887 }, "_")
901888 }
902889
903890
904-func fG (fH,fI) = {
905- func fJ (eR,fB) = {
906- let fK = if ((size(fH) > (7 + fB)))
907- then fH[(7 + fB)]
891+func fx (fy,fz) = {
892+ func fA (eI,fs) = {
893+ let fB = if ((size(fy) > (7 + fs)))
894+ then fy[(7 + fs)]
908895 else 0
909- if ((parseIntValue(fI[fB]) > (fH[fB] + fK)))
910- then throw(("Requirement not satisfied: " + k[fB]))
896+ if ((parseIntValue(fz[fs]) > (fy[fs] + fB)))
897+ then throw(("Requirement not satisfied: " + i[fs]))
911898 else true
912899 }
913900
914- let eT = [0, 1, 2, 3, 4, 5, 6]
915- let eU = size(eT)
916- let eV = false
917- func eW (eX,eY) = if ((eY >= eU))
918- then eX
919- else fJ(eX, eT[eY])
920-
921- func eZ (eX,eY) = if ((eY >= eU))
922- then eX
901+ let eK = [0, 1, 2, 3, 4, 5, 6]
902+ let eL = size(eK)
903+ let eM = false
904+ func eN (eO,eP) = if ((eP >= eL))
905+ then eO
906+ else fA(eO, eK[eP])
907+
908+ func eQ (eO,eP) = if ((eP >= eL))
909+ then eO
923910 else throw("List size exceeds 7")
924911
925- eZ(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7)
926- }
927-
928-
929-func fL (fM,fz,fN,fH,fO,fP) = {
930- let fp = split(fM, ":")
931- if ((size(fp) != 2))
912+ eQ(eN(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6), 7)
913+ }
914+
915+
916+func fC (fD,fq,fE,fF,fG,fH,fy) = {
917+ let fg = split(fD, ":")
918+ if ((size(fg) != 2))
932919 then throw("Incorrect format, should be index:amount")
933- else if (if (!(fN))
934- then (size(fp[0]) != 2)
920+ else if (if (!(fE))
921+ then (size(fg[0]) != 2)
935922 else false)
936923 then throw("Product idx should be 2 digits, zero padded")
937924 else {
938- let fQ = parseIntValue(fp[0])
939- let fR = parseIntValue(fp[1])
940- if (!(containsElement(aW, fQ)))
941- then throw((("Product '" + aT[fQ]) + "' cannot be used for land defense"))
942- else if ((0 > fR))
925+ let fI = parseIntValue(fg[0])
926+ let fJ = parseIntValue(fg[1])
927+ if (if ((0 > fI))
928+ then true
929+ else (fI >= size(aJ)))
930+ then throw("Unknown product idx")
931+ else if ((0 > fJ))
943932 then throw("Count can't be negative")
944- else if ((fR > u))
945- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
946- else if ((fR == 0))
947- then $Tuple3(fz, fO, fP)
933+ else if ((fJ > s))
934+ then throw(((("Can't put more than " + toString(s)) + " of ") + aG[fI]))
935+ else if ((fJ == 0))
936+ then $Tuple2(fq, false)
948937 else {
949- let fS = take(fz, (8 * fQ))
950- let fu = toInt(take(drop(fz, (8 * fQ)), 8))
951- let fv = drop(fz, (8 * (fQ + 1)))
952- let co = split(aX[fQ], "_")
953- if (if (!(fN))
954- then (fR > fu)
938+ let fK = take(fq, (8 * fI))
939+ let fl = toInt(take(drop(fq, (8 * fI)), 8))
940+ let fm = drop(fq, (8 * (fI + 1)))
941+ let cb = split(aJ[fI], "_")
942+ if (if (!(fE))
943+ then (fJ > fl)
955944 else false)
956- then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
945+ then throw(((((("You have " + toString(fl)) + " of ") + aG[fI]) + ", but tried to use ") + toString(fJ)))
957946 else {
958- let fw = if (if (!(fN))
959- then fG(fH, split(co[ba], ","))
960- else false)
961- then (fu - fR)
962- else (fu + fR)
963- let fT = (eH(fw, bc) - eH(fu, bc))
964- $Tuple3(((fS + toBytes(fw)) + fv), (fO + fT), (fP - fT))
965- }
966- }
967- }
968- }
969-
970-
971-func fU (fM,fz,fN,fV,fW,fX,fH) = {
972- let fp = split(fM, ":")
973- if ((size(fp) != 2))
974- then throw("Incorrect format, should be index:amount")
975- else if (if (!(fN))
976- then (size(fp[0]) != 2)
977- else false)
978- then throw("Product idx should be 2 digits, zero padded")
979- else {
980- let fQ = parseIntValue(fp[0])
981- let fR = parseIntValue(fp[1])
982- if (if ((0 > fQ))
983- then true
984- else (fQ >= size(aX)))
985- then throw("Unknown product idx")
986- else if ((0 > fR))
987- then throw("Count can't be negative")
988- else if ((fR > u))
989- then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
990- else if ((fR == 0))
991- then $Tuple2(fz, false)
992- else {
993- let fS = take(fz, (8 * fQ))
994- let fu = toInt(take(drop(fz, (8 * fQ)), 8))
995- let fv = drop(fz, (8 * (fQ + 1)))
996- let co = split(aX[fQ], "_")
997- if (if (!(fN))
998- then (fR > fu)
999- else false)
1000- then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
1001- else {
1002- let fY = if (if (!(fN))
1003- then fG(fH, split(co[ba], ","))
947+ let fL = if (if (!(fE))
948+ then fx(fy, split(cb[aM], ","))
1004949 else false)
1005950 then {
1006- let fZ = co[bb]
1007- if ((fZ == ""))
951+ let fM = cb[aN]
952+ if ((fM == ""))
1008953 then throw("Item cannot be equipped")
1009954 else {
1010- let ga = parseIntValue(fZ)
1011- let gb = (ga / 100)
1012- if ((fV != gb))
955+ let fN = parseIntValue(fM)
956+ let fO = (fN / 100)
957+ if ((fF != fO))
1013958 then throw("Segment incompatible")
1014959 else {
1015- let gc = ((ga % 100) / 10)
1016- if ((fW != gc))
960+ let fP = ((fN % 100) / 10)
961+ if ((fG != fP))
1017962 then throw("Slot incompatible")
1018963 else {
1019- let gd = (ga % 10)
1020- if (if ((fX != 0))
1021- then (gd > 1)
964+ let fQ = (fN % 10)
965+ if (if ((fH != 0))
966+ then (fQ > 1)
1022967 else false)
1023968 then throw("Big items should occupy slot 0")
1024- else (gd > 1)
969+ else (fQ > 1)
1025970 }
1026971 }
1027972 }
1028973 }
1029974 else false
1030- $Tuple2(((fS + toBytes((fu + (if (fN)
1031- then fR
1032- else -(fR))))) + fv), fY)
975+ $Tuple2(((fK + toBytes((fl + (if (fE)
976+ then fJ
977+ else -(fJ))))) + fm), fL)
1033978 }
1034979 }
1035980 }
1036981 }
1037982
1038983
1039-func ge (gf,gg,fN,fV,fW,gh) = if ((gf != ""))
984+func fR (fS,fT,fE,fF,fG,fU) = if ((fS != ""))
1040985 then {
1041- let gi = split(gf, ",")
1042- if ((size(gi) > t))
986+ let fV = split(fS, ",")
987+ if ((size(fV) > r))
1043988 then throw("Wrong slots format")
1044989 else {
1045- let gj = gi[0]
1046- let gk = if ((size(gi) > 1))
1047- then gi[1]
990+ let fW = fV[0]
991+ let fX = if ((size(fV) > 1))
992+ then fV[1]
1048993 else ""
1049- if (if ((gj == ""))
1050- then (gk == "")
994+ if (if ((fW == ""))
995+ then (fX == "")
1051996 else false)
1052- then gg
997+ then fT
1053998 else {
1054- let gl = if ((gj != ""))
1055- then fU(gj, gg, fN, fV, fW, 0, gh)
1056- else $Tuple2(gg, false)
1057- if ((gk != ""))
1058- then if (gl._2)
999+ let fY = if ((fW != ""))
1000+ then fC(fW, fT, fE, fF, fG, 0, fU)
1001+ else $Tuple2(fT, false)
1002+ if ((fX != ""))
1003+ then if (fY._2)
10591004 then throw("Big item already occupies slot")
1060- else fU(gk, gl._1, fN, fV, fW, 1, gh)._1
1061- else gl._1
1005+ else fC(fX, fY._1, fE, fF, fG, 1, fU)._1
1006+ else fY._1
10621007 }
10631008 }
10641009 }
1065- else gg
1066-
1067-
1068-func gm (gn,go,fN,gh) = {
1069- func fV (eR,gp) = {
1070- let fB = eR._1
1071- let fW = split(gp, ";")
1072- if ((size(fW) != s))
1010+ else fT
1011+
1012+
1013+func fZ (ga,gb,fE,fU) = {
1014+ func fF (eI,gc) = {
1015+ let fs = eI._1
1016+ let fG = split(gc, ";")
1017+ if ((size(fG) != q))
10731018 then throw("Wrong segment format")
10741019 else {
1075- let gq = fW[0]
1076- let gr = fW[1]
1077- if (if ((gq == ""))
1078- then (gr == "")
1020+ let gd = fG[0]
1021+ let ge = fG[1]
1022+ if (if ((gd == ""))
1023+ then (ge == "")
10791024 else false)
1080- then $Tuple2((fB + 1), eR._2)
1025+ then $Tuple2((fs + 1), eI._2)
10811026 else {
1082- let gs = ge(gq, eR._2, fN, fB, 0, gh)
1083- $Tuple2((fB + 1), ge(gr, gs, fN, fB, 1, gh))
1027+ let gf = fR(gd, eI._2, fE, fs, 0, fU)
1028+ $Tuple2((fs + 1), fR(ge, gf, fE, fs, 1, fU))
10841029 }
10851030 }
10861031 }
10871032
1088-( let eT = gn
1089- let eU = size(eT)
1090- let eV = $Tuple2(0, go)
1091- func eW (eX,eY) = if ((eY >= eU))
1092- then eX
1093- else fV(eX, eT[eY])
1094-
1095- func eZ (eX,eY) = if ((eY >= eU))
1096- then eX
1033+( let eK = ga
1034+ let eL = size(eK)
1035+ let eM = $Tuple2(0, gb)
1036+ func eN (eO,eP) = if ((eP >= eL))
1037+ then eO
1038+ else fF(eO, eK[eP])
1039+
1040+ func eQ (eO,eP) = if ((eP >= eL))
1041+ then eO
10971042 else throw("List size exceeds 6")
10981043
1099- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6))._2
1100- }
1101-
1102-
1103-func gt (gn,go,fO,fP,fN,fH) = if ((3 > size(gn)))
1104- then throw("At least duck, mines and traps parts are required")
1105- else {
1106- func fV (eR,gp) = {
1107- let fB = eR._1
1108- if ((fB == 0))
1109- then $Tuple4((fB + 1), eR._2, eR._3, eR._4)
1110- else {
1111- let gu = fL(gp, eR._2, fN, fH, eR._3, eR._4)
1112- $Tuple4((fB + 1), gu._1, gu._2, gu._3)
1113- }
1114- }
1115-
1116- let gv = {
1117- let eT = gn
1118- let eU = size(eT)
1119- let eV = $Tuple4(0, go, fO, fP)
1120- func eW (eX,eY) = if ((eY >= eU))
1121- then eX
1122- else fV(eX, eT[eY])
1123-
1124- func eZ (eX,eY) = if ((eY >= eU))
1125- then eX
1126- else throw("List size exceeds 10")
1127-
1128- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1129- }
1130- $Tuple3(gv._2, gv._3, gv._4)
1131- }
1132-
1133-
1134-func gw (B) = {
1135- let gx = G(B)
1136- let gy = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1137- let gz = gm(gy, dY, true, nil)
1138- let gA = split(gy[q], ";")[1]
1139- let ar = if ((gA == ""))
1044+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6))._2
1045+ }
1046+
1047+
1048+func gg (u) = {
1049+ let gh = z(u)
1050+ let gi = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1051+ let gj = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
1052+ let gk = fZ(gi, gj, true, nil)
1053+ let gl = split(gi[o], ";")[1]
1054+ let aj = if ((gl == ""))
11401055 then 0
11411056 else {
1142- let gB = split(gA, ",")[0]
1143- if ((gB == ""))
1057+ let gm = split(gl, ",")[0]
1058+ if ((gm == ""))
11441059 then 0
11451060 else {
1146- let fM = split(gB, ":")
1147- let dc = fM[0]
1148- let gC = fM[1]
1149- if (if (if (if (if ((dc == "06"))
1061+ let fD = split(gm, ":")
1062+ let cP = fD[0]
1063+ let gn = fD[1]
1064+ if (if (if (if (if ((cP == "06"))
11501065 then true
1151- else (dc == "07"))
1066+ else (cP == "07"))
11521067 then true
1153- else (dc == "08"))
1154- then (gC != "")
1068+ else (cP == "08"))
1069+ then (gn != "")
11551070 else false)
1156- then (parseIntValue(gC) > 0)
1071+ then (parseIntValue(gn) > 0)
11571072 else false)
1158- then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
1073+ then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
11591074 else 0
11601075 }
11611076 }
1162- let gh = ap(this, B, ar, true)
1163- let gD = gm(gy, gz, false, gh)
1164- (gD == gD)
1165- }
1166-
1167-
1168-func gE (gF,gG,gH,gI) = if ((size(gF) != aJ))
1077+ let fU = ah(this, u, aj, true)
1078+ let go = fZ(gi, gk, false, fU)
1079+ (go == go)
1080+ }
1081+
1082+
1083+func gp (gq,gr,gs,gt) = if ((size(gq) != at))
11691084 then throw("Wrong proportions data")
11701085 else {
1171- func gJ (eR,gK) = {
1172- let fj = (parseIntValue(gF[gK]) + ((gI * gG[gK]) * gH))
1173- if ((0 > fj))
1174- then throw(((((((("Panic! Pieces of type=" + toString(gK)) + ", sign=") + toString(gI)) + ", terrainCounts[i]=") + toString(gG[gK])) + ", landSizeIndex=") + toString(gH)))
1175- else (eR :+ toString(fj))
1176- }
1177-
1178- let eT = cM
1179- let eU = size(eT)
1180- let eV = nil
1181- func eW (eX,eY) = if ((eY >= eU))
1182- then eX
1183- else gJ(eX, eT[eY])
1184-
1185- func eZ (eX,eY) = if ((eY >= eU))
1186- then eX
1086+ func gu (eI,gv) = {
1087+ let fa = (parseIntValue(gq[gv]) + ((gt * gr[gv]) * gs))
1088+ if ((0 > fa))
1089+ then throw(((((((("Panic! Pieces of type=" + toString(gv)) + ", sign=") + toString(gt)) + ", terrainCounts[i]=") + toString(gr[gv])) + ", landSizeIndex=") + toString(gs)))
1090+ else (eI :+ toString(fa))
1091+ }
1092+
1093+ let eK = cz
1094+ let eL = size(eK)
1095+ let eM = nil
1096+ func eN (eO,eP) = if ((eP >= eL))
1097+ then eO
1098+ else gu(eO, eK[eP])
1099+
1100+ func eQ (eO,eP) = if ((eP >= eL))
1101+ then eO
11871102 else throw("List size exceeds 6")
11881103
1189- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1104+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
11901105 }
11911106
11921107
1193-func gL (gG,gH,gI) = {
1194- let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
1195- makeString(gE(gF, gG, gH, gI), "_")
1196- }
1197-
1198-
1199-func gM (gN) = [(size(split(gN, "A")) - 1), (size(split(gN, "B")) - 1), (size(split(gN, "C")) - 1), (size(split(gN, "D")) - 1), (size(split(gN, "E")) - 1), (size(split(gN, "F")) - 1)]
1200-
1201-
1202-func gO (gP,gG,gQ,gH,gR) = {
1203- func gS (eR,gK) = {
1204- let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1205- (eR :+ toString((parseIntValue(gP[gK]) + gT)))
1108+func gw (gr,gs,gt) = {
1109+ let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1110+ makeString(gp(gq, gr, gs, gt), "_")
1111+ }
1112+
1113+
1114+func gx (gy) = [(size(split(gy, "A")) - 1), (size(split(gy, "B")) - 1), (size(split(gy, "C")) - 1), (size(split(gy, "D")) - 1), (size(split(gy, "E")) - 1), (size(split(gy, "F")) - 1)]
1115+
1116+
1117+func gz (gA,gr,gB,gs,gC) = {
1118+ func gD (eI,gv) = {
1119+ let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1120+ (eI :+ toString((parseIntValue(gA[gv]) + gE)))
12061121 }
12071122
1208- let fc = {
1209- let eT = cM
1210- let eU = size(eT)
1211- let eV = nil
1212- func eW (eX,eY) = if ((eY >= eU))
1213- then eX
1214- else gS(eX, eT[eY])
1215-
1216- func eZ (eX,eY) = if ((eY >= eU))
1217- then eX
1123+ let eT = {
1124+ let eK = cz
1125+ let eL = size(eK)
1126+ let eM = nil
1127+ func eN (eO,eP) = if ((eP >= eL))
1128+ then eO
1129+ else gD(eO, eK[eP])
1130+
1131+ func eQ (eO,eP) = if ((eP >= eL))
1132+ then eO
12181133 else throw("List size exceeds 6")
12191134
1220- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1135+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
12211136 }
1222- makeString(fc, "_")
1223- }
1224-
1225-
1226-func gU (gG,gQ,gH,gR) = {
1227- func gS (eR,gK) = {
1228- let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1229- $Tuple2((eR._1 :+ gT), (eR._2 + gT))
1137+ makeString(eT, "_")
1138+ }
1139+
1140+
1141+func gF (gr,gB,gs,gC) = {
1142+ func gD (eI,gv) = {
1143+ let gE = ((fraction(gB, gC, a) * gr[gv]) * gs)
1144+ $Tuple2((eI._1 :+ gE), (eI._2 + gE))
12301145 }
12311146
1232- let eT = cM
1233- let eU = size(eT)
1234- let eV = $Tuple2(nil, 0)
1235- func eW (eX,eY) = if ((eY >= eU))
1236- then eX
1237- else gS(eX, eT[eY])
1238-
1239- func eZ (eX,eY) = if ((eY >= eU))
1240- then eX
1147+ let eK = cz
1148+ let eL = size(eK)
1149+ let eM = $Tuple2(nil, 0)
1150+ func eN (eO,eP) = if ((eP >= eL))
1151+ then eO
1152+ else gD(eO, eK[eP])
1153+
1154+ func eQ (eO,eP) = if ((eP >= eL))
1155+ then eO
12411156 else throw("List size exceeds 6")
12421157
1243- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1244- }
1245-
1246-
1247-func gV (gW,gX,gY,gZ) = {
1248- let ha = gY._1
1249- let hb = gY._2
1250- if ((hb == 0))
1251- then $Tuple2(makeString(gW, "_"), makeString(gX, "_"))
1252- else if ((gZ >= hb))
1158+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
1159+ }
1160+
1161+
1162+func gG (gH,gI,gJ,gK) = {
1163+ let gL = gJ._1
1164+ let gM = gJ._2
1165+ if ((gM == 0))
1166+ then $Tuple2(makeString(gH, "_"), makeString(gI, "_"))
1167+ else if ((gK >= gM))
12531168 then {
1254- func hc (eR,gK) = (eR :+ toString((parseIntValue(gW[gK]) + ha[gK])))
1255-
1256- let fc = {
1257- let eT = cM
1258- let eU = size(eT)
1259- let eV = nil
1260- func eW (eX,eY) = if ((eY >= eU))
1261- then eX
1262- else hc(eX, eT[eY])
1263-
1264- func eZ (eX,eY) = if ((eY >= eU))
1265- then eX
1169+ func gN (eI,gv) = (eI :+ toString((parseIntValue(gH[gv]) + gL[gv])))
1170+
1171+ let eT = {
1172+ let eK = cz
1173+ let eL = size(eK)
1174+ let eM = nil
1175+ func eN (eO,eP) = if ((eP >= eL))
1176+ then eO
1177+ else gN(eO, eK[eP])
1178+
1179+ func eQ (eO,eP) = if ((eP >= eL))
1180+ then eO
12661181 else throw("List size exceeds 6")
12671182
1268- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1183+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
12691184 }
1270- $Tuple2(makeString(fc, "_"), makeString(gX, "_"))
1185+ $Tuple2(makeString(eT, "_"), makeString(gI, "_"))
12711186 }
12721187 else {
1273- func hd (eR,gK) = {
1274- let he = fraction(ha[gK], gZ, hb)
1275- $Tuple2((eR._1 :+ toString((parseIntValue(gW[gK]) + he))), (eR._2 :+ toString(((parseIntValue(gX[gK]) + ha[gK]) - he))))
1188+ func gO (eI,gv) = {
1189+ let gP = fraction(gL[gv], gK, gM)
1190+ $Tuple2((eI._1 :+ toString((parseIntValue(gH[gv]) + gP))), (eI._2 :+ toString(((parseIntValue(gI[gv]) + gL[gv]) - gP))))
12761191 }
12771192
1278- let fc = {
1279- let eT = cM
1280- let eU = size(eT)
1281- let eV = $Tuple2(nil, nil)
1282- func eW (eX,eY) = if ((eY >= eU))
1283- then eX
1284- else hd(eX, eT[eY])
1285-
1286- func eZ (eX,eY) = if ((eY >= eU))
1287- then eX
1193+ let eT = {
1194+ let eK = cz
1195+ let eL = size(eK)
1196+ let eM = $Tuple2(nil, nil)
1197+ func eN (eO,eP) = if ((eP >= eL))
1198+ then eO
1199+ else gO(eO, eK[eP])
1200+
1201+ func eQ (eO,eP) = if ((eP >= eL))
1202+ then eO
12881203 else throw("List size exceeds 6")
12891204
1290- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1205+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
12911206 }
1292- $Tuple2(makeString(fc._1, "_"), makeString(fc._2, "_"))
1207+ $Tuple2(makeString(eT._1, "_"), makeString(eT._2, "_"))
12931208 }
12941209 }
12951210
12961211
1297-func hf (hg) = if ((hg >= toBigInt(0)))
1298- then hg
1299- else -(hg)
1300-
1301-
1302-let hh = [[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]]
1303-
1304-func hi (dC,hj) = {
1305- let hk = toInt((dC % ei))
1306- let hl = if ((hj[0] > hk))
1212+func gQ (gR) = if ((gR >= toBigInt(0)))
1213+ then gR
1214+ else -(gR)
1215+
1216+
1217+let gS = [[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]]
1218+
1219+func gT (dp,gU) = {
1220+ let gV = toInt((dp % dU))
1221+ let gW = if ((gU[0] > gV))
13071222 then "A"
1308- else if ((hj[1] > hk))
1223+ else if ((gU[1] > gV))
13091224 then "B"
1310- else if ((hj[2] > hk))
1225+ else if ((gU[2] > gV))
13111226 then "C"
1312- else if ((hj[3] > hk))
1227+ else if ((gU[3] > gV))
13131228 then "D"
1314- else if ((hj[4] > hk))
1229+ else if ((gU[4] > gV))
13151230 then "E"
13161231 else "F"
1317- hl
1318- }
1319-
1320-
1321-func hm (hn,ho) = {
1322- let hp = hh[ho]
1323- func hq (eR,eS) = $Tuple2((((((eR._1 + hi(eR._2, hp)) + hi((eR._2 / ei), hp)) + hi((eR._2 / ej), hp)) + hi((eR._2 / ek), hp)) + hi((eR._2 / el), hp)), (eR._2 / em))
1324-
1325- let gv = {
1326- let eT = [1, 2, 3, 4, 5]
1327- let eU = size(eT)
1328- let eV = $Tuple2("", (hn / eh))
1329- func eW (eX,eY) = if ((eY >= eU))
1330- then eX
1331- else hq(eX, eT[eY])
1332-
1333- func eZ (eX,eY) = if ((eY >= eU))
1334- then eX
1232+ gW
1233+ }
1234+
1235+
1236+func gX (gY,gZ) = {
1237+ let ha = gS[gZ]
1238+ func hb (eI,eJ) = $Tuple2((((((eI._1 + gT(eI._2, ha)) + gT((eI._2 / dU), ha)) + gT((eI._2 / dV), ha)) + gT((eI._2 / dW), ha)) + gT((eI._2 / dX), ha)), (eI._2 / dY))
1239+
1240+ let hc = {
1241+ let eK = [1, 2, 3, 4, 5]
1242+ let eL = size(eK)
1243+ let eM = $Tuple2("", (gY / dT))
1244+ func eN (eO,eP) = if ((eP >= eL))
1245+ then eO
1246+ else hb(eO, eK[eP])
1247+
1248+ func eQ (eO,eP) = if ((eP >= eL))
1249+ then eO
13351250 else throw("List size exceeds 5")
13361251
1337- eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
1252+ eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
13381253 }
1339- gv._1
1340- }
1341-
1342-
1343-let hr = [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]
1344-
1345-let hs = ["A", "B", "C", "D", "E", "F"]
1346-
1347-func ht (hu,gH) = {
1348- func hv (eR,dA) = {
1349- let fB = eR._2
1350- let hw = parseIntValue(dA)
1351- let hg = if ((hw == 0))
1254+ hc._1
1255+ }
1256+
1257+
1258+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]
1259+
1260+let he = ["A", "B", "C", "D", "E", "F"]
1261+
1262+func hf (hg,gs) = {
1263+ func hh (eI,dn) = {
1264+ let fs = eI._2
1265+ let hi = parseIntValue(dn)
1266+ let gR = if ((hi == 0))
13521267 then 0
1353- else if ((hw >= (4 * gH)))
1354- then (hw / gH)
1355- else if ((hw > (3 * gH)))
1268+ else if ((hi >= (4 * gs)))
1269+ then (hi / gs)
1270+ else if ((hi > (3 * gs)))
13561271 then 3
1357- else (((hw - 1) / gH) + 1)
1358- $Tuple3((eR._1 :+ hg), (eR._2 + 1), (eR._3 + hg))
1272+ else (((hi - 1) / gs) + 1)
1273+ $Tuple3((eI._1 :+ gR), (eI._2 + 1), (eI._3 + gR))
13591274 }
13601275
1361- let gv = {
1362- let eT = hu
1363- let eU = size(eT)
1364- let eV = $Tuple3(nil, 0, 0)
1365- func eW (eX,eY) = if ((eY >= eU))
1366- then eX
1367- else hv(eX, eT[eY])
1368-
1369- func eZ (eX,eY) = if ((eY >= eU))
1370- then eX
1276+ let hc = {
1277+ let eK = hg
1278+ let eL = size(eK)
1279+ let eM = $Tuple3(nil, 0, 0)
1280+ func eN (eO,eP) = if ((eP >= eL))
1281+ then eO
1282+ else hh(eO, eK[eP])
1283+
1284+ func eQ (eO,eP) = if ((eP >= eL))
1285+ then eO
13711286 else throw("List size exceeds 6")
13721287
1373- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1288+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
13741289 }
1375- let hx = gv._1
1376- let hy = value(indexOf(hx, max(hx)))
1377- let hz = (gv._3 - 25)
1378- func hA (eR,dc) = {
1379- let dM = if ((dc == hy))
1380- then (hx[dc] - hz)
1381- else hx[dc]
1382- let dQ = if ((dM == 0))
1290+ let hj = hc._1
1291+ let hk = value(indexOf(hj, max(hj)))
1292+ let hl = (hc._3 - 25)
1293+ func hm (eI,cP) = {
1294+ let dz = if ((cP == hk))
1295+ then (hj[cP] - hl)
1296+ else hj[cP]
1297+ let dD = if ((dz == 0))
13831298 then nil
1384- else split(drop(toString(pow(10, 0, dM, 0, 0, DOWN)), 1), "")
1385- let ga = hs[dc]
1386- func hB (hC,hD) = (hC :+ ga)
1387-
1388- let hE = {
1389- let eT = dQ
1390- let eU = size(eT)
1391- let eV = nil
1392- func hF (eX,eY) = if ((eY >= eU))
1393- then eX
1394- else hB(eX, eT[eY])
1395-
1396- func hG (eX,eY) = if ((eY >= eU))
1397- then eX
1299+ else split(drop(toString(pow(10, 0, dz, 0, 0, DOWN)), 1), "")
1300+ let fN = he[cP]
1301+ func hn (ho,hp) = (ho :+ fN)
1302+
1303+ let hq = {
1304+ let eK = dD
1305+ let eL = size(eK)
1306+ let eM = nil
1307+ func hr (eO,eP) = if ((eP >= eL))
1308+ then eO
1309+ else hn(eO, eK[eP])
1310+
1311+ func hs (eO,eP) = if ((eP >= eL))
1312+ then eO
13981313 else throw("List size exceeds 25")
13991314
1400- hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eV, 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)
1401- }
1402- (eR ++ hE)
1315+ 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(eM, 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)
1316+ }
1317+ (eI ++ hq)
14031318 }
14041319
1405- let fc = {
1406- let eT = cM
1407- let eU = size(eT)
1408- let eV = nil
1409- func hF (eX,eY) = if ((eY >= eU))
1410- then eX
1411- else hA(eX, eT[eY])
1412-
1413- func hG (eX,eY) = if ((eY >= eU))
1414- then eX
1320+ let eT = {
1321+ let eK = cz
1322+ let eL = size(eK)
1323+ let eM = nil
1324+ func hr (eO,eP) = if ((eP >= eL))
1325+ then eO
1326+ else hm(eO, eK[eP])
1327+
1328+ func hs (eO,eP) = if ((eP >= eL))
1329+ then eO
14151330 else throw("List size exceeds 6")
14161331
1417- hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
1332+ hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
14181333 }
1419- func hH (eR,fB) = (eR + fc[fB])
1420-
1421- let eT = hr
1422- let eU = size(eT)
1423- let eV = ""
1424- func hI (eX,eY) = if ((eY >= eU))
1425- then eX
1426- else hH(eX, eT[eY])
1427-
1428- func hJ (eX,eY) = if ((eY >= eU))
1429- then eX
1334+ func ht (eI,fs) = (eI + eT[fs])
1335+
1336+ let eK = hd
1337+ let eL = size(eK)
1338+ let eM = ""
1339+ func hu (eO,eP) = if ((eP >= eL))
1340+ then eO
1341+ else ht(eO, eK[eP])
1342+
1343+ func hv (eO,eP) = if ((eP >= eL))
1344+ then eO
14301345 else throw("List size exceeds 25")
14311346
1432- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
1433- }
1434-
1435-
1436-func hK (hL) = {
1437- let gu = split(valueOrElse(getString(hL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1438-[toString(valueOrElse(parseInt(gu[bm]), 0)), if ((size(split(gu[bn], "_")) == aJ))
1439- then gu[bn]
1440- else "0_0_0_0_0_0", if ((size(split(gu[bo], "_")) == aJ))
1441- then gu[bo]
1442- else "0_0_0_0_0_0", gu[bp]]
1443- }
1444-
1445-
1446-func hM (hN) = {
1447- let fp = split(hN, "_")
1448- ((aM * (parseIntValue(fp[1]) + 1)) * parseIntValue(fp[0]))
1449- }
1450-
1451-
1452-func hO (hP) = {
1453- let hQ = hP[bg]
1454- func hR (eR,hS) = (eR + parseIntValue(hS))
1455-
1456- func hT (eR,hS) = {
1457- let dc = eR._1
1458- let eK = (((parseIntValue(hS) + bc) - 1) / bc)
1459- $Tuple2((dc + 1), (eR._2 + (eK * cG)))
1347+ 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(eM, 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)
1348+ }
1349+
1350+
1351+func hw (hx) = {
1352+ let hy = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1353+[toString(valueOrElse(parseInt(hy[aY]), 0)), if ((size(split(hy[aZ], "_")) == at))
1354+ then hy[aZ]
1355+ else "0_0_0_0_0_0", if ((size(split(hy[ba], "_")) == at))
1356+ then hy[ba]
1357+ else "0_0_0_0_0_0", hy[bb]]
1358+ }
1359+
1360+
1361+func hz (hA) = {
1362+ let fg = split(hA, "_")
1363+ ((aw * (parseIntValue(fg[1]) + 1)) * parseIntValue(fg[0]))
1364+ }
1365+
1366+
1367+func hB (hC) = {
1368+ let hD = hC[aS]
1369+ func hE (eI,hF) = (eI + parseIntValue(hF))
1370+
1371+ func hG (eI,hF) = {
1372+ let cP = eI._1
1373+ let eB = (((parseIntValue(hF) + aO) - 1) / aO)
1374+ $Tuple2((cP + 1), (eI._2 + (eB * ct)))
14601375 }
14611376
1462- let hU = {
1463- let eT = split(hP[be], "_")
1464- let eU = size(eT)
1465- let eV = 0
1466- func eW (eX,eY) = if ((eY >= eU))
1467- then eX
1468- else hR(eX, eT[eY])
1469-
1470- func eZ (eX,eY) = if ((eY >= eU))
1471- then eX
1377+ let hH = {
1378+ let eK = split(hC[aQ], "_")
1379+ let eL = size(eK)
1380+ let eM = 0
1381+ func eN (eO,eP) = if ((eP >= eL))
1382+ then eO
1383+ else hE(eO, eK[eP])
1384+
1385+ func eQ (eO,eP) = if ((eP >= eL))
1386+ then eO
14721387 else throw("List size exceeds 6")
14731388
1474- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1389+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
14751390 }
1476- let hV = {
1477- let eT = split(hP[bf], "_")
1478- let eU = size(eT)
1479- let eV = 0
1480- func hF (eX,eY) = if ((eY >= eU))
1481- then eX
1482- else hR(eX, eT[eY])
1483-
1484- func hG (eX,eY) = if ((eY >= eU))
1485- then eX
1391+ let hI = {
1392+ let eK = split(hC[aR], "_")
1393+ let eL = size(eK)
1394+ let eM = 0
1395+ func hr (eO,eP) = if ((eP >= eL))
1396+ then eO
1397+ else hE(eO, eK[eP])
1398+
1399+ func hs (eO,eP) = if ((eP >= eL))
1400+ then eO
14861401 else throw("List size exceeds 6")
14871402
1488- hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
1403+ hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
14891404 }
1490- let hW = if ((hQ == ""))
1405+ let hJ = if ((hD == ""))
14911406 then 0
1492- else ( let eT = split_4C(hQ, "_")
1493- let eU = size(eT)
1494- let eV = $Tuple2(0, 0)
1495- func hI (eX,eY) = if ((eY >= eU))
1496- then eX
1497- else hT(eX, eT[eY])
1498-
1499- func hJ (eX,eY) = if ((eY >= eU))
1500- then eX
1407+ else ( let eK = split_4C(hD, "_")
1408+ let eL = size(eK)
1409+ let eM = $Tuple2(0, 0)
1410+ func hu (eO,eP) = if ((eP >= eL))
1411+ then eO
1412+ else hG(eO, eK[eP])
1413+
1414+ func hv (eO,eP) = if ((eP >= eL))
1415+ then eO
15011416 else throw("List size exceeds 50")
15021417
1503- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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
1504- ((hU + hV) + hW)
1505- }
1506-
1507-
1508-func hX (hY,hZ,ia) = {
1509- let hN = ((toString(hZ) + "_") + toString(ia))
1510- let ib = hM(hN)
1511- let ic = valueOrElse(getString(hY), (hN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1512- let id = split_4C(ic, ":")
1513- let ie = hO(id)
1514- let if = if ((5 > size(id)))
1515- then makeString(["0", toString(ie), toString((ib - ie)), toString(ib)], "_")
1418+ 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(eM, 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
1419+ ((hH + hI) + hJ)
1420+ }
1421+
1422+
1423+func hK (hL,hM,hN) = {
1424+ let hA = ((toString(hM) + "_") + toString(hN))
1425+ let hO = hz(hA)
1426+ let hP = valueOrElse(getString(hL), (hA + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1427+ let hQ = split_4C(hP, ":")
1428+ let hR = hB(hQ)
1429+ let hS = if ((5 > size(hQ)))
1430+ then makeString(["0", toString(hR), toString((hO - hR)), toString(hO)], "_")
15161431 else {
1517- let ig = split(id[bh], "_")
1518- let ih = parseIntValue(ig[bi])
1519- let ii = if ((size(ig) > 1))
1520- then parseIntValue(ig[bj])
1521- else ie
1522- makeString([toString(ih), toString(ii), toString(((ib - ih) - ii)), toString(ib)], "_")
1523- }
1524-[id[bd], if ((size(split(id[be], "_")) == aJ))
1525- then id[be]
1526- else "0_0_0_0_0_0", if ((size(split(id[bf], "_")) == aJ))
1527- then id[bf]
1528- else "0_0_0_0_0_0", id[bg], if]
1529- }
1530-
1531-
1532-func ij (hP) = {
1533- let ik = hO(hP)
1534- let il = parseIntValue(split(hP[bh], "_")[bi])
1535- ((hM(hP[bd]) - ik) - il)
1536- }
1537-
1538-
1539-func im (in,hP,io) = if ((size(in) != 3))
1432+ let hT = split(hQ[aT], "_")
1433+ let hU = parseIntValue(hT[aU])
1434+ let hV = if ((size(hT) > 1))
1435+ then parseIntValue(hT[aV])
1436+ else hR
1437+ makeString([toString(hU), toString(hV), toString(((hO - hU) - hV)), toString(hO)], "_")
1438+ }
1439+[hQ[aP], if ((size(split(hQ[aQ], "_")) == at))
1440+ then hQ[aQ]
1441+ else "0_0_0_0_0_0", if ((size(split(hQ[aR], "_")) == at))
1442+ then hQ[aR]
1443+ else "0_0_0_0_0_0", hQ[aS], hS]
1444+ }
1445+
1446+
1447+func hW (hC) = {
1448+ let hX = hB(hC)
1449+ let hY = parseIntValue(split(hC[aT], "_")[aU])
1450+ ((hz(hC[aP]) - hX) - hY)
1451+ }
1452+
1453+
1454+func hZ (ia,hC,ib) = if ((size(ia) != 3))
15401455 then throw("cargoListStr should contain exactly 2 ':' separators")
15411456 else {
1542- let ip = split(in[0], "_")
1543- let iq = split(in[1], "_")
1544- let ir = if ((in[2] == ""))
1457+ let ic = split(ia[0], "_")
1458+ let id = split(ia[1], "_")
1459+ let ie = if ((ia[2] == ""))
15451460 then nil
1546- else split_4C(in[2], "_")
1547- if ((size(ip) != aJ))
1461+ else split_4C(ia[2], "_")
1462+ if ((size(ic) != at))
15481463 then throw("All 6 resources should be passed")
1549- else if ((size(iq) != aJ))
1464+ else if ((size(id) != at))
15501465 then throw("All 6 materials should be passed")
15511466 else {
1552- let gZ = ij(hP)
1553- let is = split(hP[be], "_")
1554- let it = split(hP[bf], "_")
1555- let iu = if ((hP[bg] == ""))
1467+ let gK = hW(hC)
1468+ let if = split(hC[aQ], "_")
1469+ let ig = split(hC[aR], "_")
1470+ let ih = if ((hC[aS] == ""))
15561471 then nil
1557- else split_4C(hP[bg], "_")
1558- let gX = split(io[bn], "_")
1559- let iv = split(io[bo], "_")
1560- let iw = if ((io[bp] == ""))
1472+ else split_4C(hC[aS], "_")
1473+ let gI = split(ib[aZ], "_")
1474+ let ii = split(ib[ba], "_")
1475+ let ij = if ((ib[bb] == ""))
15611476 then nil
1562- else split_4C(io[bp], "_")
1563- func ix (eR,hS) = {
1564- let gK = eR._1
1565- let iy = parseIntValue(hS)
1566- let iz = parseIntValue(is[gK])
1567- let iA = parseIntValue(gX[gK])
1568- if ((iy == 0))
1569- then $Tuple4((gK + 1), (eR._2 :+ is[gK]), (eR._3 :+ gX[gK]), eR._4)
1570- else if ((iy > 0))
1571- then if ((iy > iA))
1572- then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iA)) + " available"))
1573- else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
1574- else if ((-(iy) > iz))
1575- then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iz)) + " available"))
1576- else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
1477+ else split_4C(ib[bb], "_")
1478+ func ik (eI,hF) = {
1479+ let gv = eI._1
1480+ let il = parseIntValue(hF)
1481+ let im = parseIntValue(if[gv])
1482+ let in = parseIntValue(gI[gv])
1483+ if ((il == 0))
1484+ then $Tuple4((gv + 1), (eI._2 :+ if[gv]), (eI._3 :+ gI[gv]), eI._4)
1485+ else if ((il > 0))
1486+ then if ((il > in))
1487+ then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(in)) + " available"))
1488+ else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
1489+ else if ((-(il) > im))
1490+ then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(im)) + " available"))
1491+ else $Tuple4((gv + 1), (eI._2 :+ toString((im + il))), (eI._3 :+ toString((in - il))), (eI._4 + il))
15771492 }
15781493
1579- let fc = {
1580- let eT = ip
1581- let eU = size(eT)
1582- let eV = $Tuple4(0, nil, nil, 0)
1583- func eW (eX,eY) = if ((eY >= eU))
1584- then eX
1585- else ix(eX, eT[eY])
1586-
1587- func eZ (eX,eY) = if ((eY >= eU))
1588- then eX
1494+ let eT = {
1495+ let eK = ic
1496+ let eL = size(eK)
1497+ let eM = $Tuple4(0, nil, nil, 0)
1498+ func eN (eO,eP) = if ((eP >= eL))
1499+ then eO
1500+ else ik(eO, eK[eP])
1501+
1502+ func eQ (eO,eP) = if ((eP >= eL))
1503+ then eO
15891504 else throw("List size exceeds 6")
15901505
1591- eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1506+ eQ(eN(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5), 6)
15921507 }
1593- func iB (eR,hS) = {
1594- let gK = eR._1
1595- let iy = parseIntValue(hS)
1596- let iC = parseIntValue(it[gK])
1597- let iD = parseIntValue(iv[gK])
1598- if ((iy == 0))
1599- then $Tuple4((gK + 1), (eR._2 :+ it[gK]), (eR._3 :+ iv[gK]), eR._4)
1600- else if ((iy > 0))
1601- then if ((iy > iD))
1602- then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iD)) + " available"))
1603- else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
1604- else if ((-(iy) > iC))
1605- then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iC)) + " available"))
1606- else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
1508+ func io (eI,hF) = {
1509+ let gv = eI._1
1510+ let il = parseIntValue(hF)
1511+ let ip = parseIntValue(ig[gv])
1512+ let iq = parseIntValue(ii[gv])
1513+ if ((il == 0))
1514+ then $Tuple4((gv + 1), (eI._2 :+ ig[gv]), (eI._3 :+ ii[gv]), eI._4)
1515+ else if ((il > 0))
1516+ then if ((il > iq))
1517+ then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(iq)) + " available"))
1518+ else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
1519+ else if ((-(il) > ip))
1520+ then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(ip)) + " available"))
1521+ else $Tuple4((gv + 1), (eI._2 :+ toString((ip + il))), (eI._3 :+ toString((iq - il))), (eI._4 + il))
16071522 }
16081523
1609- let gq = {
1610- let eT = iq
1611- let eU = size(eT)
1612- let eV = $Tuple4(0, nil, nil, fc._4)
1613- func hF (eX,eY) = if ((eY >= eU))
1614- then eX
1615- else iB(eX, eT[eY])
1616-
1617- func hG (eX,eY) = if ((eY >= eU))
1618- then eX
1524+ let gd = {
1525+ let eK = id
1526+ let eL = size(eK)
1527+ let eM = $Tuple4(0, nil, nil, eT._4)
1528+ func hr (eO,eP) = if ((eP >= eL))
1529+ then eO
1530+ else io(eO, eK[eP])
1531+
1532+ func hs (eO,eP) = if ((eP >= eL))
1533+ then eO
16191534 else throw("List size exceeds 6")
16201535
1621- hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
1536+ hs(hr(hr(hr(hr(hr(hr(eM, 0), 1), 2), 3), 4), 5), 6)
16221537 }
1623- func iE (eR,hS) = {
1624- let gK = eR._1
1625- let iy = parseIntValue(hS)
1626- let iF = if ((size(iu) > gK))
1627- then parseIntValue(iu[gK])
1538+ func ir (eI,hF) = {
1539+ let gv = eI._1
1540+ let il = parseIntValue(hF)
1541+ let is = if ((size(ih) > gv))
1542+ then parseIntValue(ih[gv])
16281543 else 0
1629- let iG = if ((size(iw) > gK))
1630- then parseIntValue(iw[gK])
1544+ let it = if ((size(ij) > gv))
1545+ then parseIntValue(ij[gv])
16311546 else 0
1632- if ((iy == 0))
1633- then $Tuple4((gK + 1), (eR._2 :+ toString(iF)), (eR._3 :+ toString(iG)), eR._4)
1634- else if ((iy > 0))
1635- then if ((iy > iG))
1636- then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iG)) + " available"))
1547+ if ((il == 0))
1548+ then $Tuple4((gv + 1), (eI._2 :+ toString(is)), (eI._3 :+ toString(it)), eI._4)
1549+ else if ((il > 0))
1550+ then if ((il > it))
1551+ then throw((((("Attempt to take " + hF) + " from backpack, but only ") + toString(it)) + " available"))
16371552 else {
1638- let fT = (eH((iF + iy), bc) - eH(iF, bc))
1639- $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
1553+ let iu = (ey((is + il), aO) - ey(is, aO))
1554+ $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
16401555 }
1641- else if ((-(iy) > iF))
1642- then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iF)) + " available"))
1556+ else if ((-(il) > is))
1557+ then throw((((("Attempt to take " + toString(-(il))) + " from warehouse, but only ") + toString(is)) + " available"))
16431558 else {
1644- let fT = (eH((iF + iy), bc) - eH(iF, bc))
1645- $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
1559+ let iu = (ey((is + il), aO) - ey(is, aO))
1560+ $Tuple4((gv + 1), (eI._2 :+ toString((is + il))), (eI._3 :+ toString((it - il))), (eI._4 + iu))
16461561 }
16471562 }
16481563
1649- let gu = if ((size(ir) != 0))
1564+ let hy = if ((size(ie) != 0))
16501565 then {
1651- let eT = ir
1652- let eU = size(eT)
1653- let eV = $Tuple4(0, nil, nil, gq._4)
1654- func hI (eX,eY) = if ((eY >= eU))
1655- then eX
1656- else iE(eX, eT[eY])
1657-
1658- func hJ (eX,eY) = if ((eY >= eU))
1659- then eX
1566+ let eK = ie
1567+ let eL = size(eK)
1568+ let eM = $Tuple4(0, nil, nil, gd._4)
1569+ func hu (eO,eP) = if ((eP >= eL))
1570+ then eO
1571+ else ir(eO, eK[eP])
1572+
1573+ func hv (eO,eP) = if ((eP >= eL))
1574+ then eO
16601575 else throw("List size exceeds 50")
16611576
1662- hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
1577+ 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(eM, 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)
16631578 }
1664- else $Tuple4(0, iu, iw, gq._4)
1665- let iH = gu._4
1666- if ((iH > gZ))
1667- then throw((((("Attempt to put total " + toString(iH)) + " stuff, but only ") + toString(gZ)) + " warehouse space left"))
1668- else $Tuple7(makeString(fc._2, "_"), makeString(gq._2, "_"), makeString_2C(gu._2, "_"), makeString(fc._3, "_"), makeString(gq._3, "_"), makeString_2C(gu._3, "_"), iH)
1579+ else $Tuple4(0, ih, ij, gd._4)
1580+ let iv = hy._4
1581+ if ((iv > gK))
1582+ then throw((((("Attempt to put total " + toString(iv)) + " stuff, but only ") + toString(gK)) + " warehouse space left"))
1583+ else $Tuple7(makeString(eT._2, "_"), makeString(gd._2, "_"), makeString_2C(hy._2, "_"), makeString(eT._3, "_"), makeString(gd._3, "_"), makeString_2C(hy._3, "_"), iv)
16691584 }
16701585 }
16711586
16721587
1673-func iI (iJ,iK) = {
1674- let bQ = toString(iJ)
1675- let iL = hf(toBigInt(iK))
1676- let iM = valueOrElse(getInteger(eo()), (en + 1))
1677- let es = toString(iM)
1678- let ho = toInt((iL % eh))
1679- let gN = hm(iL, ho)
1680- let dv = aU[ho]
1681- let iN = Issue(eG(es, "S"), makeString([es, "S", gN, dv], "_"), 1, 0, false)
1682- let bu = calculateAssetId(iN)
1683- let iO = toBase58String(bu)
1684- $Tuple2([IntegerEntry(eo(), (iM + 1)), iN, StringEntry(er(es), iO), StringEntry(bt(iO), bQ), StringEntry(eu(es), bQ), IntegerEntry(bD(iO), 0), IntegerEntry(et(iO, bQ), 0), ScriptTransfer(iJ, 1, bu)], $Tuple2(iO, dv))
1685- }
1686-
1687-
1688-func iP (bQ,iQ,iR) = if (!(sigVerify_8Kb(iQ, iR, cy)))
1588+func iw (ix,iy) = {
1589+ let bC = toString(ix)
1590+ let iz = gQ(toBigInt(iy))
1591+ let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1592+ let ee = toString(iA)
1593+ let gZ = toInt((iz % dT))
1594+ let gy = gX(iz, gZ)
1595+ let di = aH[gZ]
1596+ let iB = Issue(ex(ee, "S"), makeString([ee, "S", gy, di], "_"), 1, 0, false)
1597+ let bg = calculateAssetId(iB)
1598+ let iC = toBase58String(bg)
1599+ $Tuple2([IntegerEntry(ea(), (iA + 1)), iB, StringEntry(ed(ee), iC), StringEntry(bf(iC), bC), StringEntry(eg(ee), bC), IntegerEntry(bq(iC), 0), IntegerEntry(ef(iC, bC), 0), ScriptTransfer(ix, 1, bg)], $Tuple2(iC, di))
1600+ }
1601+
1602+
1603+func iD (bC,iE,iF) = if (!(sigVerify_8Kb(iE, iF, cl)))
16891604 then throw("signature does not match")
16901605 else {
1691- let fp = split_4C(toUtf8String(iQ), ";")
1692- let iS = split_4C(fp[0], "|")
1693- let iT = split(iS[eC], "_")
1694- let iU = parseIntValue(iT[0])
1695- let iV = parseIntValue(iT[1])
1696- let iW = split(fp[1], ":")
1697- let iX = iW[0]
1698- let iY = parseIntValue(iS[eD])
1699- if (if ((iY > (lastBlock.timestamp + dZ)))
1606+ let fg = split_4C(toUtf8String(iE), ";")
1607+ let iG = split_4C(fg[0], "|")
1608+ let iH = split(iG[eo], "_")
1609+ let iI = parseIntValue(iH[0])
1610+ let iJ = parseIntValue(iH[1])
1611+ let iK = split(fg[1], ":")
1612+ let iL = iK[0]
1613+ let iM = parseIntValue(iG[ep])
1614+ if (if ((iM > (lastBlock.timestamp + dL)))
17001615 then true
1701- else ((lastBlock.timestamp - dZ) > iY))
1702- then throw(((("signature outdated: logTime=" + toString(iY)) + ", bcTime=") + toString(lastBlock.timestamp)))
1616+ else ((lastBlock.timestamp - dL) > iM))
1617+ then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
17031618 else {
1704- let iZ = iW[1]
1705- let ja = valueOrElse(getString(dK(bQ)), "")
1706- if ((ja != iZ))
1707- then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
1619+ let iN = iK[1]
1620+ let iO = valueOrElse(getString(dx(bC)), "")
1621+ if ((iO != iN))
1622+ then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
17081623 else {
1709- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1710- let jb = A(B)
1711- let jc = aj(valueOrElse(getInteger(E(B)), 0))
1712- let jd = valueOrElse(getInteger(jb), jc)
1713- if ((jd != iU))
1714- then throw(((("oldHealth=" + toString(jd)) + " from state does not match one from flight log=") + toString(iU)))
1715- else if ((0 >= iU))
1624+ let u = valueOrErrorMessage(getString(by(bC)), "You don't have a duck staked")
1625+ let iP = t(u)
1626+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
1627+ let iR = valueOrElse(getInteger(iP), iQ)
1628+ if ((iR != iI))
1629+ then throw(((("oldHealth=" + toString(iR)) + " from state does not match one from flight log=") + toString(iI)))
1630+ else if ((0 >= iI))
17161631 then throw("You can't fly with zero health")
1717- else if (!(gw(B)))
1632+ else if (!(gg(u)))
17181633 then throw("Equipment incompatible")
17191634 else {
1720- let je = if ((size(iS) > eE))
1721- then iS[eE]
1635+ let iS = if ((size(iG) > eq))
1636+ then iG[eq]
17221637 else ""
1723- let jf = if ((size(iS) > eF))
1724- then iS[eF]
1638+ let iT = if ((size(iG) > er))
1639+ then iG[er]
17251640 else ""
1726- let jg = if (if ((iV > 0))
1727- then (je == "$")
1641+ let iU = if (if ((iJ > 0))
1642+ then (iS == "$")
17281643 else false)
1729- then dB(invoke(dd, "sendUsdtPrize", [bQ], nil))
1644+ then do(invoke(cQ, "sendUsdtPrize", [bC], nil))
17301645 else 0
1731- $Tuple5(iV, B, jg, iX, jf)
1646+ $Tuple5(iJ, u, iU, iL, iT)
17321647 }
17331648 }
17341649 }
17351650 }
17361651
17371652
1738-func jh (Q,ji) = {
1739- let ia = valueOrElse(getInteger(bD(Q)), 0)
1740- let jj = valueOrElse(getInteger(bx(aI, Q)), 0)
1741- let jk = (ia / 6)
1742- let jl = (ia / 7)
1743- ((aL + fraction(aL, ((ia + jk) + (2 * jl)), 5)) + fraction(aL, jj, (ji * 5)))
1744- }
1745-
1746-
1747-func jm (c,jn,jo) = {
1748- let jp = if ((jn == ez))
1749- then $Tuple2(jo, valueOrElse(getString(bM(c)), ""))
1653+func iV (bp,iW) = {
1654+ let hN = valueOrElse(getInteger(bq(bp)), 0)
1655+ let iX = valueOrElse(getInteger(bj(as, bp)), 0)
1656+ let iY = (hN / 6)
1657+ let iZ = (hN / 7)
1658+ ((av + fraction(av, ((hN + iY) + (2 * iZ)), 5)) + fraction(av, iX, (iW * 5)))
1659+ }
1660+
1661+
1662+func ja (c,jb,jc) = {
1663+ let jd = if ((jb == el))
1664+ then $Tuple2(jc, valueOrElse(getString(by(c)), ""))
17501665 else {
1751- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1752- let jq = valueOrElse(getString(bO(B)), aN)
1753- let cj = split(value(jq), "_")
1754- if ((cj[br] != "L"))
1755- then throw((("Duck location type is " + cj[br]) + ", but should be L"))
1756- else $Tuple2(cj[bs], B)
1757- }
1758- let Q = jp._1
1759- let jr = jp._2
1760- let js = value(assetInfo(fromBase58String(Q)))
1761- let jt = bw(Q)
1762- let ju = valueOrErrorMessage(getInteger(jt), (("Land " + js.name) + " is not staked"))
1763- let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1764- if ((jv != c))
1765- then throw((aF + " is not yours"))
1666+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1667+ let je = valueOrElse(getString(bA(u)), ax)
1668+ let bV = split(value(je), "_")
1669+ if ((bV[bd] != "L"))
1670+ then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
1671+ else $Tuple2(bV[be], u)
1672+ }
1673+ let bp = jd._1
1674+ let jf = jd._2
1675+ let jg = value(assetInfo(fromBase58String(bp)))
1676+ let jh = bi(bp)
1677+ let ji = valueOrErrorMessage(getInteger(jh), (("Land " + jg.name) + " is not staked"))
1678+ let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1679+ if ((jj != c))
1680+ then throw((ap + " is not yours"))
17661681 else {
1767- let jw = split(js.description, "_")
1768- $Tuple4(jr, Q, jw, ju)
1769- }
1770- }
1771-
1772-
1773-func jx (c,eI,jn,jo) = if ((0 > eI))
1682+ let jk = split(jg.description, "_")
1683+ $Tuple4(jf, bp, jk, ji)
1684+ }
1685+ }
1686+
1687+
1688+func jl (c,ez,jb,jc) = if ((0 > ez))
17741689 then throw("Negative amount")
17751690 else {
1776- let ga = jm(c, jn, jo)
1777- let dH = ga._3[dk]
1778- let gG = gM(ga._3[dl])
1779- let gQ = (lastBlock.timestamp - ga._4)
1780- if ((0 > gQ))
1781- then throw(((("Saved timestamp is in future, saved = " + toString(ga._4)) + ", current = ") + toString(lastBlock.timestamp)))
1691+ let fN = ja(c, jb, jc)
1692+ let du = fN._3[cX]
1693+ let gr = gx(fN._3[cY])
1694+ let gB = (lastBlock.timestamp - fN._4)
1695+ if ((0 > gB))
1696+ then throw(((("Saved timestamp is in future, saved = " + toString(fN._4)) + ", current = ") + toString(lastBlock.timestamp)))
17821697 else {
1783- let ji = dG(dH)
1784- let jy = jh(ga._2, ji)
1785- let jz = fraction(gQ, (jy * ji), a)
1786- if ((eI > jz))
1787- then throw(((("Not enough resources, available = " + toString(jz)) + ", requested = ") + toString(eI)))
1698+ let iW = dt(du)
1699+ let jm = iV(fN._2, iW)
1700+ let jn = fraction(gB, (jm * iW), a)
1701+ if ((ez > jn))
1702+ then throw(((("Not enough resources, available = " + toString(jn)) + ", requested = ") + toString(ez)))
17881703 else {
1789- let jA = fraction((jz - eI), a, (jy * ji))
1790- let jB = (lastBlock.timestamp - jA)
1791- let hZ = (ji / cH)
1792- let gY = gU(gG, (gQ - jA), hZ, jy)
1793- let hY = bC(ga._2)
1794- let ia = valueOrElse(getInteger(bD(ga._2)), 0)
1795- let hP = hX(hY, hZ, ia)
1796- let ig = split(hP[bh], "_")
1797- let gZ = parseIntValue(ig[bk])
1798- if (if ((jn == ez))
1799- then (eI > gZ)
1704+ let jo = fraction((jn - ez), a, (jm * iW))
1705+ let jp = (lastBlock.timestamp - jo)
1706+ let hM = (iW / cu)
1707+ let gJ = gF(gr, (gB - jo), hM, jm)
1708+ let hL = bo(fN._2)
1709+ let hN = valueOrElse(getInteger(bq(fN._2)), 0)
1710+ let hC = hK(hL, hM, hN)
1711+ let hT = split(hC[aT], "_")
1712+ let gK = parseIntValue(hT[aW])
1713+ if (if ((jb == el))
1714+ then (ez > gK)
18001715 else false)
1801- then throw((("Only " + toString(gZ)) + " space left in warehouse"))
1716+ then throw((("Only " + toString(gK)) + " space left in warehouse"))
18021717 else {
1803- let hL = bN(ga._1)
1804- let io = hK(hL)
1805- let gX = split(io[bn], "_")
1806- let gW = split(hP[be], "_")
1807- let jC = if ((jn == ez))
1808- then $Tuple4(gO(gW, gG, (gQ - jA), hZ, jy), io[bn], (parseIntValue(ig[bj]) + gY._2), (parseIntValue(ig[bk]) - gY._2))
1809- else if ((jn == eA))
1810- then $Tuple4(hP[be], gO(gX, gG, (gQ - jA), hZ, jy), parseIntValue(ig[bj]), parseIntValue(ig[bk]))
1718+ let hx = bz(fN._1)
1719+ let ib = hw(hx)
1720+ let gI = split(ib[aZ], "_")
1721+ let gH = split(hC[aQ], "_")
1722+ let jq = if ((jb == el))
1723+ then $Tuple4(gz(gH, gr, (gB - jo), hM, jm), ib[aZ], (parseIntValue(hT[aV]) + gJ._2), (parseIntValue(hT[aW]) - gJ._2))
1724+ else if ((jb == em))
1725+ then $Tuple4(hC[aQ], gz(gI, gr, (gB - jo), hM, jm), parseIntValue(hT[aV]), parseIntValue(hT[aW]))
18111726 else {
1812- let jD = gV(gW, gX, gY, gZ)
1813- let jE = min([parseIntValue(ig[bk]), gY._2])
1814- $Tuple4(jD._1, jD._2, (parseIntValue(ig[bj]) + jE), (parseIntValue(ig[bk]) - jE))
1727+ let jr = gG(gH, gI, gJ, gK)
1728+ let js = min([parseIntValue(hT[aW]), gJ._2])
1729+ $Tuple4(jr._1, jr._2, (parseIntValue(hT[aV]) + js), (parseIntValue(hT[aW]) - js))
18151730 }
1816- let jF = jC._1
1817- let jG = jC._2
1818- let jH = jC._3
1819- let jI = jC._4
1820- $Tuple5([IntegerEntry(bw(ga._2), jB), IntegerEntry(bz(aF, ga._2, c), jB)], hL, [io[bm], jG, io[bo], io[bp]], hY, [hP[bd], jF, hP[bf], hP[bg], makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")])
1731+ let jt = jq._1
1732+ let ju = jq._2
1733+ let jv = jq._3
1734+ let jw = jq._4
1735+ $Tuple5([IntegerEntry(bi(fN._2), jp), IntegerEntry(bl(ap, fN._2, c), jp)], hx, [ib[aY], ju, ib[ba], ib[bb]], hL, [hC[aP], jt, hC[aR], hC[aS], makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")])
18211736 }
18221737 }
18231738 }
18241739 }
18251740
18261741
1827-func jJ (c,Q,ji,jn) = {
1828- let jt = bw(Q)
1829- let ju = value(getInteger(jt))
1830- let jz = (fraction((lastBlock.timestamp - ju), jh(Q, ji), a) * ji)
1831- jx(c, jz, jn, Q)
1832- }
1833-
1834-
1835-func jK (fe,iJ,jL,Q) = {
1836- let c = toString(iJ)
1837- let ga = jm(c, eB, Q)
1838- let ji = dG(ga._3[dk])
1839- let jM = bD(ga._2)
1840- let jN = valueOrElse(getInteger(jM), 0)
1841- if (if (!(cu))
1842- then (jN >= 3)
1742+func jx (c,bp,iW,jb) = {
1743+ let jh = bi(bp)
1744+ let ji = value(getInteger(jh))
1745+ let jn = (fraction((lastBlock.timestamp - ji), iV(bp, iW), a) * iW)
1746+ jl(c, jn, jb, bp)
1747+ }
1748+
1749+
1750+func jy (eV,ix,jz,bp) = {
1751+ let c = toString(ix)
1752+ let fN = ja(c, en, bp)
1753+ let iW = dt(fN._3[cX])
1754+ let jA = bq(fN._2)
1755+ let jB = valueOrElse(getInteger(jA), 0)
1756+ if (if (!(ch))
1757+ then (jB >= 3)
18431758 else false)
18441759 then throw("Currently max infrastructure level = 3")
18451760 else {
1846- let jO = ((sqrt(ji, 0, 0, DOWN) / 5) + 2)
1847- let ao = (jN + 1)
1848- if (if (cu)
1849- then (ao > jO)
1761+ let jC = ((sqrt(iW, 0, 0, DOWN) / 5) + 2)
1762+ let ag = (jB + 1)
1763+ if (if (ch)
1764+ then (ag > jC)
18501765 else false)
1851- then throw(("Currently max infrastructure level = " + toString(jO)))
1766+ then throw(("Currently max infrastructure level = " + toString(jC)))
18521767 else {
1853- let jP = fraction(ec, (ji * ao), cH)
1854- if (if (!(fe))
1855- then (jL != jP)
1768+ let jD = fraction(dO, (iW * ag), cu)
1769+ if (if (!(eV))
1770+ then (jz != jD)
18561771 else false)
1857- then throw(("Payment attached should be " + toString(jP)))
1772+ then throw(("Payment attached should be " + toString(jD)))
18581773 else {
1859- let hL = bN(ga._1)
1860- let io = hK(hL)
1861- let jQ = split(io[bo], "_")
1862- let jR = fraction(cC, (ji * ao), cH)
1863- let jS = makeString(fd(fe, jQ, jR), "_")
1864- let jT = jJ(c, ga._2, ji, eB)
1865- let jU = jT._5
1866- let jV = hM(jU[bd])
1867- let jW = makeString([split(jU[bd], "_")[0], toString(ao)], "_")
1868- let jX = hM(jW)
1869- let ig = split(jU[bh], "_")
1870- let jY = makeString([ig[bi], ig[bj], toString(((parseIntValue(ig[bk]) + jX) - jV)), toString(jX)], "_")
1871- $Tuple3(([IntegerEntry(jM, ao), IntegerEntry(et(ga._2, c), ao), StringEntry(hL, makeString([io[bm], jT._3[bn], jS, io[bp]], ":")), StringEntry(jT._4, makeString([jW, jU[be], jU[bf], jU[bg], jY], ":"))] ++ jT._1), ao, jR)
1774+ let hx = bz(fN._1)
1775+ let ib = hw(hx)
1776+ let jE = split(ib[ba], "_")
1777+ let jF = fraction(cp, (iW * ag), cu)
1778+ let jG = makeString(eU(eV, jE, jF), "_")
1779+ let jH = jx(c, fN._2, iW, en)
1780+ let jI = jH._5
1781+ let jJ = hz(jI[aP])
1782+ let jK = makeString([split(jI[aP], "_")[0], toString(ag)], "_")
1783+ let jL = hz(jK)
1784+ let hT = split(jI[aT], "_")
1785+ let jM = makeString([hT[aU], hT[aV], toString(((parseIntValue(hT[aW]) + jL) - jJ)), toString(jL)], "_")
1786+ $Tuple3(([IntegerEntry(jA, ag), IntegerEntry(ef(fN._2, c), ag), StringEntry(hx, makeString([ib[aY], jH._3[aZ], jG, ib[bb]], ":")), StringEntry(jH._4, makeString([jK, jI[aQ], jI[aR], jI[aS], jM], ":"))] ++ jH._1), ag, jF)
18721787 }
18731788 }
18741789 }
18751790 }
18761791
18771792
1878-func jZ (ka,kb,kc,kd) = {
1879- let ai = valueOrElse(getInteger(kb), 0)
1880- let an = (ai + kd)
1881- let ke = al(valueOrElse(getInteger(ka), 0), an)
1882- $Tuple2([IntegerEntry(ka, ke[0]), IntegerEntry(kb, an), IntegerEntry(kc, (valueOrElse(getInteger(kc), 0) + ke[1]))], an)
1883- }
1884-
1885-
1886-func kf (B,kd) = {
1887- let js = value(assetInfo(fromBase58String(B)))
1888- let c = valueOrErrorMessage(getString(bL(B)), (("NFT " + js.name) + " is orphaned"))
1889- if (if (if (cv)
1890- then (js.issuer == this)
1793+func jN (jO,jP,jQ,jR) = {
1794+ let aa = valueOrElse(getInteger(jP), 0)
1795+ let af = (aa + jR)
1796+ let jS = ad(valueOrElse(getInteger(jO), 0), af)
1797+ $Tuple2([IntegerEntry(jO, jS[0]), IntegerEntry(jP, af), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jS[1]))], af)
1798+ }
1799+
1800+
1801+func jT (u,jR) = {
1802+ let jg = value(assetInfo(fromBase58String(u)))
1803+ let c = valueOrErrorMessage(getString(bx(u)), (("NFT " + jg.name) + " is orphaned"))
1804+ if (if (if (ci)
1805+ then (jg.issuer == this)
18911806 else false)
1892- then contains(js.name, aH)
1807+ then contains(jg.name, ar)
18931808 else false)
1894- then jZ(I(c), H(c), J(c), kd)
1895- else jZ(E(B), D(B), F(B), kd)
1896- }
1897-
1898-
1899-func kg (c,kd) = jZ(I(c), H(c), J(c), kd)
1900-
1901-
1902-func kh (c) = {
1903- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1904- let ki = bH(c)
1905- let kj = getString(ki)
1906- if (!(isDefined(kj)))
1809+ then jN(B(c), A(c), C(c), jR)
1810+ else jN(x(u), w(u), y(u), jR)
1811+ }
1812+
1813+
1814+func jU (c,jR) = jN(B(c), A(c), C(c), jR)
1815+
1816+
1817+func jV (c) = {
1818+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1819+ let jW = bt(c)
1820+ let jX = getString(jW)
1821+ if (!(isDefined(jX)))
19071822 then throw("You are not eligible for ONBOARD artifact")
19081823 else {
1909- let kk = bJ(c)
1910- let kl = getString(kk)
1911- if (isDefined(kl))
1912- then throw(("You already used your ONBOARD artifact on duck " + value(kl)))
1824+ let jY = bv(c)
1825+ let jZ = getString(jY)
1826+ if (isDefined(jZ))
1827+ then throw(("You already used your ONBOARD artifact on duck " + value(jZ)))
19131828 else {
1914- let km = bI(B)
1915- let kn = getString(km)
1916- if (isDefined(kn))
1917- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kn)))
1918- else ([StringEntry(kk, B), StringEntry(km, c)] ++ kf(B, af)._1)
1829+ let ka = bu(u)
1830+ let kb = getString(ka)
1831+ if (isDefined(kb))
1832+ then throw(((("The duck " + u) + " already got points from ONBOARD artifact from user ") + value(kb)))
1833+ else ([StringEntry(jY, u), StringEntry(ka, c)] ++ jT(u, X)._1)
19191834 }
19201835 }
19211836 }
19221837
19231838
1924-func ko (c,jo) = {
1925- let ga = jm(c, eB, jo)
1926- let Q = ga._2
1927- let ji = dG(ga._3[dk])
1928- let kp = bx(aI, Q)
1929- if ((valueOrElse(getInteger(kp), 0) > 0))
1839+func kc (c,jc) = {
1840+ let fN = ja(c, en, jc)
1841+ let bp = fN._2
1842+ let iW = dt(fN._3[cX])
1843+ let kd = bj(as, bp)
1844+ if ((valueOrElse(getInteger(kd), 0) > 0))
19301845 then throw("Presale artifact is already activated")
1931- else if ((parseIntValue(ga._3[dj]) > en))
1932- then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
1846+ else if ((parseIntValue(fN._3[cW]) > dZ))
1847+ then throw((((ap + " ") + bp) + " is not eligible for presale artifact"))
19331848 else {
1934- let jT = jJ(c, Q, ji, eB)
1935- (((jT._1 :+ IntegerEntry(kp, ji)) :+ StringEntry(jT._2, makeString(jT._3, ":"))) :+ StringEntry(jT._4, makeString(jT._5, ":")))
1849+ let jH = jx(c, bp, iW, en)
1850+ (((jH._1 :+ IntegerEntry(kd, iW)) :+ StringEntry(jH._2, makeString(jH._3, ":"))) :+ StringEntry(jH._4, makeString(jH._5, ":")))
19361851 }
19371852 }
19381853
19391854
1940-func kq (B) = {
1941- let ci = valueOrElse(getInteger(dh, bT), 0)
1942- let jq = split(valueOrElse(getString(bO(B)), aN), "_")
1943- let aA = lastBlock.timestamp
1944- let ck = cc(dh, ci)
1945- let ce = ck[bY]
1946- let cf = ck[bZ]
1947- if ((jq[br] != "T"))
1855+func ke (u) = {
1856+ let bU = valueOrElse(getInteger(cU, bF), 0)
1857+ let je = split(valueOrElse(getString(bA(u)), ax), "_")
1858+ let bW = lastBlock.timestamp
1859+ let bX = bO(cU, bU)
1860+ let bQ = bX[bK]
1861+ let bR = bX[bL]
1862+ if ((je[bd] != "T"))
19481863 then false
1949- else if (if (if ((parseIntValue(jq[bq]) == ci))
1950- then (cf[cb] == "INPROGRESS")
1864+ else if (if (if ((parseIntValue(je[bc]) == bU))
1865+ then (bR[bN] == "INPROGRESS")
19511866 else false)
1952- then (parseIntValue(ce[ca]) > aA)
1867+ then (parseIntValue(bQ[bM]) > bW)
19531868 else false)
19541869 then throw("Your duck is taking part in the tournament")
1955- else dF(invoke(this, "exitTournamentInternal", [B], nil))
1956- }
1957-
1958-
1959-func kr (ks,ao,kt,c,ku,kv) = {
1960- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1961- if (kq(B))
1870+ else ds(invoke(this, "exitTournamentInternal", [u], nil))
1871+ }
1872+
1873+
1874+func kf (kg,ag,kh,c,ki,kj) = {
1875+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
1876+ if (ke(u))
19621877 then throw("mergeInternal_checkTournament")
19631878 else {
1964- func kw (eR,Q) = {
1965- let js = value(assetInfo(fromBase58String(Q)))
1966- let jt = bw(Q)
1967- let ju = valueOrErrorMessage(getInteger(jt), (("NFT " + js.name) + " is not staked"))
1968- let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1969- if ((jv != c))
1970- then throw((aF + " is not yours"))
1879+ func kk (eI,bp) = {
1880+ let jg = value(assetInfo(fromBase58String(bp)))
1881+ let jh = bi(bp)
1882+ let ji = valueOrErrorMessage(getInteger(jh), (("NFT " + jg.name) + " is not staked"))
1883+ let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
1884+ if ((jj != c))
1885+ then throw((ap + " is not yours"))
19711886 else {
1972- let jw = split(js.description, "_")
1973- let dv = jw[dm]
1974- if (if ((eR._3 != ""))
1975- then (eR._3 != dv)
1887+ let jk = split(jg.description, "_")
1888+ let di = jk[cZ]
1889+ if (if ((eI._3 != ""))
1890+ then (eI._3 != di)
19761891 else false)
19771892 then throw("Lands should be on the same continent to merge")
19781893 else {
1979- let dH = jw[dk]
1980- let kx = eR._1
1981- let gK = valueOrErrorMessage(indexOf(kx, dH), "You haven't passed all the lands needed")
1982- let ky = (take(kx, gK) + drop(kx, (gK + 1)))
1983- let ji = dG(dH)
1984- let kz = (eR._2 + valueOrElse(getInteger(bx(aI, Q)), 0))
1985- let ia = valueOrElse(getInteger(bD(Q)), 0)
1986- let kA = {
1987- let cz = dH
1988- if (("S" == cz))
1894+ let du = jk[cX]
1895+ let kl = eI._1
1896+ let gv = valueOrErrorMessage(indexOf(kl, du), "You haven't passed all the lands needed")
1897+ let km = (take(kl, gv) + drop(kl, (gv + 1)))
1898+ let iW = dt(du)
1899+ let kn = (eI._2 + valueOrElse(getInteger(bj(as, bp)), 0))
1900+ let hN = valueOrElse(getInteger(bq(bp)), 0)
1901+ let ko = {
1902+ let cm = du
1903+ if (("S" == cm))
19891904 then 3
1990- else if (("M" == cz))
1905+ else if (("M" == cm))
19911906 then 4
1992- else if (("L" == cz))
1907+ else if (("L" == cm))
19931908 then 5
1994- else if (("XL" == cz))
1909+ else if (("XL" == cm))
19951910 then 6
19961911 else throw("Only S, M, L, XL can merge")
19971912 }
1998- if ((ia != kA))
1913+ if ((hN != ko))
19991914 then throw("All lands should be maxed to merge")
20001915 else {
2001- let es = jw[dj]
2002- let gG = gM(jw[dl])
2003- let gQ = (lastBlock.timestamp - ju)
2004- if ((0 > gQ))
2005- then throw(((("Saved timestamp is in future, saved = " + toString(ju)) + ", current = ") + toString(lastBlock.timestamp)))
1916+ let ee = jk[cW]
1917+ let gr = gx(jk[cY])
1918+ let gB = (lastBlock.timestamp - ji)
1919+ if ((0 > gB))
1920+ then throw(((("Saved timestamp is in future, saved = " + toString(ji)) + ", current = ") + toString(lastBlock.timestamp)))
20061921 else {
2007- let jy = jh(Q, ji)
2008- let hZ = (ji / cH)
2009- let jG = gO(split(eR._4, "_"), gG, gQ, hZ, jy)
2010- let fb = gE(eR._6, gG, hZ, -1)
2011- let kB = gE(eR._10, gG, hZ, -1)
2012- let hu = gE(eR._9, gG, hZ, 1)
2013- let kC = eR._7
2014- let dc = indexOf(kC, Q)
2015- if (!(isDefined(dc)))
2016- then throw(("Your staked lands don't contain " + Q))
1922+ let jm = iV(bp, iW)
1923+ let hM = (iW / cu)
1924+ let ju = gz(split(eI._4, "_"), gr, gB, hM, jm)
1925+ let eS = gp(eI._6, gr, hM, -1)
1926+ let kp = gp(eI._10, gr, hM, -1)
1927+ let hg = gp(eI._9, gr, hM, 1)
1928+ let kq = eI._7
1929+ let cP = indexOf(kq, bp)
1930+ if (!(isDefined(cP)))
1931+ then throw(("Your staked lands don't contain " + bp))
20171932 else {
2018- let kD = bv(Q)
2019- let kE = valueOrElse(getString(kD), "")
2020- $Tuple10(ky, kz, dv, jG, ((((((((((((eR._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(er(es))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(et(Q, c))) :+ DeleteEntry(bx(aI, Q))) :+ DeleteEntry(eu(es))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kD)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kE != ""))
2021- then [DeleteEntry(ep(kE))]
2022- else nil)), fb, removeByIndex(kC, value(dc)), (eR._8 + ji), hu, kB)
1933+ let kr = bh(bp)
1934+ let ks = valueOrElse(getString(kr), "")
1935+ $Tuple10(km, kn, di, ju, ((((((((((((eI._5 :+ DeleteEntry(bi(bp))) :+ DeleteEntry(bl(ap, bp, c))) :+ DeleteEntry(ed(ee))) :+ DeleteEntry(bf(bp))) :+ DeleteEntry(bq(bp))) :+ DeleteEntry(ef(bp, c))) :+ DeleteEntry(bj(as, bp))) :+ DeleteEntry(eg(ee))) :+ DeleteEntry(bo(bp))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(bp), 1)) ++ (if ((ks != ""))
1936+ then [DeleteEntry(eb(ks))]
1937+ else nil)), eS, removeByIndex(kq, value(cP)), (eI._8 + iW), hg, kp)
20231938 }
20241939 }
20251940 }
20261941 }
20271942 }
20281943 }
20291944
2030- let hL = bN(B)
2031- let io = hK(hL)
2032- let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
2033- let kF = dw(c)
2034- let kG = getString(kF)
2035- let kH = if (isDefined(kG))
2036- then split_51C(value(kG), "_")
1945+ let hx = bz(u)
1946+ let ib = hw(hx)
1947+ let gq = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_")
1948+ let kt = dj(c)
1949+ let ku = getString(kt)
1950+ let kv = if (isDefined(ku))
1951+ then split_51C(value(ku), "_")
20371952 else nil
2038- let kI = split(value(assetInfo(fromBase58String(ku[0]))).description, "_")[dm]
2039- let kJ = split(valueOrElse(getString(du(kI)), "0_0_0_0_0_0"), "_")
2040- let fc = {
2041- let eT = ku
2042- let eU = size(eT)
2043- let eV = $Tuple10(kt, 0, "", io[bn], nil, gF, kH, 0, split("0_0_0_0_0_0", "_"), kJ)
2044- func eW (eX,eY) = if ((eY >= eU))
2045- then eX
2046- else kw(eX, eT[eY])
2047-
2048- func eZ (eX,eY) = if ((eY >= eU))
2049- then eX
1953+ let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ]
1954+ let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_")
1955+ let eT = {
1956+ let eK = ki
1957+ let eL = size(eK)
1958+ let eM = $Tuple10(kh, 0, "", ib[aZ], nil, gq, kv, 0, split("0_0_0_0_0_0", "_"), kx)
1959+ func eN (eO,eP) = if ((eP >= eL))
1960+ then eO
1961+ else kk(eO, eK[eP])
1962+
1963+ func eQ (eO,eP) = if ((eP >= eL))
1964+ then eO
20501965 else throw("List size exceeds 5")
20511966
2052- eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
1967+ eQ(eN(eN(eN(eN(eN(eM, 0), 1), 2), 3), 4), 5)
20531968 }
2054- let dv = fc._3
2055- let ho = valueOrErrorMessage(indexOf(aU, dv), ("Unknown continent: " + dv))
2056- let gN = ht(fc._9, (dG(ks) / cH))
2057- let iM = valueOrElse(getInteger(eo()), (en + 1))
2058- let kK = toString(iM)
2059- let iN = Issue(eG(kK, ks), makeString([kK, ks, gN, dv], "_"), 1, 0, false)
2060- let bu = calculateAssetId(iN)
2061- let kL = toBase58String(bu)
2062- let jS = makeString(fd((kv > 0), split(io[bo], "_"), kv), "_")
2063- let kM = dx(c)
2064- let kN = valueOrElse(getInteger(kM), 0)
2065- $Tuple2((((((((((((((((fc._5 :+ (if ((size(fc._7) > 0))
2066- then StringEntry(kF, makeString_11C(fc._7, "_"))
2067- else DeleteEntry(kF))) :+ IntegerEntry(kM, if ((fc._8 > kN))
1969+ let di = eT._3
1970+ let gZ = valueOrErrorMessage(indexOf(aH, di), ("Unknown continent: " + di))
1971+ let gy = hf(eT._9, (dt(kg) / cu))
1972+ let iA = valueOrElse(getInteger(ea()), (dZ + 1))
1973+ let ky = toString(iA)
1974+ let iB = Issue(ex(ky, kg), makeString([ky, kg, gy, di], "_"), 1, 0, false)
1975+ let bg = calculateAssetId(iB)
1976+ let kz = toBase58String(bg)
1977+ let jG = makeString(eU((kj > 0), split(ib[ba], "_"), kj), "_")
1978+ let kA = dk(c)
1979+ let kB = valueOrElse(getInteger(kA), 0)
1980+ $Tuple2((((((((((((((((eT._5 :+ (if ((size(eT._7) > 0))
1981+ then StringEntry(kt, makeString_11C(eT._7, "_"))
1982+ else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eT._8 > kB))
20681983 then 0
2069- else (kN - fc._8))) :+ IntegerEntry(eo(), (iM + 1))) :+ iN) :+ StringEntry(er(kK), kL)) :+ StringEntry(bt(kL), c)) :+ StringEntry(eu(kK), c)) :+ IntegerEntry(bx(aI, kL), fc._2)) :+ IntegerEntry(bD(kL), ao)) :+ IntegerEntry(et(kL, c), ao)) :+ StringEntry(hL, makeString([io[bm], fc._4, jS, io[bp]], ":"))) :+ StringEntry(dt(), makeString(fc._6, "_"))) :+ StringEntry(du(dv), makeString(fc._10, "_"))) :+ StringEntry(bO(B), makeString([dv, "L", kL], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kL)
2070- }
2071- }
2072-
2073-
2074-func kO (c,ku) = kr("M", 3, "SSSS", c, ku, 0)
2075-
2076-
2077-func kP (c,ku) = kr("L", 4, "SMM", c, ku, (cC * 4))
2078-
2079-
2080-func kQ (c,ku) = kr("XL", 5, "SSSML", c, ku, (cC * 47))
2081-
2082-
2083-func kR (c,ku) = kr("XXL", 6, "LXL", c, ku, (cC * 54))
2084-
2085-
2086-func kS (c,ku) = {
2087- let cz = size(ku)
2088- if ((4 == cz))
2089- then kO(c, ku)
2090- else if ((3 == cz))
2091- then kP(c, ku)
2092- else if ((5 == cz))
2093- then kQ(c, ku)
2094- else if ((2 == cz))
2095- then kR(c, ku)
1984+ else (kB - eT._8))) :+ IntegerEntry(ea(), (iA + 1))) :+ iB) :+ StringEntry(ed(ky), kz)) :+ StringEntry(bf(kz), c)) :+ StringEntry(eg(ky), c)) :+ IntegerEntry(bj(as, kz), eT._2)) :+ IntegerEntry(bq(kz), ag)) :+ IntegerEntry(ef(kz, c), ag)) :+ StringEntry(hx, makeString([ib[aY], eT._4, jG, ib[bb]], ":"))) :+ StringEntry(dg(), makeString(eT._6, "_"))) :+ StringEntry(dh(di), makeString(eT._10, "_"))) :+ StringEntry(bA(u), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bg)), kz)
1985+ }
1986+ }
1987+
1988+
1989+func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0)
1990+
1991+
1992+func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4))
1993+
1994+
1995+func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47))
1996+
1997+
1998+func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54))
1999+
2000+
2001+func kG (c,ki) = {
2002+ let cm = size(ki)
2003+ if ((4 == cm))
2004+ then kC(c, ki)
2005+ else if ((3 == cm))
2006+ then kD(c, ki)
2007+ else if ((5 == cm))
2008+ then kE(c, ki)
2009+ else if ((2 == cm))
2010+ then kF(c, ki)
20962011 else throw("Unknown merge")
20972012 }
20982013
20992014
2100-func kT (gK) = if (if ((gK.originCaller != dd))
2101- then valueOrElse(getBoolean(dJ()), false)
2015+func kH (gv) = if (if ((gv.originCaller != cQ))
2016+ then valueOrElse(getBoolean(dw()), false)
21022017 else false)
21032018 then throw("Contracts are under maintenance")
2104- else [StringEntry(dK(toString(gK.originCaller)), toBase58String(gK.transactionId))]
2105-
2106-
2107-@Callable(gK)
2108-func constructorV1 (kU) = if ((gK.caller != this))
2019+ else [StringEntry(dx(toString(gv.originCaller)), toBase58String(gv.transactionId))]
2020+
2021+
2022+@Callable(gv)
2023+func constructorV1 (kI) = if ((gv.caller != this))
21092024 then throw("Permission denied")
2110- else [StringEntry(cX(), kU)]
2111-
2112-
2113-
2114-@Callable(gK)
2115-func saveInteger (cP,eI) = if ((gK.caller != this))
2025+ else [StringEntry(cK(), kI)]
2026+
2027+
2028+
2029+@Callable(gv)
2030+func saveInteger (cC,ez) = if ((gv.caller != this))
21162031 then throw("saveInteger is not public method")
2117- else [IntegerEntry(cP, eI)]
2118-
2119-
2120-
2121-@Callable(gK)
2122-func setBlocked (kV) = if ((gK.caller != this))
2032+ else [IntegerEntry(cC, ez)]
2033+
2034+
2035+
2036+@Callable(gv)
2037+func setBlocked (kJ) = if ((gv.caller != this))
21232038 then throw("permission denied")
2124- else [BooleanEntry(dJ(), kV)]
2125-
2126-
2127-
2128-@Callable(gK)
2039+ else [BooleanEntry(dw(), kJ)]
2040+
2041+
2042+
2043+@Callable(gv)
21292044 func stakeLand () = {
2130- let kW = kT(gK)
2131- if ((size(gK.payments) != 1))
2045+ let kK = kH(gv)
2046+ if ((size(gv.payments) != 1))
21322047 then throw("Exactly one payment required")
21332048 else {
2134- let kX = value(gK.payments[0])
2135- let bu = value(kX.assetId)
2136- let cO = toString(gK.caller)
2137- if ((kX.amount != 1))
2138- then throw((("NFT " + aF) + " token should be attached as payment"))
2049+ let kL = value(gv.payments[0])
2050+ let bg = value(kL.assetId)
2051+ let cB = toString(gv.caller)
2052+ if ((kL.amount != 1))
2053+ then throw((("NFT " + ap) + " token should be attached as payment"))
21392054 else {
2140- let js = value(assetInfo(bu))
2141- if ((js.issuer != this))
2055+ let jg = value(assetInfo(bg))
2056+ if ((jg.issuer != this))
21422057 then throw("Unknown issuer of token")
2143- else if (!(contains(js.name, aF)))
2144- then throw((("Only NFT " + aF) + " tokens are accepted"))
2058+ else if (!(contains(jg.name, ap)))
2059+ then throw((("Only NFT " + ap) + " tokens are accepted"))
21452060 else {
2146- let kY = drop(js.name, 4)
2147- let es = if (contains(kY, "XXL"))
2148- then dropRight(kY, 3)
2149- else if (contains(kY, "XL"))
2150- then dropRight(kY, 2)
2151- else dropRight(kY, 1)
2152- if (!(isDefined(parseInt(es))))
2153- then throw(("Cannot parse land number from " + js.name))
2061+ let kM = drop(jg.name, 4)
2062+ let ee = if (contains(kM, "XXL"))
2063+ then dropRight(kM, 3)
2064+ else if (contains(kM, "XL"))
2065+ then dropRight(kM, 2)
2066+ else dropRight(kM, 1)
2067+ if (!(isDefined(parseInt(ee))))
2068+ then throw(("Cannot parse land number from " + jg.name))
21542069 else {
2155- let Q = toBase58String(bu)
2156- let jt = bw(Q)
2157- if (isDefined(getInteger(jt)))
2158- then throw((("NFT " + js.name) + " is already staked"))
2070+ let bp = toBase58String(bg)
2071+ let jh = bi(bp)
2072+ if (isDefined(getInteger(jh)))
2073+ then throw((("NFT " + jg.name) + " is already staked"))
21592074 else {
2160- let jw = split(js.description, "_")
2161- let gG = gM(jw[dl])
2162- let ji = dG(jw[dk])
2163- let hZ = (ji / cH)
2164- let fb = gL(gG, hZ, 1)
2165- let kZ = du(jw[dm])
2166- let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2167- let la = makeString(gE(kJ, gG, hZ, 1), "_")
2168- let kF = dw(cO)
2169- let kG = getString(kF)
2170- let kC = if (isDefined(kG))
2171- then split_51C(value(kG), "_")
2075+ let jk = split(jg.description, "_")
2076+ let gr = gx(jk[cY])
2077+ let iW = dt(jk[cX])
2078+ let hM = (iW / cu)
2079+ let eS = gw(gr, hM, 1)
2080+ let kN = dh(jk[cZ])
2081+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2082+ let kO = makeString(gp(kx, gr, hM, 1), "_")
2083+ let kt = dj(cB)
2084+ let ku = getString(kt)
2085+ let kq = if (isDefined(ku))
2086+ then split_51C(value(ku), "_")
21722087 else nil
2173- if (containsElement(kC, Q))
2174- then throw(("Your staked lands already contain " + Q))
2175- else if ((size(kC) >= aK))
2176- then throw((("Your already staked max (" + toString(aK)) + ") lands"))
2088+ if (containsElement(kq, bp))
2089+ then throw(("Your staked lands already contain " + bp))
2090+ else if ((size(kq) >= au))
2091+ then throw((("Your already staked max (" + toString(au)) + ") lands"))
21772092 else {
2178- let ia = valueOrElse(getInteger(bD(Q)), 0)
2179- let kM = dx(cO)
2180- let lb = valueOrElse(getInteger(kM), 0)
2181- let lc = invoke(dg, "onStakeUnstakeLand", [cO], nil)
2182- $Tuple2(([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cO), lastBlock.timestamp), StringEntry(kF, makeString_11C((kC :+ Q), "_")), IntegerEntry(kM, (lb + ji)), StringEntry(bt(Q), cO), StringEntry(eu(es), cO), IntegerEntry(et(Q, cO), ia), StringEntry(dt(), fb), StringEntry(kZ, la)] ++ kW), lc)
2093+ let hN = valueOrElse(getInteger(bq(bp)), 0)
2094+ let kA = dk(cB)
2095+ let kP = valueOrElse(getInteger(kA), 0)
2096+ let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil)
2097+ $Tuple2(([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(ap, bp, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ bp), "_")), IntegerEntry(kA, (kP + iW)), StringEntry(bf(bp), cB), StringEntry(eg(ee), cB), IntegerEntry(ef(bp, cB), hN), StringEntry(dg(), eS), StringEntry(kN, kO)] ++ kK), kQ)
21832098 }
21842099 }
21852100 }
21862101 }
21872102 }
21882103 }
21892104 }
21902105
21912106
21922107
2193-@Callable(gK)
2194-func unstakeLand (jo) = {
2195- let kW = kT(gK)
2196- if ((size(gK.payments) != 0))
2108+@Callable(gv)
2109+func unstakeLand (jc) = {
2110+ let kK = kH(gv)
2111+ if ((size(gv.payments) != 0))
21972112 then throw("No payments required")
21982113 else {
2199- let c = toString(gK.caller)
2200- let ga = jm(c, eA, jo)
2201- let Q = ga._2
2202- let jw = ga._3
2203- let kF = dw(c)
2204- let gG = gM(jw[dl])
2205- let ji = dG(jw[dk])
2206- let hZ = (ji / cH)
2207- let fb = gL(gG, hZ, -1)
2208- let kZ = du(jw[dm])
2209- let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2210- let la = makeString(gE(kJ, gG, hZ, -1), "_")
2211- let jT = jJ(c, Q, ji, eA)
2212- let kC = split_51C(valueOrElse(getString(kF), ""), "_")
2213- let dc = indexOf(kC, Q)
2214- if (!(isDefined(dc)))
2215- then throw(("Your staked lands don't contain " + Q))
2114+ let c = toString(gv.caller)
2115+ let fN = ja(c, em, jc)
2116+ let bp = fN._2
2117+ let jk = fN._3
2118+ let kt = dj(c)
2119+ let gr = gx(jk[cY])
2120+ let iW = dt(jk[cX])
2121+ let hM = (iW / cu)
2122+ let eS = gw(gr, hM, -1)
2123+ let kN = dh(jk[cZ])
2124+ let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_")
2125+ let kO = makeString(gp(kx, gr, hM, -1), "_")
2126+ let jH = jx(c, bp, iW, em)
2127+ let kq = split_51C(valueOrElse(getString(kt), ""), "_")
2128+ let cP = indexOf(kq, bp)
2129+ if (!(isDefined(cP)))
2130+ then throw(("Your staked lands don't contain " + bp))
22162131 else {
2217- let aA = lastBlock.timestamp
2218- let ld = valueOrElse(getInteger(df, bP(c)), 0)
2219- if ((ld >= aA))
2220- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ld)))
2132+ let bW = lastBlock.timestamp
2133+ let kR = valueOrElse(getInteger(cS, bB(c)), 0)
2134+ if ((kR >= bW))
2135+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR)))
22212136 else {
2222- let le = (valueOrElse(getInteger(dg, b(c)), 0) + cD)
2223- if ((le > aA))
2224- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(le)))
2137+ let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq)
2138+ if ((kS > bW))
2139+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS)))
22252140 else {
2226- let kM = dx(c)
2227- let kN = valueOrElse(getInteger(kM), 0)
2228- let lf = if ((ji > kN))
2141+ let kA = dk(c)
2142+ let kB = valueOrElse(getInteger(kA), 0)
2143+ let kT = if ((iW > kB))
22292144 then 0
2230- else (kN - ji)
2231- let lc = invoke(dg, "onStakeUnstakeLand", [c], nil)
2232- $Tuple2(([ScriptTransfer(gK.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dt(), fb), StringEntry(kZ, la), StringEntry(jT._2, makeString(jT._3, ":")), if ((size(kC) > 1))
2233- then StringEntry(kF, makeString_11C(removeByIndex(kC, value(dc)), "_"))
2234- else DeleteEntry(kF), IntegerEntry(kM, lf)] ++ kW), lc)
2145+ else (kB - iW)
2146+ let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil)
2147+ $Tuple2(([ScriptTransfer(gv.caller, 1, fromBase58String(bp)), DeleteEntry(bi(bp)), DeleteEntry(bl(ap, bp, c)), StringEntry(dg(), eS), StringEntry(kN, kO), StringEntry(jH._2, makeString(jH._3, ":")), if ((size(kq) > 1))
2148+ then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_"))
2149+ else DeleteEntry(kt), IntegerEntry(kA, kT)] ++ kK), kQ)
22352150 }
22362151 }
22372152 }
22382153 }
22392154 }
22402155
22412156
22422157
2243-@Callable(gK)
2158+@Callable(gv)
22442159 func stakeDuck () = {
2245- let kW = kT(gK)
2246- if ((size(gK.payments) != 1))
2160+ let kK = kH(gv)
2161+ if ((size(gv.payments) != 1))
22472162 then throw("Exactly one payment required")
22482163 else {
2249- let kX = value(gK.payments[0])
2250- let bu = value(kX.assetId)
2251- let cO = toString(gK.caller)
2252- if ((kX.amount != 1))
2253- then throw((("NFT " + aG) + " token should be attached as payment"))
2164+ let kL = value(gv.payments[0])
2165+ let bg = value(kL.assetId)
2166+ let cB = toString(gv.caller)
2167+ if ((kL.amount != 1))
2168+ then throw((("NFT " + aq) + " token should be attached as payment"))
22542169 else {
2255- let js = value(assetInfo(bu))
2256- let lg = if (if (cv)
2257- then (js.issuer == this)
2170+ let jg = value(assetInfo(bg))
2171+ let kU = if (if (ci)
2172+ then (jg.issuer == this)
22582173 else false)
2259- then contains(js.name, aH)
2174+ then contains(jg.name, ar)
22602175 else false
2261- if (if (if ((js.issuer != dW))
2262- then (js.issuer != dX)
2176+ if (if (if ((jg.issuer != dJ))
2177+ then (jg.issuer != dK)
22632178 else false)
2264- then !(lg)
2179+ then !(kU)
22652180 else false)
2266- then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token"))
2267- else if (if (!(contains(js.name, aG)))
2268- then !(lg)
2181+ then throw((((("Unknown issuer of " + aq) + " or ") + ar) + " token"))
2182+ else if (if (!(contains(jg.name, aq)))
2183+ then !(kU)
22692184 else false)
2270- then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted"))
2185+ then throw((((("Only NFT " + aq) + " or ") + ar) + " tokens are accepted"))
22712186 else {
2272- let lh = toBase58String(bu)
2273- let jt = bw(lh)
2274- if (isDefined(getInteger(jt)))
2275- then throw((("NFT " + js.name) + " is already staked"))
2276- else if (isDefined(getString(bM(cO))))
2277- then throw(("You already staked one duck: " + js.name))
2187+ let kV = toBase58String(bg)
2188+ let jh = bi(kV)
2189+ if (isDefined(getInteger(jh)))
2190+ then throw((("NFT " + jg.name) + " is already staked"))
2191+ else if (isDefined(getString(by(cB))))
2192+ then throw(("You already staked one duck: " + jg.name))
22782193 else {
2279- let li = bO(lh)
2280- let ch = getString(li)
2281- let hL = bN(lh)
2282- let lj = getString(hL)
2283- let jb = A(lh)
2284- let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2285- let lk = valueOrElse(getInteger(jb), jc)
2286- ([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cO), lastBlock.timestamp), StringEntry(bL(lh), cO), StringEntry(bM(cO), lh)] ++ (if (isDefined(ch))
2194+ let kW = bA(kV)
2195+ let bT = getString(kW)
2196+ let hx = bz(kV)
2197+ let kX = getString(hx)
2198+ let iP = t(kV)
2199+ let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2200+ let kY = valueOrElse(getInteger(iP), iQ)
2201+ ([IntegerEntry(jh, lastBlock.timestamp), IntegerEntry(bl(aq, toBase58String(bg), cB), lastBlock.timestamp), StringEntry(bx(kV), cB), StringEntry(by(cB), kV)] ++ (if (isDefined(bT))
22872202 then nil
2288- else ([StringEntry(li, aN)] ++ (if (isDefined(lj))
2203+ else ([StringEntry(kW, ax)] ++ (if (isDefined(kX))
22892204 then nil
2290- else (([StringEntry(hL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(jb, lk)) ++ kW)))))
2205+ else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iP, kY)) ++ kK)))))
22912206 }
22922207 }
22932208 }
22942209 }
22952210 }
22962211
22972212
22982213
2299-@Callable(gK)
2300-func unstakeDuck (lh) = {
2301- let kW = kT(gK)
2302- if ((size(gK.payments) != 0))
2214+@Callable(gv)
2215+func unstakeDuck (kV) = {
2216+ let kK = kH(gv)
2217+ if ((size(gv.payments) != 0))
23032218 then throw("No payments required")
23042219 else {
2305- let bu = fromBase58String(lh)
2306- let cO = toString(gK.caller)
2307- let js = value(assetInfo(bu))
2308- let jt = bw(lh)
2309- if (!(isDefined(getInteger(jt))))
2310- then throw((("NFT " + js.name) + " is not staked"))
2311- else if (!(isDefined(getString(bM(cO)))))
2312- then throw((("The duck " + js.name) + " is not staked"))
2220+ let bg = fromBase58String(kV)
2221+ let cB = toString(gv.caller)
2222+ let jg = value(assetInfo(bg))
2223+ let jh = bi(kV)
2224+ if (!(isDefined(getInteger(jh))))
2225+ then throw((("NFT " + jg.name) + " is not staked"))
2226+ else if (!(isDefined(getString(by(cB)))))
2227+ then throw((("The duck " + jg.name) + " is not staked"))
23132228 else {
2314- let jv = valueOrErrorMessage(getString(bL(lh)), (("NFT " + js.name) + " is orphaned"))
2315- if ((jv != cO))
2229+ let jj = valueOrErrorMessage(getString(bx(kV)), (("NFT " + jg.name) + " is orphaned"))
2230+ if ((jj != cB))
23162231 then throw("Staked NFT is not yours")
2317- else if (kq(lh))
2232+ else if (ke(kV))
23182233 then throw("unstakeDuck_checkTournament")
23192234 else {
2320- let jb = A(lh)
2321- let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2322- let av = valueOrElse(getInteger(jb), jc)
2323- if ((jc > av))
2324- then throw((("Please heal your duck to " + toString(jc)) + "hp before unstaking"))
2325- else ([ScriptTransfer(gK.caller, 1, bu), DeleteEntry(jt), DeleteEntry(jb), DeleteEntry(bO(lh)), DeleteEntry(bL(lh)), DeleteEntry(bz(aG, lh, cO)), DeleteEntry(bM(cO))] ++ kW)
2235+ let iP = t(kV)
2236+ let iQ = ab(valueOrElse(getInteger(x(kV)), 0))
2237+ let an = valueOrElse(getInteger(iP), iQ)
2238+ if ((iQ > an))
2239+ then throw((("Please heal your duck to " + toString(iQ)) + "hp before unstaking"))
2240+ else ([ScriptTransfer(gv.caller, 1, bg), DeleteEntry(jh), DeleteEntry(iP), DeleteEntry(bA(kV)), DeleteEntry(bx(kV)), DeleteEntry(bl(aq, kV, cB)), DeleteEntry(by(cB))] ++ kK)
23262241 }
23272242 }
23282243 }
23292244 }
23302245
23312246
23322247
2333-@Callable(gK)
2334-func claimRes (eI,ll) = {
2335- let kW = kT(gK)
2336- if ((size(gK.payments) != 0))
2248+@Callable(gv)
2249+func claimRes (ez,kZ) = {
2250+ let kK = kH(gv)
2251+ if ((size(gv.payments) != 0))
23372252 then throw("No payments required")
23382253 else {
2339- let c = toString(gK.originCaller)
2340- let fj = jx(c, eI, eA, ll)
2341- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2342- $Tuple2(((((fj._1 ++ kf(B, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._3[bn])
2343- }
2344- }
2345-
2346-
2347-
2348-@Callable(gK)
2349-func claimResToWH (eI,ll) = {
2350- let kW = kT(gK)
2351- if ((size(gK.payments) != 0))
2254+ let c = toString(gv.originCaller)
2255+ let fa = jl(c, ez, em, kZ)
2256+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2257+ $Tuple2(((((fa._1 ++ jT(u, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._3[aZ])
2258+ }
2259+ }
2260+
2261+
2262+
2263+@Callable(gv)
2264+func claimResToWH (ez,kZ) = {
2265+ let kK = kH(gv)
2266+ if ((size(gv.payments) != 0))
23522267 then throw("No payments required")
23532268 else {
2354- let c = toString(gK.originCaller)
2355- let fj = jx(c, eI, ez, ll)
2356- $Tuple2(((((fj._1 ++ kg(c, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._5[be])
2357- }
2358- }
2359-
2360-
2361-
2362-@Callable(gK)
2363-func flight (iQ,iR) = {
2364- let kW = kT(gK)
2365- if ((size(gK.payments) != 0))
2269+ let c = toString(gv.originCaller)
2270+ let fa = jl(c, ez, el, kZ)
2271+ $Tuple2(((((fa._1 ++ jU(c, fraction(N, ez, ct))._1) :+ StringEntry(fa._2, makeString(fa._3, ":"))) :+ StringEntry(fa._4, makeString(fa._5, ":"))) ++ kK), fa._5[aQ])
2272+ }
2273+ }
2274+
2275+
2276+
2277+@Callable(gv)
2278+func flight (iE,iF) = {
2279+ let kK = kH(gv)
2280+ if ((size(gv.payments) != 0))
23662281 then throw("No payments required")
23672282 else {
2368- let bQ = toString(gK.caller)
2369- let hp = iP(bQ, iQ, iR)
2370- let iV = hp._1
2371- let B = hp._2
2372- let li = bO(B)
2373- let jq = valueOrElse(getString(li), aN)
2374- let iX = hp._4
2375- if ((iX == jq))
2283+ let bC = toString(gv.caller)
2284+ let ha = iD(bC, iE, iF)
2285+ let iJ = ha._1
2286+ let u = ha._2
2287+ let kW = bA(u)
2288+ let je = valueOrElse(getString(kW), ax)
2289+ let iL = ha._4
2290+ if ((iL == je))
23762291 then throw("You can't fly to the same location")
23772292 else {
2378- let cr = split(iX, "_")
2379- let lm = (cr[br] == "T")
2380- let ln = (cr[br] == "D")
2381- let gx = G(B)
2382- let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2383- let lp = fk(lo, hp._5)
2384- let lq = lp._1
2385- let lr = lp._2
2386- let ls = if (!(cl(dh, jq)))
2387- then if (lm)
2388- then cp(jq, iX, 5)
2389- else if (!(ln))
2390- then if ((iV > 0))
2391- then $Tuple2(iX, iV)
2392- else $Tuple2(jq, 0)
2393- else if ((iV > 0))
2293+ let ce = split(iL, "_")
2294+ let la = (ce[bd] == "T")
2295+ let lb = (ce[bd] == "D")
2296+ let gh = z(u)
2297+ let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2298+ let ld = fb(lc, ha._5)
2299+ let le = ld._1
2300+ let lf = ld._2
2301+ let hp = ld._3
2302+ let lg = if (!(bY(cU, je)))
2303+ then if (la)
2304+ then cc(je, iL, 5)
2305+ else if (!(lb))
2306+ then if ((iJ > 0))
2307+ then $Tuple2(iL, iJ)
2308+ else $Tuple2(je, 0)
2309+ else if ((iJ > 0))
23942310 then {
2395- let dA = invoke(this, "processDelivery", [B], nil)
2396- if ((dA == dA))
2397- then $Tuple2(jq, iV)
2311+ let dn = invoke(this, "processDelivery", [u], nil)
2312+ if ((dn == dn))
2313+ then $Tuple2(je, iJ)
23982314 else throw("Strict value is not equal to itself.")
23992315 }
2400- else $Tuple2(jq, 0)
2401- else if (cg(dh, jq))
2402- then if (!(cg(dh, iX)))
2316+ else $Tuple2(je, 0)
2317+ else if (bS(cU, je))
2318+ then if (!(bS(cU, iL)))
24032319 then throw("Your duck is taking part in the tournament")
24042320 else {
2405- let lt = parseIntValue(cr[bs])
2406- let lu = split(jq, "_")
2407- let ci = valueOrElse(getInteger(dh, bT), 0)
2408- if ((lt != (parseIntValue(lu[bs]) + 1)))
2409- then cp(jq, iX, 7)
2410- else if ((iV > 0))
2321+ let lh = parseIntValue(ce[be])
2322+ let li = split(je, "_")
2323+ let bU = valueOrElse(getInteger(cU, bF), 0)
2324+ if ((lh != (parseIntValue(li[be]) + 1)))
2325+ then cc(je, iL, 7)
2326+ else if ((iJ > 0))
24112327 then {
2412- let lv = valueOrElse(getInteger(dh, bX(ci, B)), 0)
2413- let lw = if ((lt > lv))
2414- then invoke(dh, "saveDuckResult", [B, lt], nil)
2328+ let lj = valueOrElse(getInteger(cU, bJ(bU, u)), 0)
2329+ let lk = if ((lh > lj))
2330+ then invoke(cU, "saveDuckResult", [u, lh], nil)
24152331 else unit
2416- if ((lw == lw))
2417- then $Tuple2(iX, iV)
2332+ if ((lk == lk))
2333+ then $Tuple2(iL, iJ)
24182334 else throw("Strict value is not equal to itself.")
24192335 }
2420- else $Tuple2(jq, 0)
2336+ else $Tuple2(je, 0)
24212337 }
2422- else throw(("Unknown curLocation:" + jq))
2423- let lx = ls._1
2424- let ly = ls._2
2425- $Tuple2(((([StringEntry(li, lx), StringEntry(gx, lq), IntegerEntry(A(B), ly)] ++ kW) ++ (if (lr)
2426- then [StringEntry(M(B), "0_0_0_0_0")]
2427- else nil)) ++ kf(B, if ((iV > 0))
2428- then Y
2429- else Z)._1), hp._3)
2338+ else throw(("Unknown curLocation:" + je))
2339+ let ll = lg._1
2340+ let lm = lg._2
2341+ $Tuple2(((([StringEntry(kW, ll), StringEntry(gh, le), IntegerEntry(t(u), lm)] ++ kK) ++ (if (lf)
2342+ then [StringEntry(F(u), "0_0_0_0_0")]
2343+ else nil)) ++ jT(u, if ((iJ > 0))
2344+ then O
2345+ else P)._1), ha._3)
24302346 }
24312347 }
24322348 }
24332349
24342350
24352351
2436-@Callable(gK)
2437-func heal (lz,lA,lB) = {
2438- let kW = kT(gK)
2439- if (if (if ((0 > lz))
2352+@Callable(gv)
2353+func heal (ln,lo,lp) = {
2354+ let kK = kH(gv)
2355+ if (if (if ((0 > ln))
24402356 then true
2441- else (0 > lA))
2357+ else (0 > lo))
24422358 then true
2443- else (0 > lB))
2359+ else (0 > lp))
24442360 then throw("Quantity cannot be negative")
24452361 else {
2446- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2447- if (kq(B))
2362+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2363+ if (ke(u))
24482364 then throw("heal_checkTournament")
24492365 else {
2450- let lC = [lz, lA, lB]
2451- let jb = A(B)
2452- let jc = aj(valueOrElse(getInteger(E(B)), 0))
2453- let lD = valueOrElse(getInteger(jb), jc)
2454- if ((lD >= jc))
2455- then throw((("HP should be < " + toString(jc)) + " to heal"))
2366+ let lq = [ln, lo, lp]
2367+ let iP = t(u)
2368+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2369+ let lr = valueOrElse(getInteger(iP), iQ)
2370+ if ((lr >= iQ))
2371+ then throw((("HP should be < " + toString(iQ)) + " to heal"))
24562372 else {
2457- let hL = bN(B)
2458- let io = hK(hL)
2459- let lE = if ((io[bp] == ""))
2373+ let hx = bz(u)
2374+ let ib = hw(hx)
2375+ let ls = if ((ib[bb] == ""))
24602376 then nil
2461- else split_4C(io[bp], "_")
2462- func lF (eR,co) = {
2463- let dC = eR._2
2464- let hg = if ((size(lE) > dC))
2465- then parseIntValue(lE[dC])
2377+ else split_4C(ib[bb], "_")
2378+ func lt (eI,cb) = {
2379+ let dp = eI._2
2380+ let gR = if ((size(ls) > dp))
2381+ then parseIntValue(ls[dp])
24662382 else 0
2467- if ((3 > dC))
2383+ if ((3 > dp))
24682384 then {
2469- let lG = lC[dC]
2470- if ((lG > hg))
2471- then throw(((("You have only " + toString(hg)) + " of ") + aT[dC]))
2472- else $Tuple3((eR._1 :+ toString((hg - lG))), (dC + 1), (eR._3 + (parseIntValue(split(co, "_")[aZ]) * lG)))
2385+ let lu = lq[dp]
2386+ if ((lu > gR))
2387+ then throw(((("You have only " + toString(gR)) + " of ") + aG[dp]))
2388+ else $Tuple3((eI._1 :+ toString((gR - lu))), (dp + 1), (eI._3 + (parseIntValue(split(cb, "_")[aL]) * lu)))
24732389 }
2474- else $Tuple3((eR._1 :+ toString(hg)), (dC + 1), eR._3)
2390+ else $Tuple3((eI._1 :+ toString(gR)), (dp + 1), eI._3)
24752391 }
24762392
2477- let fj = {
2478- let eT = aX
2479- let eU = size(eT)
2480- let eV = $Tuple3(nil, 0, 0)
2481- func eW (eX,eY) = if ((eY >= eU))
2482- then eX
2483- else lF(eX, eT[eY])
2484-
2485- func eZ (eX,eY) = if ((eY >= eU))
2486- then eX
2393+ let fa = {
2394+ let eK = aJ
2395+ let eL = size(eK)
2396+ let eM = $Tuple3(nil, 0, 0)
2397+ func eN (eO,eP) = if ((eP >= eL))
2398+ then eO
2399+ else lt(eO, eK[eP])
2400+
2401+ func eQ (eO,eP) = if ((eP >= eL))
2402+ then eO
24872403 else throw("List size exceeds 50")
24882404
2489- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
2405+ eQ(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eN(eM, 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)
24902406 }
2491- let lH = min([jc, (lD + fj._3)])
2492- $Tuple2((([IntegerEntry(jb, lH), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], makeString(fj._1, "_")], ":"))] ++ kW) ++ kf(B, (ag * ((lz + lA) + lB)))._1), lH)
2407+ let lv = min([iQ, (lr + fa._3)])
2408+ $Tuple2((([IntegerEntry(iP, lv), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], makeString(fa._1, "_")], ":"))] ++ kK) ++ jT(u, (Y * ((ln + lo) + lp)))._1), lv)
24932409 }
24942410 }
24952411 }
24962412 }
24972413
24982414
24992415
2500-@Callable(gK)
2416+@Callable(gv)
25012417 func healES () = {
2502- let kW = kT(gK)
2503- if ((size(gK.payments) != 1))
2418+ let kK = kH(gv)
2419+ if ((size(gv.payments) != 1))
25042420 then throw("Exactly one payment required")
25052421 else {
2506- let kX = value(gK.payments[0])
2507- if ((kX.assetId != cA))
2422+ let kL = value(gv.payments[0])
2423+ if ((kL.assetId != cn))
25082424 then throw("Allowed USDT payment only!")
25092425 else {
2510- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2511- if (kq(B))
2426+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2427+ if (ke(u))
25122428 then throw("healES_checkTournament")
25132429 else {
2514- let jb = A(B)
2515- let jc = aj(valueOrElse(getInteger(E(B)), 0))
2516- let lD = valueOrElse(getInteger(jb), jc)
2517- if ((lD > 0))
2430+ let iP = t(u)
2431+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
2432+ let lr = valueOrElse(getInteger(iP), iQ)
2433+ if ((lr > 0))
25182434 then throw("HP should be 0 to call Emergency Service")
25192435 else {
2520- let hL = bN(B)
2521- let io = hK(hL)
2522- let lE = if ((io[bp] == ""))
2436+ let hx = bz(u)
2437+ let ib = hw(hx)
2438+ let ls = if ((ib[bb] == ""))
25232439 then nil
2524- else split_4C(io[bp], "_")
2525- let lI = if ((size(lE) > 0))
2526- then parseIntValue(lE[0])
2440+ else split_4C(ib[bb], "_")
2441+ let lw = if ((size(ls) > 0))
2442+ then parseIntValue(ls[0])
25272443 else 0
2528- let lJ = if ((size(lE) > 1))
2529- then parseIntValue(lE[1])
2444+ let lx = if ((size(ls) > 1))
2445+ then parseIntValue(ls[1])
25302446 else 0
2531- let lK = if ((size(lE) > 2))
2532- then parseIntValue(lE[2])
2447+ let ly = if ((size(ls) > 2))
2448+ then parseIntValue(ls[2])
25332449 else 0
2534- if (if (if ((lI > 0))
2450+ if (if (if ((lw > 0))
25352451 then true
2536- else (lJ > 0))
2452+ else (lx > 0))
25372453 then true
2538- else (lK > 0))
2454+ else (ly > 0))
25392455 then throw("You have to use own Medical Kit")
25402456 else {
2541- let lL = getString(de, bR())
2542- let lM = if (isDefined(lL))
2543- then split_4C(value(lL), "_")
2457+ let lz = getString(cR, bD())
2458+ let lA = if (isDefined(lz))
2459+ then split_4C(value(lz), "_")
25442460 else nil
2545- let lN = if ((size(lM) > 0))
2546- then parseIntValue(lM[0])
2461+ let lB = if ((size(lA) > 0))
2462+ then parseIntValue(lA[0])
25472463 else 0
2548- if ((0 >= lN))
2464+ if ((0 >= lB))
25492465 then throw("There are no Medical Kits L1 at Emergency Service storage")
25502466 else {
2551- let lH = (lD + parseIntValue(split(aX[0], "_")[aZ]))
2552- let lO = makeString([toString((lN - 1)), removeByIndex(lM, 0)], "_")
2553- let co = split(aX[0], "_")
2554- let lP = cn(co)
2555- let lQ = fraction((lP * aP), aO, (cG * bc))
2556- if ((kX.amount != lQ))
2557- then throw(("Payment attached should be " + toString(lQ)))
2467+ let lv = (lr + parseIntValue(split(aJ[0], "_")[aL]))
2468+ let lC = makeString([toString((lB - 1)), removeByIndex(lA, 0)], "_")
2469+ let cb = split(aJ[0], "_")
2470+ let lD = ca(cb)
2471+ let lE = fraction((lD * az), ay, (ct * aO))
2472+ if ((kL.amount != lE))
2473+ then throw(("Payment attached should be " + toString(lE)))
25582474 else {
2559- let fj = dy(invoke(de, "updateEsStorage", [lO], [AttachedPayment(cA, lQ)]))
2560- $Tuple2(((kW :+ IntegerEntry(jb, lH)) ++ kf(B, aa)._1), fj)
2475+ let fa = dl(invoke(cR, "updateEsStorage", [lC], [AttachedPayment(cn, lE)]))
2476+ $Tuple2(((kK :+ IntegerEntry(iP, lv)) ++ jT(u, S)._1), fa)
25612477 }
25622478 }
25632479 }
25642480 }
25652481 }
25662482 }
25672483 }
25682484 }
25692485
25702486
25712487
2572-@Callable(gK)
2573-func updateBackpack (B,lR) = if ((gK.caller != de))
2488+@Callable(gv)
2489+func updateBackpack (u,lF) = if ((gv.caller != cR))
25742490 then throw("permission denied")
2575- else $Tuple2([StringEntry(bN(B), lR)], lR)
2576-
2577-
2578-
2579-@Callable(gK)
2491+ else $Tuple2([StringEntry(bz(u), lF)], lF)
2492+
2493+
2494+
2495+@Callable(gv)
25802496 func commitForRandom () = {
2581- let kW = kT(gK)
2582- let lS = (height + dr)
2583- let c = toString(gK.caller)
2584- $Tuple2(([IntegerEntry(ds(c), lS)] ++ kW), lS)
2585- }
2586-
2587-
2588-
2589-@Callable(gK)
2590-func revealRandom (dS) = {
2591- let kW = kT(gK)
2592- let c = toString(gK.caller)
2593- let lT = ds(c)
2594- let lS = valueOrErrorMessage(getInteger(lT), "You have to commitForRandom() first!")
2595- if ((lS > height))
2596- then throw(("Random number is not ready yet, wait until height = " + toString(lS)))
2497+ let kK = kH(gv)
2498+ let lG = (height + de)
2499+ let c = toString(gv.caller)
2500+ $Tuple2(([IntegerEntry(df(c), lG)] ++ kK), lG)
2501+ }
2502+
2503+
2504+
2505+@Callable(gv)
2506+func revealRandom (dF) = {
2507+ let kK = kH(gv)
2508+ let c = toString(gv.caller)
2509+ let lH = df(c)
2510+ let lG = valueOrErrorMessage(getInteger(lH), "You have to commitForRandom() first!")
2511+ if ((lG > height))
2512+ then throw(("Random number is not ready yet, wait until height = " + toString(lG)))
25972513 else {
2598- let dU = value(value(blockInfoByHeight(lS)).vrf)
2599- let dT = toBytes(valueOrElse(getString(dK(c)), ""))
2600- let lU = dR(dS, dT, dU)
2601- $Tuple2(([DeleteEntry(lT)] ++ kW), lU)
2602- }
2603- }
2604-
2605-
2606-
2607-@Callable(gK)
2514+ let dH = value(value(blockInfoByHeight(lG)).vrf)
2515+ let dG = toBytes(valueOrElse(getString(dx(c)), ""))
2516+ let lI = dE(dF, dG, dH)
2517+ $Tuple2(([DeleteEntry(lH)] ++ kK), lI)
2518+ }
2519+ }
2520+
2521+
2522+
2523+@Callable(gv)
26082524 func buySLand () = {
2609- let kW = kT(gK)
2610- if ((size(gK.payments) != 1))
2525+ let kK = kH(gv)
2526+ if ((size(gv.payments) != 1))
26112527 then throw("Exactly one payment required")
26122528 else {
2613- let kX = value(gK.payments[0])
2614- if ((kX.assetId != cA))
2529+ let kL = value(gv.payments[0])
2530+ if ((kL.assetId != cn))
26152531 then throw("Allowed USDT payment only!")
2616- else if ((kX.amount != ee))
2617- then throw(("Payment attached should be " + toString(ee)))
2532+ else if ((kL.amount != dQ))
2533+ then throw(("Payment attached should be " + toString(dQ)))
26182534 else {
2619- let fj = iI(gK.caller, gK.transactionId)
2620- let lV = dB(invoke(di, "burnAcres", [eg], nil))
2621- $Tuple2((((fj._1 :+ ScriptTransfer(de, kX.amount, cA)) ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
2535+ let fa = iw(gv.caller, gv.transactionId)
2536+ let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2537+ $Tuple2((((fa._1 :+ ScriptTransfer(cR, kL.amount, cn)) ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
26222538 }
26232539 }
26242540 }
26252541
26262542
26272543
2628-@Callable(gK)
2629-func expedition (iQ,iR) = {
2630- let kW = kT(gK)
2631- if ((size(gK.payments) != 0))
2544+@Callable(gv)
2545+func expedition (iE,iF) = {
2546+ let kK = kH(gv)
2547+ if ((size(gv.payments) != 0))
26322548 then throw("No payments required")
26332549 else {
2634- let bQ = toString(gK.caller)
2635- let hp = iP(bQ, iQ, iR)
2636- let B = hp._2
2637- let jb = A(B)
2638- let hL = bN(B)
2639- let io = hK(hL)
2640- let jQ = split(io[bo], "_")
2641- let jS = makeString(fd(true, jQ, ed), "_")
2642- let gx = G(B)
2643- let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2644- let lW = fk(lo, hp._5)
2645- let lq = lW._1
2646- let lr = lW._2
2647- let lX = iI(gK.caller, gK.transactionId)
2648- let iO = lX._2._1
2649- let fj = if ((0 >= hp._1))
2650- then $Tuple3([IntegerEntry(jb, 0), StringEntry(gx, lq)], "", 0)
2651- else $Tuple3((lX._1 ++ (if (lr)
2652- then [StringEntry(M(B), "0_0_0_0_0")]
2653- else ((((nil :+ StringEntry(bO(B), makeString([lX._2._2, "L", iO], "_"))) :+ IntegerEntry(jb, hp._1)) :+ StringEntry(gx, lq)) :+ StringEntry(hL, makeString([io[bm], io[bn], jS, io[bp]], ":"))))), iO, hp._3)
2654- if (kq(B))
2550+ let bC = toString(gv.caller)
2551+ let ha = iD(bC, iE, iF)
2552+ let u = ha._2
2553+ let iP = t(u)
2554+ let hx = bz(u)
2555+ let ib = hw(hx)
2556+ let jE = split(ib[ba], "_")
2557+ let jG = makeString(eU(true, jE, dP), "_")
2558+ let gh = z(u)
2559+ let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
2560+ let lK = fb(lc, ha._5)
2561+ let le = lK._1
2562+ let lf = lK._2
2563+ let hp = lK._3
2564+ let lL = iw(gv.caller, gv.transactionId)
2565+ let iC = lL._2._1
2566+ let fa = if ((0 >= ha._1))
2567+ then $Tuple3([IntegerEntry(iP, 0), StringEntry(gh, le)], "", 0)
2568+ else $Tuple3((lL._1 ++ (if (lf)
2569+ then [StringEntry(F(u), "0_0_0_0_0")]
2570+ else ((((nil :+ StringEntry(bA(u), makeString([lL._2._2, "L", iC], "_"))) :+ IntegerEntry(iP, ha._1)) :+ StringEntry(gh, le)) :+ StringEntry(hx, makeString([ib[aY], ib[aZ], jG, ib[bb]], ":"))))), iC, ha._3)
2571+ if (ke(u))
26552572 then throw("expedition_checkTournament")
26562573 else {
2657- let lV = dB(invoke(di, "burnAcres", [eg], nil))
2658- $Tuple2(((fj._1 ++ kf(B, ac)._1) ++ kW), $Tuple3(fj._2, fj._3, lV))
2574+ let lJ = do(invoke(cV, "burnAcres", [dS], nil))
2575+ $Tuple2(((fa._1 ++ jT(u, U)._1) ++ kK), $Tuple3(fa._2, fa._3, lJ))
26592576 }
26602577 }
26612578 }
26622579
26632580
26642581
2665-@Callable(gK)
2582+@Callable(gv)
26662583 func buySLandForAcres () = {
2667- let kW = kT(gK)
2668- if ((size(gK.payments) != 1))
2584+ let kK = kH(gv)
2585+ if ((size(gv.payments) != 1))
26692586 then throw("exactly 1 payment must be attached")
26702587 else {
2671- let kX = gK.payments[0]
2672- let fq = kX.amount
2673- if (if (!(isDefined(kX.assetId)))
2588+ let kL = gv.payments[0]
2589+ let fh = kL.amount
2590+ if (if (!(isDefined(kL.assetId)))
26742591 then true
2675- else (value(kX.assetId) != dq))
2592+ else (value(kL.assetId) != dd))
26762593 then throw("ACRES payments only!")
2677- else if ((fq != eg))
2678- then throw(("Payment attached should be " + toString(eg)))
2594+ else if ((fh != dS))
2595+ then throw(("Payment attached should be " + toString(dS)))
26792596 else {
2680- let fj = iI(gK.caller, gK.transactionId)
2681- let lV = dB(invoke(di, "burnAcres", [eg], [AttachedPayment(dq, fq)]))
2682- $Tuple2(((fj._1 ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
2597+ let fa = iw(gv.caller, gv.transactionId)
2598+ let lJ = do(invoke(cV, "burnAcres", [dS], [AttachedPayment(dd, fh)]))
2599+ $Tuple2(((fa._1 ++ jU(toString(gv.caller), U)._1) ++ kK), $Tuple2(fa._2._1, lJ))
26832600 }
26842601 }
26852602 }
26862603
26872604
26882605
2689-@Callable(gK)
2690-func upgradeInfra (Q) = {
2691- let kW = kT(gK)
2692- if ((size(gK.payments) != 0))
2606+@Callable(gv)
2607+func upgradeInfra (bp) = {
2608+ let kK = kH(gv)
2609+ if ((size(gv.payments) != 0))
26932610 then throw("No payments required")
26942611 else {
2695- let fj = jK(true, gK.caller, 0, Q)
2696- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2697- $Tuple2(((fj._1 ++ kW) ++ kf(B, fraction(ad, fj._3, cG))._1), fj._2)
2698- }
2699- }
2700-
2701-
2702-
2703-@Callable(gK)
2704-func activateArtifact (lY,lZ) = {
2705- let kW = kT(gK)
2706- if ((size(gK.payments) != 0))
2612+ let fa = jy(true, gv.caller, 0, bp)
2613+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
2614+ $Tuple2(((fa._1 ++ kK) ++ jT(u, fraction(V, fa._3, ct))._1), fa._2)
2615+ }
2616+ }
2617+
2618+
2619+
2620+@Callable(gv)
2621+func activateArtifact (lM,lN) = {
2622+ let kK = kH(gv)
2623+ if ((size(gv.payments) != 0))
27072624 then throw("No payments required")
27082625 else {
2709- let c = toString(gK.caller)
2710- let fj = {
2711- let cz = lY
2712- if (("PRESALE" == cz))
2713- then ko(c, lZ)
2714- else if (("ONBOARD" == cz))
2715- then kh(c)
2626+ let c = toString(gv.caller)
2627+ let fa = {
2628+ let cm = lM
2629+ if (("PRESALE" == cm))
2630+ then kc(c, lN)
2631+ else if (("ONBOARD" == cm))
2632+ then jV(c)
27162633 else throw("Unknown artifact")
27172634 }
2718- (fj ++ kW)
2719- }
2720- }
2721-
2722-
2723-
2724-@Callable(gK)
2725-func mergeLands (ku) = {
2726- let kW = kT(gK)
2727- if ((size(gK.payments) != 0))
2635+ (fa ++ kK)
2636+ }
2637+ }
2638+
2639+
2640+
2641+@Callable(gv)
2642+func mergeLands (ki) = {
2643+ let kK = kH(gv)
2644+ if ((size(gv.payments) != 0))
27282645 then throw("No payments required")
27292646 else {
2730- let fj = kS(toString(gK.caller), ku)
2731- $Tuple2(((fj._1 ++ kW) ++ kg(toString(gK.caller), ae)._1), fj._2)
2732- }
2733- }
2734-
2735-
2736-
2737-@Callable(gK)
2738-func cargoExchange (ma,Q) = {
2739- let kW = kT(gK)
2740- if ((size(gK.payments) != 0))
2647+ let fa = kG(toString(gv.caller), ki)
2648+ $Tuple2(((fa._1 ++ kK) ++ jU(toString(gv.caller), W)._1), fa._2)
2649+ }
2650+ }
2651+
2652+
2653+
2654+@Callable(gv)
2655+func cargoExchange (lO,bp) = {
2656+ let kK = kH(gv)
2657+ if ((size(gv.payments) != 0))
27412658 then throw("No payments required")
27422659 else {
2743- let in = split_4C(ma, ":")
2744- let c = toString(gK.originCaller)
2745- let js = value(assetInfo(fromBase58String(Q)))
2746- let jt = bw(Q)
2747- if (!(isDefined(getInteger(jt))))
2748- then throw((js.name + " is not staked"))
2660+ let ia = split_4C(lO, ":")
2661+ let c = toString(gv.originCaller)
2662+ let jg = value(assetInfo(fromBase58String(bp)))
2663+ let jh = bi(bp)
2664+ if (!(isDefined(getInteger(jh))))
2665+ then throw((jg.name + " is not staked"))
27492666 else {
2750- let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
2751- if ((jv != c))
2752- then throw((aF + " is not yours"))
2667+ let jj = valueOrErrorMessage(getString(bf(bp)), (("NFT " + jg.name) + " is orphaned"))
2668+ if ((jj != c))
2669+ then throw((ap + " is not yours"))
27532670 else {
2754- let hZ = (dG(split(js.description, "_")[dk]) / cH)
2755- let ia = valueOrElse(getInteger(bD(Q)), 0)
2756- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2757- let jq = valueOrElse(getString(bO(B)), aN)
2758- let cj = split(value(jq), "_")
2759- if ((cj[br] != "L"))
2760- then throw((("Duck location type is " + cj[br]) + ", but should be L"))
2761- else if ((cj[bs] != Q))
2762- then throw(("Duck should be on the land " + Q))
2671+ let hM = (dt(split(jg.description, "_")[cX]) / cu)
2672+ let hN = valueOrElse(getInteger(bq(bp)), 0)
2673+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2674+ let je = valueOrElse(getString(bA(u)), ax)
2675+ let bV = split(value(je), "_")
2676+ if ((bV[bd] != "L"))
2677+ then throw((("Duck location type is " + bV[bd]) + ", but should be L"))
2678+ else if ((bV[be] != bp))
2679+ then throw(("Duck should be on the land " + bp))
27632680 else {
2764- let hY = bC(Q)
2765- let hP = hX(hY, hZ, ia)
2766- let hL = bN(B)
2767- let io = hK(hL)
2768- let fj = im(in, hP, io)
2769- let ig = split(hP[bh], "_")
2770- let jH = (parseIntValue(ig[bj]) + fj._7)
2771- let jI = (parseIntValue(ig[bk]) - fj._7)
2772- ([StringEntry(hL, makeString_2C([io[bm], fj._4, fj._5, fj._6], ":")), StringEntry(hY, makeString_2C([hP[bd], fj._1, fj._2, fj._3, makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")], ":"))] ++ kW)
2681+ let hL = bo(bp)
2682+ let hC = hK(hL, hM, hN)
2683+ let hx = bz(u)
2684+ let ib = hw(hx)
2685+ let fa = hZ(ia, hC, ib)
2686+ let hT = split(hC[aT], "_")
2687+ let jv = (parseIntValue(hT[aV]) + fa._7)
2688+ let jw = (parseIntValue(hT[aW]) - fa._7)
2689+ ([StringEntry(hx, makeString_2C([ib[aY], fa._4, fa._5, fa._6], ":")), StringEntry(hL, makeString_2C([hC[aP], fa._1, fa._2, fa._3, makeString([hT[aU], toString(jv), toString(jw), hT[aX]], "_")], ":"))] ++ kK)
27732690 }
27742691 }
27752692 }
27762693 }
27772694 }
27782695
27792696
27802697
2781-@Callable(gK)
2782-func saveWarehouse (ic,Q) = if ((gK.caller != de))
2698+@Callable(gv)
2699+func saveWarehouse (hP,bp) = if ((gv.caller != cR))
27832700 then throw("Access denied")
27842701 else {
2785- let hY = bC(Q)
2786- let id = split_4C(ic, ":")
2787- if ((size(id) != 5))
2702+ let hL = bo(bp)
2703+ let hQ = split_4C(hP, ":")
2704+ if ((size(hQ) != 5))
27882705 then throw("warehouse string should contain 4 ':' separators")
27892706 else {
2790- let mb = split(id[bh], "_")[bi]
2791- let jH = hO(id)
2792- let mc = hM(id[bd])
2793- let jI = ((mc - parseIntValue(mb)) - jH)
2794- if ((0 > jI))
2707+ let lP = split(hQ[aT], "_")[aU]
2708+ let jv = hB(hQ)
2709+ let lQ = hz(hQ[aP])
2710+ let jw = ((lQ - parseIntValue(lP)) - jv)
2711+ if ((0 > jw))
27952712 then throw("Operation leads to negative free warehouse space")
27962713 else {
2797- let md = makeString_2C([id[bd], id[be], id[bf], id[bg], makeString([mb, toString(jH), toString(jI), toString(mc)], "_")], ":")
2798- $Tuple2([StringEntry(hY, md)], md)
2714+ let lR = makeString_2C([hQ[aP], hQ[aQ], hQ[aR], hQ[aS], makeString([lP, toString(jv), toString(jw), toString(lQ)], "_")], ":")
2715+ $Tuple2([StringEntry(hL, lR)], lR)
27992716 }
28002717 }
28012718 }
28022719
28032720
28042721
2805-@Callable(gK)
2806-func setCustomName (bu,kE,by) = {
2807- let kW = kT(gK)
2808- if ((size(gK.payments) != 1))
2722+@Callable(gv)
2723+func setCustomName (bg,ks,bk) = {
2724+ let kK = kH(gv)
2725+ if ((size(gv.payments) != 1))
28092726 then throw("Exactly one payment required")
28102727 else {
2811- let kX = value(gK.payments[0])
2812- if ((kX.assetId != cA))
2728+ let kL = value(gv.payments[0])
2729+ if ((kL.assetId != cn))
28132730 then throw("Allowed USDT payment only!")
2814- else if ((kX.amount != ea))
2815- then throw(("Payment should be " + toString(ea)))
2816- else if (contains(kE, "__"))
2817- then throw(("Name should not contain '__': " + kE))
2818- else if ((size(kE) > eb))
2819- then throw(("Name too long, maxLength=" + toString(eb)))
2731+ else if ((kL.amount != dM))
2732+ then throw(("Payment should be " + toString(dM)))
2733+ else if (contains(ks, "__"))
2734+ then throw(("Name should not contain '__': " + ks))
2735+ else if ((size(ks) > dN))
2736+ then throw(("Name too long, maxLength=" + toString(dN)))
28202737 else {
2821- let c = toString(gK.originCaller)
2822- let me = {
2823- let cz = by
2824- if (("ACCOUNT" == cz))
2738+ let c = toString(gv.originCaller)
2739+ let lS = {
2740+ let cm = bk
2741+ if (("ACCOUNT" == cm))
28252742 then {
2826- let mf = ew(kE)
2827- let mg = getString(mf)
2828- if (isDefined(mg))
2829- then throw(("Name already registered: " + kE))
2743+ let lT = ei(ks)
2744+ let lU = getString(lT)
2745+ if (isDefined(lU))
2746+ then throw(("Name already registered: " + ks))
28302747 else {
2831- let mh = bG(c)
2832- let mi = getString(mh)
2833- let mj = if (isDefined(mi))
2834- then [DeleteEntry(ew(value(mi)))]
2748+ let lV = bs(c)
2749+ let lW = getString(lV)
2750+ let lX = if (isDefined(lW))
2751+ then [DeleteEntry(ei(value(lW)))]
28352752 else nil
2836- (((mj :+ StringEntry(mh, kE)) :+ StringEntry(mf, c)) ++ kg(c, ab)._1)
2753+ (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jU(c, T)._1)
28372754 }
28382755 }
2839- else if (("LAND" == cz))
2756+ else if (("LAND" == cm))
28402757 then {
2841- let js = value(assetInfo(fromBase58String(bu)))
2842- let jt = bw(bu)
2843- if (!(isDefined(getInteger(jt))))
2844- then throw((js.name + " is not staked"))
2758+ let jg = value(assetInfo(fromBase58String(bg)))
2759+ let jh = bi(bg)
2760+ if (!(isDefined(getInteger(jh))))
2761+ then throw((jg.name + " is not staked"))
28452762 else {
2846- let jv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + js.name) + " is orphaned"))
2847- if ((jv != c))
2848- then throw((aF + " is not yours"))
2763+ let jj = valueOrErrorMessage(getString(bf(bg)), (("NFT " + jg.name) + " is orphaned"))
2764+ if ((jj != c))
2765+ then throw((ap + " is not yours"))
28492766 else {
2850- let mf = ep(kE)
2851- let mg = getString(mf)
2852- if (isDefined(mg))
2853- then throw(("Name already registered: " + kE))
2767+ let lT = eb(ks)
2768+ let lU = getString(lT)
2769+ if (isDefined(lU))
2770+ then throw(("Name already registered: " + ks))
28542771 else {
2855- let mk = bv(bu)
2856- let mi = getString(mk)
2857- let mj = if (isDefined(mi))
2858- then [DeleteEntry(ep(value(mi)))]
2772+ let lY = bh(bg)
2773+ let lW = getString(lY)
2774+ let lX = if (isDefined(lW))
2775+ then [DeleteEntry(eb(value(lW)))]
28592776 else nil
2860- (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kg(c, ab)._1)
2777+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jU(c, T)._1)
28612778 }
28622779 }
28632780 }
28642781 }
2865- else if (("DUCK" == cz))
2782+ else if (("DUCK" == cm))
28662783 then {
2867- let js = value(assetInfo(fromBase58String(bu)))
2868- let jt = bw(bu)
2869- if (if (!(isDefined(getInteger(jt))))
2784+ let jg = value(assetInfo(fromBase58String(bg)))
2785+ let jh = bi(bg)
2786+ if (if (!(isDefined(getInteger(jh))))
28702787 then true
2871- else !(isDefined(getString(bM(c)))))
2872- then throw((js.name + " is not staked"))
2788+ else !(isDefined(getString(by(c)))))
2789+ then throw((jg.name + " is not staked"))
28732790 else {
2874- let jv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + js.name) + " is orphaned"))
2875- if ((jv != c))
2876- then throw((aG + " is not yours"))
2791+ let jj = valueOrErrorMessage(getString(bx(bg)), (("NFT " + jg.name) + " is orphaned"))
2792+ if ((jj != c))
2793+ then throw((aq + " is not yours"))
28772794 else {
2878- let mf = ev(kE)
2879- let mg = getString(mf)
2880- if (isDefined(mg))
2881- then throw(("Name already registered: " + kE))
2795+ let lT = eh(ks)
2796+ let lU = getString(lT)
2797+ if (isDefined(lU))
2798+ then throw(("Name already registered: " + ks))
28822799 else {
2883- let mk = bF(bu)
2884- let mi = getString(mk)
2885- let mj = if (isDefined(mi))
2886- then [DeleteEntry(ev(value(mi)))]
2800+ let lY = br(bg)
2801+ let lW = getString(lY)
2802+ let lX = if (isDefined(lW))
2803+ then [DeleteEntry(eh(value(lW)))]
28872804 else nil
2888- (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kf(bu, ab)._1)
2805+ (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bg)) ++ jT(bg, T)._1)
28892806 }
28902807 }
28912808 }
28922809 }
28932810 else throw("Unknown entity type")
28942811 }
2895- $Tuple2(((me :+ ScriptTransfer(de, kX.amount, cA)) ++ kW), 0)
2812+ $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cn)) ++ kK), 0)
28962813 }
28972814 }
28982815 }
28992816
29002817
29012818
2902-@Callable(gK)
2903-func setReferrals (ml,mm) = if ((gK.callerPublicKey != cy))
2819+@Callable(gv)
2820+func setReferrals (lZ,ma) = if ((gv.callerPublicKey != cl))
29042821 then throw("Permission denied")
29052822 else {
2906- let kW = kT(gK)
2907- if ((size(gK.payments) != 0))
2823+ let kK = kH(gv)
2824+ if ((size(gv.payments) != 0))
29082825 then throw("No payments required")
2909- else if (!(isDefined(addressFromString(ml))))
2910- then throw(("Invalid address: " + ml))
2826+ else if (!(isDefined(addressFromString(lZ))))
2827+ then throw(("Invalid address: " + lZ))
29112828 else {
2912- let mn = addressFromString(mm)
2913- if (!(isDefined(mn)))
2914- then throw(("Invalid address: " + mm))
2829+ let mb = addressFromString(ma)
2830+ if (!(isDefined(mb)))
2831+ then throw(("Invalid address: " + ma))
29152832 else {
2916- let mo = getString(dK(ml))
2917- if (!(isDefined(mo)))
2833+ let mc = getString(dx(lZ))
2834+ if (!(isDefined(mc)))
29182835 then throw("oldPlayer didn't do any tx in game")
2919- else if ((0 >= wavesBalance(value(mn)).available))
2836+ else if ((0 >= wavesBalance(value(mb)).available))
29202837 then throw("newPlayer has no WAVES")
29212838 else {
2922- let mp = ex()
2923- let mq = getString(mp)
2924- let mr = if (isDefined(mq))
2925- then split_4C(value(mq), "_")
2839+ let md = ej()
2840+ let me = getString(md)
2841+ let mf = if (isDefined(me))
2842+ then split_4C(value(me), "_")
29262843 else nil
2927- if (containsElement(mr, mm))
2928- then throw((mm + " is not newbie (already has referrals)"))
2844+ if (containsElement(mf, ma))
2845+ then throw((ma + " is not newbie (already has referrals)"))
29292846 else {
2930- let ki = bH(mm)
2931- let kj = getString(ki)
2932- if (if (isDefined(kj))
2933- then isDefined(addressFromString(value(kj)))
2847+ let jW = bt(ma)
2848+ let jX = getString(jW)
2849+ if (if (isDefined(jX))
2850+ then isDefined(addressFromString(value(jX)))
29342851 else false)
2935- then throw(((mm + " already has refBy: ") + value(kj)))
2852+ then throw(((ma + " already has refBy: ") + value(jX)))
29362853 else {
2937- let ms = bK(ml)
2938- let mt = getString(ms)
2939- let mu = if (isDefined(mt))
2940- then split_4C(value(mt), "_")
2854+ let mg = bw(lZ)
2855+ let mh = getString(mg)
2856+ let mi = if (isDefined(mh))
2857+ then split_4C(value(mh), "_")
29412858 else nil
2942- if (containsElement(mu, mm))
2943- then throw((((ml + " already contains ") + mm) + " within referrals"))
2859+ if (containsElement(mi, ma))
2860+ then throw((((lZ + " already contains ") + ma) + " within referrals"))
29442861 else {
2945- let mv = makeString_2C((mu :+ mm), "_")
2946- let mw = if (containsElement(mr, ml))
2947- then value(mq)
2948- else makeString_2C((mr :+ ml), "_")
2949- $Tuple2(([StringEntry(ki, ml), StringEntry(ms, mv), StringEntry(mp, mw)] ++ kW), 0)
2862+ let mj = makeString_2C((mi :+ ma), "_")
2863+ let mk = if (containsElement(mf, lZ))
2864+ then value(me)
2865+ else makeString_2C((mf :+ lZ), "_")
2866+ $Tuple2(([StringEntry(jW, lZ), StringEntry(mg, mj), StringEntry(md, mk)] ++ kK), 0)
29502867 }
29512868 }
29522869 }
29532870 }
29542871 }
29552872 }
29562873 }
29572874
29582875
29592876
2960-@Callable(gK)
2961-func distributePoints (mx,my,mz,mA,mB) = {
2962- let kW = kT(gK)
2963- if ((size(gK.payments) != 0))
2877+@Callable(gv)
2878+func distributePoints (ml,mm,mn,mo,mp) = {
2879+ let kK = kH(gv)
2880+ if ((size(gv.payments) != 0))
29642881 then throw("No payments required")
29652882 else {
2966- let c = toString(gK.originCaller)
2967- let mC = dD(invoke(dg, "checkWlgXpREADONLY", [c], nil))
2968- let mD = dB(mC[1])
2969- let mE = if ((0 >= mD))
2883+ let c = toString(gv.originCaller)
2884+ let mq = dq(invoke(cT, "checkWlgXpREADONLY", [c], nil))
2885+ let mr = do(mq[1])
2886+ let ms = if ((0 >= mr))
29702887 then $Tuple2(0, nil)
29712888 else {
2972- let kd = dB(invoke(dg, "takeWlgXp", [c], nil))
2973- if ((kd == kd))
2974- then $Tuple2(mD, [IntegerEntry(I(c), dB(mC[0])), IntegerEntry(H(c), dB(mC[2]))])
2889+ let jR = do(invoke(cT, "takeWlgXp", [c], nil))
2890+ if ((jR == jR))
2891+ then $Tuple2(mr, [IntegerEntry(B(c), do(mq[0])), IntegerEntry(A(c), do(mq[2]))])
29752892 else throw("Strict value is not equal to itself.")
29762893 }
2977- let mF = mE._1
2978- let mG = mE._2
2979- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2980- let mH = J(c)
2981- let mI = (valueOrElse(getInteger(mH), 0) + mF)
2982- let mJ = F(B)
2983- let mK = valueOrElse(getInteger(mJ), 0)
2984- let mL = (mI + mK)
2985- let mM = ((((mx + my) + mz) + mA) + mB)
2986- if ((mM > mL))
2987- then throw((("There are only " + toString(mL)) + " free points to distribute"))
2894+ let mt = ms._1
2895+ let mu = ms._2
2896+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2897+ let mv = C(c)
2898+ let mw = (valueOrElse(getInteger(mv), 0) + mt)
2899+ let mx = y(u)
2900+ let my = valueOrElse(getInteger(mx), 0)
2901+ let mz = (mw + my)
2902+ let mA = ((((ml + mm) + mn) + mo) + mp)
2903+ if ((mA > mz))
2904+ then throw((("There are only " + toString(mz)) + " free points to distribute"))
29882905 else {
2989- let mN = C(B)
2990- let at = split(valueOrElse(getString(mN), "0_0_0_0_0"), "_")
2991- let mO = (mI - mM)
2992- $Tuple2((([IntegerEntry(mH, if ((0 > mO))
2906+ let mB = v(u)
2907+ let al = split(valueOrElse(getString(mB), "0_0_0_0_0"), "_")
2908+ let mC = (mw - mA)
2909+ $Tuple2((([IntegerEntry(mv, if ((0 > mC))
29932910 then 0
2994- else mO), IntegerEntry(mJ, if ((0 > mO))
2995- then (mK + mO)
2996- else mK), StringEntry(mN, makeString([toString((parseIntValue(at[l]) + mx)), toString((parseIntValue(at[m]) + my)), toString((parseIntValue(at[n]) + mz)), toString((parseIntValue(at[o]) + mA)), toString((parseIntValue(at[p]) + mB))], "_"))] ++ kW) ++ mG), 0)
2911+ else mC), IntegerEntry(mx, if ((0 > mC))
2912+ then (my + mC)
2913+ else my), StringEntry(mB, makeString([toString((parseIntValue(al[j]) + ml)), toString((parseIntValue(al[k]) + mm)), toString((parseIntValue(al[l]) + mn)), toString((parseIntValue(al[m]) + mo)), toString((parseIntValue(al[n]) + mp))], "_"))] ++ kK) ++ mu), 0)
29972914 }
29982915 }
29992916 }
30002917
30012918
30022919
3003-@Callable(gK)
3004-func splitByGlobalWeightsREADONLY (eI) = $Tuple2(nil, fa(eI))
3005-
3006-
3007-
3008-@Callable(gK)
3009-func splitByGlobalAndLocalWeightsREADONLY (mP,mQ,gN) = {
3010- let gG = gM(gN)
3011- $Tuple2(nil, $Tuple2(fa(mP), eL(mQ, gG)))
3012- }
3013-
3014-
3015-
3016-@Callable(gK)
3017-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hK(bN(B)), ":"))
3018-
3019-
3020-
3021-@Callable(gK)
3022-func getWarehouseREADONLY (Q) = {
3023- let js = value(assetInfo(fromBase58String(Q)))
3024- let hZ = (dG(split(js.description, "_")[dk]) / cH)
3025- let ia = valueOrElse(getInteger(bD(Q)), 0)
3026- $Tuple2(nil, makeString_2C(hX(bC(Q), hZ, ia), ":"))
3027- }
3028-
3029-
3030-
3031-@Callable(gK)
3032-func saveLastTx () = if (!(containsElement([dg, de, dh, di], gK.caller)))
2920+@Callable(gv)
2921+func splitByGlobalWeightsREADONLY (ez) = $Tuple2(nil, eR(ez))
2922+
2923+
2924+
2925+@Callable(gv)
2926+func splitByGlobalAndLocalWeightsREADONLY (mD,mE,gy) = {
2927+ let gr = gx(gy)
2928+ $Tuple2(nil, $Tuple2(eR(mD), eC(mE, gr)))
2929+ }
2930+
2931+
2932+
2933+@Callable(gv)
2934+func getBackpackREADONLY (u) = $Tuple2(nil, makeString(hw(bz(u)), ":"))
2935+
2936+
2937+
2938+@Callable(gv)
2939+func getWarehouseREADONLY (bp) = {
2940+ let jg = value(assetInfo(fromBase58String(bp)))
2941+ let hM = (dt(split(jg.description, "_")[cX]) / cu)
2942+ let hN = valueOrElse(getInteger(bq(bp)), 0)
2943+ $Tuple2(nil, makeString_2C(hK(bo(bp), hM, hN), ":"))
2944+ }
2945+
2946+
2947+
2948+@Callable(gv)
2949+func saveLastTx () = if (!(containsElement([cT, cR, cU, cV], gv.caller)))
30332950 then throw("Access denied")
3034- else $Tuple2(kT(gK), 42)
3035-
3036-
3037-
3038-@Callable(gK)
3039-func updateDuckStats (B,kd) = if ((gK.caller != de))
2951+ else $Tuple2(kH(gv), 42)
2952+
2953+
2954+
2955+@Callable(gv)
2956+func updateDuckStats (u,jR) = if ((gv.caller != cR))
30402957 then throw("Access denied")
3041- else kf(B, kd)
3042-
3043-
3044-
3045-@Callable(gK)
3046-func updateAccStats (c,kd) = if (!(containsElement([dg, de, di], gK.caller)))
2958+ else jT(u, jR)
2959+
2960+
2961+
2962+@Callable(gv)
2963+func updateAccStats (c,jR) = if (!(containsElement([cT, cR, cV], gv.caller)))
30472964 then throw("Access denied")
3048- else kg(c, kd)
3049-
3050-
3051-
3052-@Callable(gK)
3053-func equipDuck (mR) = {
3054- let kW = kT(gK)
3055- if ((size(gK.payments) != 0))
2965+ else jU(c, jR)
2966+
2967+
2968+
2969+@Callable(gv)
2970+func equipDuck (mF) = {
2971+ let kK = kH(gv)
2972+ if ((size(gv.payments) != 0))
30562973 then throw("No payments required")
30572974 else {
3058- let c = toString(gK.originCaller)
3059- let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3060- if (kq(B))
2975+ let c = toString(gv.originCaller)
2976+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
2977+ if (ke(u))
30612978 then throw("equipDuck_checkTournament")
30622979 else {
3063- let gx = G(B)
3064- let mS = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3065- let hL = bN(B)
3066- let io = hK(hL)
3067- let lq = split(mR, "_")
3068- if ((size(lq) != r))
2980+ let gh = z(u)
2981+ let mG = split(valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2982+ let hx = bz(u)
2983+ let ib = hw(hx)
2984+ let le = split(mF, "_")
2985+ if ((size(le) != p))
30692986 then throw("Wrong equipment string")
30702987 else {
3071- let gz = gm(mS, fx(io[bp]), true, nil)
3072- let gA = split(lq[q], ";")[1]
3073- let ar = if ((gA == ""))
2988+ let gk = fZ(mG, fo(ib[bb]), true, nil)
2989+ let gl = split(le[o], ";")[1]
2990+ let aj = if ((gl == ""))
30742991 then 0
30752992 else {
3076- let gB = split(gA, ",")[0]
3077- if ((gB == ""))
2993+ let gm = split(gl, ",")[0]
2994+ if ((gm == ""))
30782995 then 0
30792996 else {
3080- let fM = split(gB, ":")
3081- let dc = fM[0]
3082- let gC = fM[1]
3083- if (if (if (if (if ((dc == "06"))
2997+ let fD = split(gm, ":")
2998+ let cP = fD[0]
2999+ let gn = fD[1]
3000+ if (if (if (if (if ((cP == "06"))
30843001 then true
3085- else (dc == "07"))
3002+ else (cP == "07"))
30863003 then true
3087- else (dc == "08"))
3088- then (gC != "")
3004+ else (cP == "08"))
3005+ then (gn != "")
30893006 else false)
3090- then (parseIntValue(gC) > 0)
3007+ then (parseIntValue(gn) > 0)
30913008 else false)
3092- then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
3009+ then parseIntValue(split(aJ[parseIntValue(cP)], "_")[aL])
30933010 else 0
30943011 }
30953012 }
3096- let gh = ap(this, B, ar, true)
3097- let gD = gm(lq, gz, false, gh)
3098- let mT = fC(gD)
3099- $Tuple2(([StringEntry(gx, mR), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], mT], ":")), StringEntry(M(B), makeString([toString(gh[7]), toString(gh[8]), toString(gh[9]), toString(gh[10]), toString(gh[11])], "_"))] ++ kW), 0)
3013+ let fU = ah(this, u, aj, true)
3014+ let go = fZ(le, gk, false, fU)
3015+ let mH = ft(go)
3016+ $Tuple2(([StringEntry(gh, mF), StringEntry(hx, makeString_2C([ib[aY], ib[aZ], ib[ba], mH], ":")), StringEntry(F(u), makeString([toString(fU[7]), toString(fU[8]), toString(fU[9]), toString(fU[10]), toString(fU[11])], "_"))] ++ kK), 0)
31003017 }
31013018 }
31023019 }
31033020 }
31043021
31053022
31063023
3107-@Callable(gK)
3108-func fortificateLand (Q,mU) = {
3109- let kW = kT(gK)
3110- if ((size(gK.payments) != 0))
3111- then throw("No payments required")
3112- else {
3113- let c = toString(gK.originCaller)
3114- let B = valueOrElse(getString(bM(c)), "")
3115- let fH = ap(this, B, 0, false)
3116- let mV = bE(Q)
3117- let mW = split(valueOrElse(getString(mV), ":0_15:0_18:0"), "_")
3118- let js = value(assetInfo(fromBase58String(Q)))
3119- let hZ = (dG(split(js.description, "_")[dk]) / cH)
3120- let ia = valueOrElse(getInteger(bD(Q)), 0)
3121- let hY = bC(Q)
3122- let id = hX(hY, hZ, ia)
3123- let mX = split(id[bh], "_")
3124- let mY = parseIntValue(mX[bj])
3125- let mZ = parseIntValue(mX[bk])
3126- let na = split(mU, "_")
3127- let nb = gt(mW, fx(id[bg]), mY, mZ, true, nil)
3128- let gz = nb._1
3129- let nc = nb._2
3130- let nd = nb._3
3131- let ne = gt(na, gz, nc, nd, false, fH)
3132- let gD = ne._1
3133- let nf = ne._2
3134- let ng = ne._3
3135- let mT = fC(gD)
3136- let jY = makeString([mX[bi], toString(nf), toString(ng), mX[bl]], "_")
3137- $Tuple2(([StringEntry(mV, mU), StringEntry(hY, makeString_2C([id[bd], id[be], id[bf], mT, jY], ":"))] ++ kW), 0)
3138- }
3139- }
3140-
3141-
3142-
3143-@Callable(gK)
3144-func initDuckTourAttempt (B) = if ((gK.caller != dh))
3024+@Callable(gv)
3025+func initDuckTourAttempt (u) = if ((gv.caller != cU))
31453026 then throw("Access denied")
31463027 else {
3147- let jb = A(B)
3148- let jc = aj(valueOrElse(getInteger(E(B)), 0))
3149- let lk = valueOrElse(getInteger(jb), jc)
3150- let nh = bO(B)
3151- let jq = valueOrElse(getString(nh), aN)
3152- let ci = valueOrElse(getInteger(dh, bT), 0)
3153- let ni = (toString(ci) + "_T_0")
3154- $Tuple2([IntegerEntry(K(B), lk), IntegerEntry(jb, jc), StringEntry(L(B), jq), StringEntry(nh, ni)], ni)
3028+ let iP = t(u)
3029+ let iQ = ab(valueOrElse(getInteger(x(u)), 0))
3030+ let kY = valueOrElse(getInteger(iP), iQ)
3031+ let mI = bA(u)
3032+ let je = valueOrElse(getString(mI), ax)
3033+ let bU = valueOrElse(getInteger(cU, bF), 0)
3034+ let mJ = (toString(bU) + "_T_0")
3035+ $Tuple2([IntegerEntry(D(u), kY), IntegerEntry(iP, iQ), StringEntry(E(u), je), StringEntry(mI, mJ)], mJ)
31553036 }
31563037
31573038
31583039
3159-@Callable(gK)
3040+@Callable(gv)
31603041 func breakAttempt () = {
3161- let kW = kT(gK)
3162- let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
3163- let nh = bO(B)
3164- let jq = valueOrElse(getString(nh), aN)
3165- if ((split(jq, "_")[br] != "T"))
3042+ let kK = kH(gv)
3043+ let u = valueOrErrorMessage(getString(by(toString(gv.caller))), "You don't have a duck staked")
3044+ let mI = bA(u)
3045+ let je = valueOrElse(getString(mI), ax)
3046+ if ((split(je, "_")[bd] != "T"))
31663047 then throw("Your duck is not in the tournament")
31673048 else {
3168- let nj = getIntegerValue(K(B))
3169- let nk = getStringValue(L(B))
3170- $Tuple2(((kW :+ IntegerEntry(A(B), nj)) :+ StringEntry(nh, nk)), jq)
3171- }
3172- }
3173-
3174-
3175-
3176-@Callable(gK)
3177-func breakAttemptCallback () = if ((gK.caller != dh))
3049+ let mK = getIntegerValue(D(u))
3050+ let mL = getStringValue(E(u))
3051+ $Tuple2(((kK :+ IntegerEntry(t(u), mK)) :+ StringEntry(mI, mL)), je)
3052+ }
3053+ }
3054+
3055+
3056+
3057+@Callable(gv)
3058+func breakAttemptCallback () = if ((gv.caller != cU))
31783059 then throw("Access denied")
31793060 else {
3180- let B = valueOrErrorMessage(getString(bM(toString(gK.originCaller))), "You don't have a duck staked")
3181- $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback")
3061+ let u = valueOrErrorMessage(getString(by(toString(gv.originCaller))), "You don't have a duck staked")
3062+ $Tuple2([IntegerEntry(t(u), getIntegerValue(D(u))), StringEntry(bA(u), getStringValue(E(u)))], "breakAttemptCallback")
31823063 }
31833064
31843065
31853066
3186-@Callable(gK)
3187-func exitTournamentInternal (B) = if ((gK.caller != this))
3067+@Callable(gv)
3068+func exitTournamentInternal (u) = if ((gv.caller != this))
31883069 then throw("Access denied")
31893070 else {
3190- let nj = getIntegerValue(K(B))
3191- let nk = getStringValue(L(B))
3192- $Tuple2([IntegerEntry(A(B), nj), StringEntry(bO(B), nk)], false)
3071+ let mK = getIntegerValue(D(u))
3072+ let mL = getStringValue(E(u))
3073+ $Tuple2([IntegerEntry(t(u), mK), StringEntry(bA(u), mL)], false)
31933074 }
31943075
31953076
31963077
3197-@Callable(gK)
3198-func processDelivery (B) = if ((gK.caller != this))
3078+@Callable(gv)
3079+func processDelivery (u) = if ((gv.caller != this))
31993080 then throw("Access denied")
32003081 else {
3201- let c = toString(gK.originCaller)
3202- let nl = valueOrElse(getInteger(de, bS), 0)
3203- if ((aQ > nl))
3204- then throw(("Delivery is not available, fund=" + dL(nl, 6)))
3082+ let c = toString(gv.originCaller)
3083+ let mM = valueOrElse(getInteger(cR, bE), 0)
3084+ if ((aA > mM))
3085+ then throw(("Delivery is not available, fund=" + dy(mM, 6)))
32053086 else {
3206- let aA = lastBlock.timestamp
3207- let nm = V(c)
3208- let nn = valueOrElse(getInteger(W(c)), 0)
3209- let no = (aA / a)
3210- let fR = if ((nn == no))
3211- then valueOrElse(getInteger(nm), 0)
3087+ let bW = lastBlock.timestamp
3088+ let mN = L(c)
3089+ let mO = valueOrElse(getInteger(M(c)), 0)
3090+ let mP = (bW / a)
3091+ let fJ = if ((mO == mP))
3092+ then valueOrElse(getInteger(mN), 0)
32123093 else 0
3213- let np = valueOrElse(getInteger(di, d(c)), 0)
3214- let nq = (aR + (np / aS))
3215- if ((fR >= nq))
3216- then throw((("You already used " + toString(nq)) + " delivery attempts for today"))
3094+ let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3095+ let mR = (aE + (mQ / aF))
3096+ if ((fJ >= mR))
3097+ then throw((("You already used " + toString(mR)) + " delivery attempts for today"))
32173098 else {
3218- let nr = U(B)
3219- let ns = invoke(de, "sendDeliveryReward", [c], nil)
3220- $Tuple2([IntegerEntry(nm, (fR + 1)), IntegerEntry(W(c), no), IntegerEntry(nr, (valueOrElse(getInteger(nr), 0) + 1))], ns)
3099+ let mS = K(u)
3100+ let mT = invoke(cR, "sendDeliveryReward", [c], nil)
3101+ $Tuple2([IntegerEntry(mN, (fJ + 1)), IntegerEntry(M(c), mP), IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))], mT)
32213102 }
32223103 }
32233104 }
32243105
32253106
32263107
3227-@Callable(gK)
3228-func prepareRobbery (iQ,iR) = {
3229- let kW = kT(gK)
3230- if (!(sigVerify_8Kb(iQ, iR, cy)))
3231- then throw("signature does not match")
3232- else if ((size(gK.payments) != 1))
3233- then throw("exactly 1 payment must be attached")
3234- else {
3235- let kX = gK.payments[0]
3236- let nt = kX.amount
3237- if (if (!(isDefined(kX.assetId)))
3238- then true
3239- else (value(kX.assetId) != do))
3240- then throw("WLGOLD payments only!")
3108+@Callable(gv)
3109+func robLand (iE,iF) = {
3110+ let kK = kH(gv)
3111+ if ((size(gv.payments) != 1))
3112+ then throw("exactly 1 payment must be attached")
3113+ else {
3114+ let kL = gv.payments[0]
3115+ let mU = kL.amount
3116+ if (if (!(isDefined(kL.assetId)))
3117+ then true
3118+ else (value(kL.assetId) != db))
3119+ then throw("WLGOLD payments only!")
3120+ else if ((mU != aB))
3121+ then throw((("Payment should be " + dy(aB, 8)) + " WLGOLD"))
32413122 else {
3242- let fp = split(toUtf8String(iQ), "|")
3243- if ((2 > size(fp)))
3244- then throw("Wrong message format")
3123+ let c = toString(gv.caller)
3124+ if (!(sigVerify_8Kb(iE, iF, cl)))
3125+ then throw("signature does not match")
32453126 else {
3246- let iZ = if ((size(fp) >= 2))
3247- then fp[2]
3248- else ""
3249- let bQ = toString(gK.caller)
3250- let ja = valueOrElse(getString(dK(bQ)), "")
3251- if ((ja != iZ))
3252- then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
3127+ let fg = split_4C(toUtf8String(iE), ";")
3128+ let mV = split_4C(fg[0], "|")
3129+ let iH = split(mV[es], "_")
3130+ let iI = parseIntValue(iH[0])
3131+ let iJ = parseIntValue(iH[1])
3132+ let iT = mV[et]
3133+ let mW = split(fg[1], "|")
3134+ let mX = mW[eu]
3135+ if ((mX != "B"))
3136+ then throw("Only bank robbery is supported")
32533137 else {
3254- let B = fp[0]
3255- if (kq(B))
3256- then throw("prepareRobbery_checkTournament")
3138+ let iM = parseIntValue(mW[ew])
3139+ if (if ((iM > (lastBlock.timestamp + dL)))
3140+ then true
3141+ else ((lastBlock.timestamp - dL) > iM))
3142+ then throw(((("signature outdated: logTime=" + toString(iM)) + ", bcTime=") + toString(lastBlock.timestamp)))
32573143 else {
3258- let aB = ax(this, B)._1
3259- if ((aB > nt))
3260- then throw(((("Payment " + toString(nt)) + " < required ") + toString(aB)))
3144+ let iN = mW[ev]
3145+ let iO = valueOrElse(getString(dx(c)), "")
3146+ if ((iO != iN))
3147+ then throw(((("Tx ids don't match! In state: " + iO) + ", in msg: ") + iN))
32613148 else {
3262- let nu = split(fp[1], "_")
3263- let aA = lastBlock.timestamp
3264- let aC = valueOrElse(getInteger(S(B)), 0)
3265- let aD = valueOrElse(getString(T(B)), "")
3266- let aE = valueOrElse(getInteger(R(aD)), 0)
3267- if (if ((aC != y))
3268- then (aE > aA)
3269- else false)
3270- then throw(("You already started robbing, wait till " + toString(aE)))
3149+ let u = valueOrErrorMessage(getString(by(c)), "You don't have a duck staked")
3150+ let gh = z(u)
3151+ let lc = valueOrElse(getString(gh), ",;,_,;,_,;,_,;,_,;,_,;,")
3152+ let mY = fb(lc, iT)
3153+ let le = mY._1
3154+ let lf = mY._2
3155+ let mZ = mY._3
3156+ let je = valueOrElse(getString(bA(u)), ax)
3157+ if (bS(cU, je))
3158+ then throw("Your duck is taking part in the tournament")
32713159 else {
3272- func nv (eR,Q) = {
3273- let nw = valueOrElse(getInteger(P(Q)), 0)
3274- let nx = valueOrElse(getInteger(R(Q)), 0)
3275- if ((nw > size(v)))
3276- then throw("Invalid state")
3277- else if ((aA > nx))
3160+ let bW = lastBlock.timestamp
3161+ let mN = I(c)
3162+ let mO = valueOrElse(getInteger(J(c)), 0)
3163+ let mP = (bW / a)
3164+ let fJ = if ((mO == mP))
3165+ then valueOrElse(getInteger(mN), 0)
3166+ else 0
3167+ let mQ = valueOrElse(getInteger(cV, d(c)), 0)
3168+ let na = (aC + (mQ / aD))
3169+ if ((fJ >= na))
3170+ then throw((("You already used " + toString(na)) + " robbery attempts for today"))
3171+ else {
3172+ let mS = H(u)
3173+ let nb = if ((iJ > 0))
32783174 then {
3279- let ny = valueOrElse(getInteger(bw(Q)), 0)
3280- if ((0 >= ny))
3281- then eR
3282- else {
3283- let gr = value(assetInfo(fromBase58String(Q)))
3284- let jw = split(gr.description, "_")
3285- let ji = dG(jw[dk])
3286- let nz = jh(Q, ji)
3287- let gQ = (aA - ny)
3288- let jz = fraction(gQ, (nz * ji), a)
3289- if ((w > jz))
3290- then eR
3291- else (eR :+ Q)
3292- }
3175+ let mM = assetBalance(this, db)
3176+ let nc = if (mZ)
3177+ then (2 * aB)
3178+ else (5 * aB)
3179+ if ((nc > mM))
3180+ then throw(((("Robbery is not available, funds = " + dy(mM, 8)) + " WLGOLD, required = ") + dy(nc, 8)))
3181+ else [ScriptTransfer(gv.caller, nc, db)]
32933182 }
3294- else eR
3295- }
3296-
3297- let nA = {
3298- let eT = nu
3299- let eU = size(eT)
3300- let eV = nil
3301- func eW (eX,eY) = if ((eY >= eU))
3302- then eX
3303- else nv(eX, eT[eY])
3304-
3305- func eZ (eX,eY) = if ((eY >= eU))
3306- then eX
3307- else throw("List size exceeds 10")
3308-
3309- eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3310- }
3311- if ((size(nA) == 0))
3312- then throw("No candidates for robbery")
3313- else {
3314- let nB = dR(size(nA), iQ, iR)
3315- let Q = nA[nB]
3316- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kW), Q)
3183+ else nil
3184+ $Tuple2((((((((((kK ++ nb) ++ (if (lf)
3185+ then [StringEntry(F(u), "0_0_0_0_0")]
3186+ else nil)) ++ jT(u, if ((iJ > 0))
3187+ then Q
3188+ else R)._1) :+ IntegerEntry(G(u), bW)) :+ IntegerEntry(mN, (fJ + 1))) :+ IntegerEntry(J(c), mP)) :+ IntegerEntry(mS, (valueOrElse(getInteger(mS), 0) + 1))) :+ StringEntry(gh, le)) :+ IntegerEntry(t(u), max([iJ, 0]))), 0)
33173189 }
33183190 }
33193191 }
33203192 }
33213193 }
33223194 }
33233195 }
3324- }
3325- }
3326-
3327-
3328-
3329-@Callable(gK)
3330-func robLand (iQ,iR) = {
3331- let kW = kT(gK)
3332- if (!(sigVerify_8Kb(iQ, iR, cy)))
3333- then throw("signature does not match")
3334- else {
3335- let bQ = toString(gK.caller)
3336- let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3337- let aA = lastBlock.timestamp
3338- $Tuple2((kW :+ IntegerEntry(N(B), aA)), 0)
3339- }
3340- }
3341-
3342-
3343-
3344-@Callable(gK)
3345-func buyRoboDuck () = if (!(cv))
3196+ }
3197+ }
3198+
3199+
3200+
3201+@Callable(gv)
3202+func buyRoboDuck () = if (!(ci))
33463203 then throw("Feature is turned off")
33473204 else {
3348- let kW = kT(gK)
3349- if ((size(gK.payments) != 1))
3205+ let kK = kH(gv)
3206+ if ((size(gv.payments) != 1))
33503207 then throw("Exactly one payment required")
33513208 else {
3352- let kX = value(gK.payments[0])
3353- if ((kX.assetId != cA))
3209+ let kL = value(gv.payments[0])
3210+ if ((kL.assetId != cn))
33543211 then throw("Allowed USDT payment only!")
3355- else if ((kX.amount != ef))
3356- then throw((("Payment attached should be " + dL(ef, 6)) + " USDT"))
3212+ else if ((kL.amount != dR))
3213+ then throw((("Payment attached should be " + dy(dR, 6)) + " USDT"))
33573214 else {
3358- let nC = valueOrElse(getInteger(ey()), 0)
3359- let nD = toBytes(nC)
3360- let eq = ((aH + "-") + takeRight(toBase16String(nD), 8))
3361- let nE = takeRight(toBase16String(sha256_16Kb(nD)), 6)
3362- let iN = Issue(eq, ("Robo Duck NFT for WavesLands game, background color = #" + nE), 1, 0, false)
3363- let bu = calculateAssetId(iN)
3364- $Tuple2(((((kW :+ IntegerEntry(ey(), (nC + 1))) :+ iN) :+ ScriptTransfer(gK.originCaller, 1, bu)) :+ ScriptTransfer(de, kX.amount, cA)), $Tuple2(toBase58String(bu), nE))
3215+ let nd = valueOrElse(getInteger(ek()), 0)
3216+ let ne = toBytes(nd)
3217+ let ec = ((ar + "-") + takeRight(toBase16String(ne), 8))
3218+ let nf = takeRight(toBase16String(sha256_16Kb(ne)), 6)
3219+ let iB = Issue(ec, ("Robo Duck NFT for WavesLands game, background color = #" + nf), 1, 0, false)
3220+ let bg = calculateAssetId(iB)
3221+ $Tuple2(((((kK :+ IntegerEntry(ek(), (nd + 1))) :+ iB) :+ ScriptTransfer(gv.originCaller, 1, bg)) :+ ScriptTransfer(cR, kL.amount, cn)), $Tuple2(toBase58String(bg), nf))
33653222 }
33663223 }
33673224 }
33683225
33693226

github/deemru/w8io/169f3d6 
1351.17 ms