tx · 4HMn2iaQefwUd2cwjtYtnNeapvfENycA2J5EEVPPNehu 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.07500000 Waves 2023.07.19 23:52 [2673246] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "4HMn2iaQefwUd2cwjtYtnNeapvfENycA2J5EEVPPNehu", "fee": 7500000, "feeAssetId": null, "timestamp": 1689800024931, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "7ZWzbyn7k6Gda7JWBAsaFrbmUCgu7wfEnuWsvH2SWU42EvKzMCceM443C8BrffEPLHbDYiZQ3mx8gbT6toNA6MD" ], "script": "base64:BgK0AQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQgSAM4BARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIAB3hwQ2xhaW0AoI0GAA94cFN1Y2Nlc3NGbGlnaHQA0IYDAAx4cEZhaWxGbGlnaHQAkE4ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCWsQIACnhwTmV3U0xhbmQAgOHrFwAOeHBVcGdyYWRlSW5mcmEAoI0GAAd4cE1lcmdlAICt4gQACXhwT25ib2FyZACAreIEAAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiI4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXwkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfNTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF83MF8wLDAsMCwwLDAsMCwwXzIwMQUDbmlsAAlySWR4Q29lZmYABgAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQAD0tTQUxMT1dYUExFVkVMUwYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAwM8kAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARBzdWJ0cmFjdFByb2R1Y3RzAgRwSGFzBXBVc2VkAwkAAAIFBXBVc2VkAgAFBHBIYXMEBXBMaXN0AwkAAAIFBHBIYXMCAAUDbmlsCQC1CQIFBHBIYXMCAV8KAQRzdWJQAgNhY2MEaXRlbQQBaggFA2Fj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YW1vdW50BApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcKAQRhZGRQAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAMJAQIhPQIFCnByb2R1Y3RJZHgFAWoJAJUKAwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBGN1cnIIBQNhY2MCXzMDAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBagITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQFaXNCaWcDCQEBIQEFCmlzUG9zaXRpdmUEBmNvbXBhdAkAkQMCCQC1CQIFBGl0ZW0CAV8FCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1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CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BCXZpcnRDbGFpbQQNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50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AXQCXzEBC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBCWN1cnJlbnRXaAQFZ29vZHMJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QKAQlzdW1SZXNNYXQCA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAQdzdW1Qcm9kAgNhY2MEaXRlbQQDaWR4CAUDYWNjAl8xBARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FDlBST0RVQ1RQS0dTSVpFAAEFDlBST0RVQ1RQS0dTSVpFCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAGgCBQRwa2dzBQVNVUxUOAQId2hSZXNWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoB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AgkApAMBBQh3aExvY2tlZAkAzAgCCQCkAwEFA29jYwkAzAgCCQCkAwEJAGUCCQBlAgUHd2hUb3RhbAUId2hMb2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkA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AGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wEAXADCQECIT0CCQCQAwEFCXByb2RQYXJ0cwAACgACJGwFCXByb2RQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAW0CXzQKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCWCgQAAAUKY3VycldoUHJvZAUPY3VycmVudFBhY2tQcm9kCAUBbQJfNAQIdm9sU2FsZG8IBQFwAl80AwkAZgIFCHZvbFNhbGRvBQt3aFNwYWNlTGVmdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIVQXR0ZW1wdCB0byBwdXQgdG90YWwgCQCkAwEFCHZvbFNhbGRvAhEgc3R1ZmYsIGJ1dCBvbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIVIHdhcmVob3VzZSBzcGFjZSBsZWZ0CQCZCgcJALkJAggFAXICXzICAV8JALkJAggFAW0CXzICAV8JALkJAggFAXACXzICAV8JALkJAggFAXICXzMCAV8JALkJAggFAW0CXzMCAV8JALkJAggFAXACXzMCAV8FCHZvbFNhbGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQgFAWYCXzIEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBZgJfMgQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAduZXdQcm9kCQEQc3VidHJhY3RQcm9kdWN0cwIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAgFAWYCXzUDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6BQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQgFAWYCXzIJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDI4NTYwMjkwOTkDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMjg1NjAyOTA5OQJfMQQGZHVja0lkCAUNJHQwMjg1NjAyOTA5OQJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTQ3MzMyMzQ0AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzMTQ3MzMyMzQ0Al8xBAVicFJlcwgFDSR0MDMxNDczMzIzNDQCXzIEBWxvZnRPCAUNJHQwMzE0NzMzMjM0NAJfMwQFbG9mdEYIBQ0kdDAzMTQ3MzMyMzQ0Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCMBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIIBQFmAl8xAAAIBQFmAl80BQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIIBQFmAl8xAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgELaXRlcmF0ZVByb2QCA2FjYwtpZ25vcmVkSXRlbQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkAkQMCBQhtZWRLaXRIcAUBbgUBcQkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQUBeAkAZAIFAW4AAQgFA2FjYwJfMwQGcmVzdWx0CgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2l0ZXJhdGVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECW5ld0hlYWx0aAkAlwMBCQDMCAIFBW1heEhQCQDMCAIJAGQCBQlvbGRIZWFsdGgIBQZyZXN1bHQCXzMFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALUJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQCRAwIFCG1lZEtpdEhwAAAEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBD2ZpeFN0YWtlZFBpZWNlcwEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMc3Rha2VkUGllY2VzAwkAAAIFB2FkZHJlc3MCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsCgEHb25l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ZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQGYnBQcm9kCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QEBXBMaXN0AwkAAAIFBmJwUHJvZAIABQNuaWwJALUJAgUGYnBQcm9kAgFfBAh0ZW1wUHJvZAkBBWRyZXNzAwULY3VycmVudFNlZ3MFBXBMaXN0BgQHbmV3UHJvZAkBBWRyZXNzAwUFbmV3RXEFCHRlbXBQcm9kBwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAgUHbmV3UHJvZAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEEdGVzdAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIFA25pbAkBDnByb2RTdHJUb0J5dGVzAQIAACnfiIM=", "height": 2673246, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E9w2WP9s2HdvRQ2j5JGWRysKWfVfj82kg2rgmt4qt6Te Next: EyTKrE58J62gwb1rYThaJsTaTe2KW4RFKpdV84SFua7J Diff:
Old | New | Differences | |
---|---|---|---|
602 | 602 | } | |
603 | 603 | ||
604 | 604 | ||
605 | - | func du (dv,dh,dw,dx,dy,dz) = { | |
606 | - | let do = split(dv, ":") | |
605 | + | func du (dv) = { | |
606 | + | let dh = if ((dv == "")) | |
607 | + | then nil | |
608 | + | else split(dv, "_") | |
609 | + | func dw (cL,aY) = { | |
610 | + | let dk = (size(cL) / 8) | |
611 | + | let dr = if ((size(dh) > dk)) | |
612 | + | then parseIntValue(dh[dk]) | |
613 | + | else 0 | |
614 | + | (cL + toBytes(dr)) | |
615 | + | } | |
616 | + | ||
617 | + | let cN = ac | |
618 | + | let cO = size(cN) | |
619 | + | let cP = base58'' | |
620 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
621 | + | then cR | |
622 | + | else dw(cR, cN[cS]) | |
623 | + | ||
624 | + | func cT (cR,cS) = if ((cS >= cO)) | |
625 | + | then cR | |
626 | + | else throw("List size exceeds 50") | |
627 | + | ||
628 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
629 | + | } | |
630 | + | ||
631 | + | ||
632 | + | func dx (dy,dh,dz,dA,dB,dC) = { | |
633 | + | let do = split(dy, ":") | |
607 | 634 | if ((size(do) != 2)) | |
608 | 635 | then throw("Incorrect format, should be index:amount") | |
609 | 636 | else { | |
610 | - | let | |
611 | - | let | |
612 | - | if (if ((0 > | |
637 | + | let dD = parseIntValue(do[0]) | |
638 | + | let dE = parseIntValue(do[1]) | |
639 | + | if (if ((0 > dD)) | |
613 | 640 | then true | |
614 | - | else ( | |
641 | + | else (dD >= size(ac))) | |
615 | 642 | then throw("Unknown product idx") | |
616 | - | else if ((0 > | |
643 | + | else if ((0 > dE)) | |
617 | 644 | then throw("Count can't be negative") | |
618 | - | else if (( | |
645 | + | else if ((dE == 0)) | |
619 | 646 | then $Tuple2(dh, false) | |
620 | 647 | else { | |
621 | - | func | |
648 | + | func dF (cL,dj) = { | |
622 | 649 | let dk = cL._1 | |
623 | 650 | let dr = if ((size(dh) > dk)) | |
624 | 651 | then parseIntValue(dh[dk]) | |
625 | 652 | else 0 | |
626 | - | if (( | |
653 | + | if ((dD != dk)) | |
627 | 654 | then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3) | |
628 | - | else if (if (!( | |
629 | - | then ( | |
655 | + | else if (if (!(dz)) | |
656 | + | then (dE > dr) | |
630 | 657 | else false) | |
631 | - | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString( | |
658 | + | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dE))) | |
632 | 659 | else { | |
633 | - | let | |
660 | + | let dG = if (!(dz)) | |
634 | 661 | then { | |
635 | - | let | |
636 | - | if (( | |
662 | + | let dH = split(dj, "_")[ae] | |
663 | + | if ((dH == "")) | |
637 | 664 | then throw("Item cannot be equipped") | |
638 | 665 | else { | |
639 | - | let | |
640 | - | let | |
641 | - | if (( | |
666 | + | let dI = parseIntValue(dH) | |
667 | + | let dJ = (dI / 100) | |
668 | + | if ((dA != dJ)) | |
642 | 669 | then throw("Segment incompatible") | |
643 | 670 | else { | |
644 | - | let | |
645 | - | if (( | |
671 | + | let dK = ((dI % 100) / 10) | |
672 | + | if ((dB != dK)) | |
646 | 673 | then throw("Slot incompatible") | |
647 | 674 | else { | |
648 | - | let | |
649 | - | if (if (( | |
650 | - | then ( | |
675 | + | let dL = (dI % 10) | |
676 | + | if (if ((dC != 0)) | |
677 | + | then (dL > 1) | |
651 | 678 | else false) | |
652 | 679 | then throw("Big items should occupy slot 0") | |
653 | - | else ( | |
680 | + | else (dL > 1) | |
654 | 681 | } | |
655 | 682 | } | |
656 | 683 | } | |
657 | 684 | } | |
658 | 685 | else false | |
659 | - | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if ( | |
660 | - | then | |
661 | - | else -( | |
686 | + | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dz) | |
687 | + | then dE | |
688 | + | else -(dE))))), if (cL._3) | |
662 | 689 | then true | |
663 | - | else | |
690 | + | else dG) | |
664 | 691 | } | |
665 | 692 | } | |
666 | 693 | ||
670 | 697 | let cP = $Tuple3(0, nil, false) | |
671 | 698 | func cQ (cR,cS) = if ((cS >= cO)) | |
672 | 699 | then cR | |
673 | - | else | |
700 | + | else dF(cR, cN[cS]) | |
674 | 701 | ||
675 | 702 | func cT (cR,cS) = if ((cS >= cO)) | |
676 | 703 | then cR | |
684 | 711 | } | |
685 | 712 | ||
686 | 713 | ||
687 | - | func | |
714 | + | func dM (dN,dO,dz,dA,dB) = if ((dN != "")) | |
688 | 715 | then { | |
689 | - | let | |
690 | - | if ((size( | |
716 | + | let dP = split(dN, ",") | |
717 | + | if ((size(dP) > n)) | |
691 | 718 | then throw("Wrong slots format") | |
692 | 719 | else { | |
693 | - | let | |
694 | - | let | |
695 | - | then | |
720 | + | let dQ = dP[0] | |
721 | + | let dR = if ((size(dP) > 1)) | |
722 | + | then dP[1] | |
696 | 723 | else "" | |
697 | - | if (if (( | |
698 | - | then ( | |
724 | + | if (if ((dQ == "")) | |
725 | + | then (dR == "") | |
699 | 726 | else false) | |
700 | - | then | |
727 | + | then dO | |
701 | 728 | else { | |
702 | - | let | |
703 | - | then | |
704 | - | else $Tuple2( | |
705 | - | if (( | |
706 | - | then if ( | |
729 | + | let dS = if ((dQ != "")) | |
730 | + | then dx(dQ, dO, dz, dA, dB, 0) | |
731 | + | else $Tuple2(dO, false) | |
732 | + | if ((dR != "")) | |
733 | + | then if (dS._2) | |
707 | 734 | then throw("Big item already occupies slot") | |
708 | - | else | |
709 | - | else | |
735 | + | else dx(dR, dS._1, dz, dA, dB, 1)._1 | |
736 | + | else dS._1 | |
710 | 737 | } | |
711 | 738 | } | |
712 | 739 | } | |
713 | - | else | |
714 | - | ||
715 | - | ||
716 | - | func | |
717 | - | func | |
740 | + | else dO | |
741 | + | ||
742 | + | ||
743 | + | func dT (dU,dh,dz) = { | |
744 | + | func dA (cL,dV) = { | |
718 | 745 | let dk = cL._1 | |
719 | - | let | |
720 | - | if ((size( | |
746 | + | let dB = split(dV, ";") | |
747 | + | if ((size(dB) != m)) | |
721 | 748 | then throw("Wrong segment format") | |
722 | 749 | else { | |
723 | - | let | |
724 | - | let dq = | |
725 | - | if (if (( | |
750 | + | let dW = dB[0] | |
751 | + | let dq = dB[1] | |
752 | + | if (if ((dW == "")) | |
726 | 753 | then (dq == "") | |
727 | 754 | else false) | |
728 | 755 | then $Tuple2((dk + 1), cL._2) | |
729 | 756 | else { | |
730 | - | let | |
731 | - | $Tuple2((dk + 1), | |
757 | + | let dX = dM(dW, cL._2, dz, dk, 0) | |
758 | + | $Tuple2((dk + 1), dM(dq, dX, dz, dk, 1)) | |
732 | 759 | } | |
733 | 760 | } | |
734 | 761 | } | |
735 | 762 | ||
736 | - | ( let cN = | |
763 | + | ( let cN = dU | |
737 | 764 | let cO = size(cN) | |
738 | 765 | let cP = $Tuple2(0, dh) | |
739 | 766 | func cQ (cR,cS) = if ((cS >= cO)) | |
740 | 767 | then cR | |
741 | - | else | |
768 | + | else dA(cR, cN[cS]) | |
742 | 769 | ||
743 | 770 | func cT (cR,cS) = if ((cS >= cO)) | |
744 | 771 | then cR | |
748 | 775 | } | |
749 | 776 | ||
750 | 777 | ||
751 | - | func | |
778 | + | func dY (dZ,ea,eb,ec) = if ((size(dZ) != S)) | |
752 | 779 | then throw("Wrong proportions data") | |
753 | 780 | else { | |
754 | - | func | |
755 | - | let dd = (parseIntValue( | |
781 | + | func ed (cL,ee) = { | |
782 | + | let dd = (parseIntValue(dZ[ee]) + ((ec * ea[ee]) * eb)) | |
756 | 783 | if ((0 > dd)) | |
757 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
784 | + | then throw(((((((("Panic! Pieces of type=" + toString(ee)) + ", sign=") + toString(ec)) + ", terrainCounts[i]=") + toString(ea[ee])) + ", landSizeIndex=") + toString(eb))) | |
758 | 785 | else (cL :+ toString(dd)) | |
759 | 786 | } | |
760 | 787 | ||
764 | 791 | let cP = nil | |
765 | 792 | func cQ (cR,cS) = if ((cS >= cO)) | |
766 | 793 | then cR | |
767 | - | else | |
794 | + | else ed(cR, cN[cS]) | |
768 | 795 | ||
769 | 796 | func cT (cR,cS) = if ((cS >= cO)) | |
770 | 797 | then cR | |
776 | 803 | } | |
777 | 804 | ||
778 | 805 | ||
779 | - | func | |
780 | - | let | |
781 | - | | |
782 | - | } | |
783 | - | ||
784 | - | ||
785 | - | func | |
786 | - | ||
787 | - | ||
788 | - | func | |
789 | - | func | |
790 | - | let | |
791 | - | (cL :+ toString((parseIntValue( | |
806 | + | func ef (ea,eb,ec) = { | |
807 | + | let dZ = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_") | |
808 | + | dY(dZ, ea, eb, ec) | |
809 | + | } | |
810 | + | ||
811 | + | ||
812 | + | func eg (eh) = [(size(split(eh, "A")) - 1), (size(split(eh, "B")) - 1), (size(split(eh, "C")) - 1), (size(split(eh, "D")) - 1), (size(split(eh, "E")) - 1), (size(split(eh, "F")) - 1)] | |
813 | + | ||
814 | + | ||
815 | + | func ei (ej,ea,ek,eb,el) = { | |
816 | + | func em (cL,ee) = { | |
817 | + | let en = ((fraction(ek, el, U) * ea[ee]) * eb) | |
818 | + | (cL :+ toString((parseIntValue(ej[ee]) + en))) | |
792 | 819 | } | |
793 | 820 | ||
794 | 821 | let cW = { | |
797 | 824 | let cP = nil | |
798 | 825 | func cQ (cR,cS) = if ((cS >= cO)) | |
799 | 826 | then cR | |
800 | - | else | |
827 | + | else em(cR, cN[cS]) | |
801 | 828 | ||
802 | 829 | func cT (cR,cS) = if ((cS >= cO)) | |
803 | 830 | then cR | |
809 | 836 | } | |
810 | 837 | ||
811 | 838 | ||
812 | - | func | |
813 | - | func | |
814 | - | let | |
815 | - | $Tuple2((cL._1 :+ | |
839 | + | func eo (ea,ek,eb,el) = { | |
840 | + | func em (cL,ee) = { | |
841 | + | let en = ((fraction(ek, el, U) * ea[ee]) * eb) | |
842 | + | $Tuple2((cL._1 :+ en), (cL._2 + en)) | |
816 | 843 | } | |
817 | 844 | ||
818 | 845 | let cN = [0, 1, 2, 3, 4, 5] | |
820 | 847 | let cP = $Tuple2(nil, 0) | |
821 | 848 | func cQ (cR,cS) = if ((cS >= cO)) | |
822 | 849 | then cR | |
823 | - | else | |
850 | + | else em(cR, cN[cS]) | |
824 | 851 | ||
825 | 852 | func cT (cR,cS) = if ((cS >= cO)) | |
826 | 853 | then cR | |
830 | 857 | } | |
831 | 858 | ||
832 | 859 | ||
833 | - | func | |
834 | - | let | |
835 | - | let | |
836 | - | if (( | |
837 | - | then $Tuple2(makeString( | |
838 | - | else if (( | |
860 | + | func ep (eq,er,es,et) = { | |
861 | + | let eu = es._1 | |
862 | + | let ev = es._2 | |
863 | + | if ((ev == 0)) | |
864 | + | then $Tuple2(makeString(eq, "_"), makeString(er, "_")) | |
865 | + | else if ((et >= ev)) | |
839 | 866 | then { | |
840 | - | func | |
867 | + | func ew (cL,ee) = (cL :+ toString((parseIntValue(eq[ee]) + eu[ee]))) | |
841 | 868 | ||
842 | 869 | let cW = { | |
843 | 870 | let cN = [0, 1, 2, 3, 4, 5] | |
845 | 872 | let cP = nil | |
846 | 873 | func cQ (cR,cS) = if ((cS >= cO)) | |
847 | 874 | then cR | |
848 | - | else | |
875 | + | else ew(cR, cN[cS]) | |
849 | 876 | ||
850 | 877 | func cT (cR,cS) = if ((cS >= cO)) | |
851 | 878 | then cR | |
853 | 880 | ||
854 | 881 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
855 | 882 | } | |
856 | - | $Tuple2(makeString(cW, "_"), makeString( | |
883 | + | $Tuple2(makeString(cW, "_"), makeString(er, "_")) | |
857 | 884 | } | |
858 | 885 | else { | |
859 | - | func | |
860 | - | let | |
861 | - | $Tuple2((cL._1 :+ toString((parseIntValue( | |
886 | + | func ex (cL,ee) = { | |
887 | + | let ey = fraction(eu[ee], et, ev) | |
888 | + | $Tuple2((cL._1 :+ toString((parseIntValue(eq[ee]) + ey))), (cL._2 :+ toString(((parseIntValue(er[ee]) + eu[ee]) - ey)))) | |
862 | 889 | } | |
863 | 890 | ||
864 | 891 | let cW = { | |
867 | 894 | let cP = $Tuple2(nil, nil) | |
868 | 895 | func cQ (cR,cS) = if ((cS >= cO)) | |
869 | 896 | then cR | |
870 | - | else | |
897 | + | else ex(cR, cN[cS]) | |
871 | 898 | ||
872 | 899 | func cT (cR,cS) = if ((cS >= cO)) | |
873 | 900 | then cR | |
880 | 907 | } | |
881 | 908 | ||
882 | 909 | ||
883 | - | func | |
884 | - | then | |
885 | - | else -( | |
886 | - | ||
887 | - | ||
888 | - | let | |
889 | - | ||
890 | - | func | |
891 | - | let | |
892 | - | let | |
910 | + | func ez (eA) = if ((eA >= toBigInt(0))) | |
911 | + | then eA | |
912 | + | else -(eA) | |
913 | + | ||
914 | + | ||
915 | + | let eB = [[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]] | |
916 | + | ||
917 | + | func eC (bS,eD) = { | |
918 | + | let eE = toInt((bS % cg)) | |
919 | + | let eF = if ((eD[0] > eE)) | |
893 | 920 | then "A" | |
894 | - | else if (( | |
921 | + | else if ((eD[1] > eE)) | |
895 | 922 | then "B" | |
896 | - | else if (( | |
923 | + | else if ((eD[2] > eE)) | |
897 | 924 | then "C" | |
898 | - | else if (( | |
925 | + | else if ((eD[3] > eE)) | |
899 | 926 | then "D" | |
900 | - | else if (( | |
927 | + | else if ((eD[4] > eE)) | |
901 | 928 | then "E" | |
902 | 929 | else "F" | |
903 | - | | |
904 | - | } | |
905 | - | ||
906 | - | ||
907 | - | func | |
908 | - | let | |
909 | - | func | |
910 | - | ||
911 | - | let | |
930 | + | eF | |
931 | + | } | |
932 | + | ||
933 | + | ||
934 | + | func eG (eH,eI) = { | |
935 | + | let eJ = eB[eI] | |
936 | + | func eK (cL,cM) = $Tuple2((((((cL._1 + eC(cL._2, eJ)) + eC((cL._2 / cg), eJ)) + eC((cL._2 / ch), eJ)) + eC((cL._2 / ci), eJ)) + eC((cL._2 / cj), eJ)), (cL._2 / ck)) | |
937 | + | ||
938 | + | let eL = { | |
912 | 939 | let cN = [1, 2, 3, 4, 5] | |
913 | 940 | let cO = size(cN) | |
914 | - | let cP = $Tuple2("", ( | |
941 | + | let cP = $Tuple2("", (eH / cf)) | |
915 | 942 | func cQ (cR,cS) = if ((cS >= cO)) | |
916 | 943 | then cR | |
917 | - | else | |
944 | + | else eK(cR, cN[cS]) | |
918 | 945 | ||
919 | 946 | func cT (cR,cS) = if ((cS >= cO)) | |
920 | 947 | then cR | |
922 | 949 | ||
923 | 950 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
924 | 951 | } | |
925 | - | eI._1 | |
926 | - | } | |
927 | - | ||
928 | - | ||
929 | - | func eJ (eK) = { | |
930 | - | let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
931 | - | [toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S)) | |
932 | - | then eL[aq] | |
933 | - | else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S)) | |
934 | - | then eL[ar] | |
935 | - | else "0_0_0_0_0_0", eL[as]] | |
952 | + | eL._1 | |
936 | 953 | } | |
937 | 954 | ||
938 | 955 | ||
939 | 956 | func eM (eN) = { | |
940 | - | let do = split(eN, "_") | |
957 | + | let eO = split(valueOrElse(getString(eN), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
958 | + | [toString(valueOrElse(parseInt(eO[ap]), 0)), if ((size(split(eO[aq], "_")) == S)) | |
959 | + | then eO[aq] | |
960 | + | else "0_0_0_0_0_0", if ((size(split(eO[ar], "_")) == S)) | |
961 | + | then eO[ar] | |
962 | + | else "0_0_0_0_0_0", eO[as]] | |
963 | + | } | |
964 | + | ||
965 | + | ||
966 | + | func eP (eQ) = { | |
967 | + | let do = split(eQ, "_") | |
941 | 968 | ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0])) | |
942 | 969 | } | |
943 | 970 | ||
944 | 971 | ||
945 | - | func | |
946 | - | let | |
947 | - | func | |
948 | - | ||
949 | - | func | |
972 | + | func eR (eS) = { | |
973 | + | let eT = eS[aj] | |
974 | + | func eU (cL,dj) = (cL + parseIntValue(dj)) | |
975 | + | ||
976 | + | func eV (cL,dj) = { | |
950 | 977 | let bB = cL._1 | |
951 | - | let | |
952 | - | $Tuple2((bB + 1), (cL._2 + ( | |
978 | + | let eW = (((parseIntValue(dj) + af) - 1) / af) | |
979 | + | $Tuple2((bB + 1), (cL._2 + (eW * bi))) | |
953 | 980 | } | |
954 | 981 | ||
955 | - | let | |
956 | - | let cN = split( | |
982 | + | let eX = { | |
983 | + | let cN = split(eS[ah], "_") | |
957 | 984 | let cO = size(cN) | |
958 | 985 | let cP = 0 | |
959 | 986 | func cQ (cR,cS) = if ((cS >= cO)) | |
960 | 987 | then cR | |
961 | - | else | |
988 | + | else eU(cR, cN[cS]) | |
962 | 989 | ||
963 | 990 | func cT (cR,cS) = if ((cS >= cO)) | |
964 | 991 | then cR | |
966 | 993 | ||
967 | 994 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
968 | 995 | } | |
969 | - | let | |
970 | - | let cN = split( | |
996 | + | let eY = { | |
997 | + | let cN = split(eS[ai], "_") | |
971 | 998 | let cO = size(cN) | |
972 | 999 | let cP = 0 | |
973 | - | func | |
1000 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
974 | 1001 | then cR | |
975 | - | else | |
976 | - | ||
977 | - | func | |
1002 | + | else eU(cR, cN[cS]) | |
1003 | + | ||
1004 | + | func fa (cR,cS) = if ((cS >= cO)) | |
978 | 1005 | then cR | |
979 | 1006 | else throw("List size exceeds 6") | |
980 | 1007 | ||
981 | - | | |
1008 | + | fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6) | |
982 | 1009 | } | |
983 | - | let | |
1010 | + | let fb = if ((eT == "")) | |
984 | 1011 | then 0 | |
985 | - | else ( let cN = split_4C( | |
1012 | + | else ( let cN = split_4C(eT, "_") | |
986 | 1013 | let cO = size(cN) | |
987 | 1014 | let cP = $Tuple2(0, 0) | |
988 | - | func | |
1015 | + | func fc (cR,cS) = if ((cS >= cO)) | |
989 | 1016 | then cR | |
990 | - | else | |
991 | - | ||
992 | - | func | |
1017 | + | else eV(cR, cN[cS]) | |
1018 | + | ||
1019 | + | func fd (cR,cS) = if ((cS >= cO)) | |
993 | 1020 | then cR | |
994 | 1021 | else throw("List size exceeds 50") | |
995 | 1022 | ||
996 | - | | |
997 | - | (( | |
998 | - | } | |
999 | - | ||
1000 | - | ||
1001 | - | func | |
1002 | - | let | |
1003 | - | let | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | then makeString(["0", toString( | |
1009 | - | else { | |
1010 | - | let | |
1011 | - | let | |
1012 | - | let | |
1013 | - | then parseIntValue( | |
1014 | - | else | |
1015 | - | makeString([toString( | |
1016 | - | } | |
1017 | - | [ | |
1018 | - | then | |
1019 | - | else "0_0_0_0_0_0", if ((size(split( | |
1020 | - | then | |
1021 | - | else "0_0_0_0_0_0", | |
1022 | - | } | |
1023 | - | ||
1024 | - | ||
1025 | - | func | |
1026 | - | let | |
1027 | - | let | |
1028 | - | (( | |
1029 | - | } | |
1030 | - | ||
1031 | - | ||
1032 | - | func | |
1033 | - | let | |
1034 | - | then ((( | |
1035 | - | else -((((-( | |
1036 | - | ( | |
1037 | - | } | |
1038 | - | ||
1039 | - | ||
1040 | - | func | |
1023 | + | fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 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 | |
1024 | + | ((eX + eY) + fb) | |
1025 | + | } | |
1026 | + | ||
1027 | + | ||
1028 | + | func fe (ff,fg,fh) = { | |
1029 | + | let eQ = ((toString(fg) + "_") + toString(fh)) | |
1030 | + | let fi = eP(eQ) | |
1031 | + | let fj = valueOrElse(getString(ff), (eQ + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1032 | + | let fk = split_4C(fj, ":") | |
1033 | + | let fl = eR(fk) | |
1034 | + | let fm = if ((5 > size(fk))) | |
1035 | + | then makeString(["0", toString(fl), toString((fi - fl)), toString(fi)], "_") | |
1036 | + | else { | |
1037 | + | let fn = split(fk[ak], "_") | |
1038 | + | let fo = parseIntValue(fn[al]) | |
1039 | + | let fp = if ((size(fn) > 1)) | |
1040 | + | then parseIntValue(fn[am]) | |
1041 | + | else fl | |
1042 | + | makeString([toString(fo), toString(fp), toString(((fi - fo) - fp)), toString(fi)], "_") | |
1043 | + | } | |
1044 | + | [fk[ag], if ((size(split(fk[ah], "_")) == S)) | |
1045 | + | then fk[ah] | |
1046 | + | else "0_0_0_0_0_0", if ((size(split(fk[ai], "_")) == S)) | |
1047 | + | then fk[ai] | |
1048 | + | else "0_0_0_0_0_0", fk[aj], fm] | |
1049 | + | } | |
1050 | + | ||
1051 | + | ||
1052 | + | func fq (eS) = { | |
1053 | + | let fr = eR(eS) | |
1054 | + | let fs = parseIntValue(split(eS[ak], "_")[al]) | |
1055 | + | ((eP(eS[ag]) - fr) - fs) | |
1056 | + | } | |
1057 | + | ||
1058 | + | ||
1059 | + | func ft (fu,fv) = { | |
1060 | + | let eW = if ((fu >= 0)) | |
1061 | + | then (((fu + fv) - 1) / fv) | |
1062 | + | else -((((-(fu) + fv) - 1) / fv)) | |
1063 | + | (eW * bi) | |
1064 | + | } | |
1065 | + | ||
1066 | + | ||
1067 | + | func fw (fx,eS,fy) = if ((size(fx) != 3)) | |
1041 | 1068 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1042 | 1069 | else { | |
1043 | - | let | |
1044 | - | let | |
1045 | - | let | |
1070 | + | let fz = split(fx[0], "_") | |
1071 | + | let fA = split(fx[1], "_") | |
1072 | + | let fB = if ((fx[2] == "")) | |
1046 | 1073 | then nil | |
1047 | - | else split( | |
1048 | - | if ((size( | |
1074 | + | else split(fx[2], "_") | |
1075 | + | if ((size(fz) != S)) | |
1049 | 1076 | then throw("All 6 resources should be passed") | |
1050 | - | else if ((size( | |
1077 | + | else if ((size(fA) != S)) | |
1051 | 1078 | then throw("All 6 materials should be passed") | |
1052 | 1079 | else { | |
1053 | - | let | |
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1080 | + | let et = fq(eS) | |
1081 | + | let fC = split(eS[ah], "_") | |
1082 | + | let fD = split(eS[ai], "_") | |
1083 | + | let fE = if ((eS[aj] == "")) | |
1057 | 1084 | then nil | |
1058 | - | else split( | |
1059 | - | let | |
1060 | - | let | |
1061 | - | let | |
1085 | + | else split(eS[aj], "_") | |
1086 | + | let er = split(fy[aq], "_") | |
1087 | + | let fF = split(fy[ar], "_") | |
1088 | + | let fG = if ((fy[as] == "")) | |
1062 | 1089 | then nil | |
1063 | - | else split( | |
1064 | - | func | |
1065 | - | let | |
1066 | - | let | |
1067 | - | let | |
1068 | - | let | |
1069 | - | if (( | |
1070 | - | then $Tuple4(( | |
1071 | - | else if (( | |
1072 | - | then if (( | |
1073 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1074 | - | else $Tuple4(( | |
1075 | - | else if ((-( | |
1076 | - | then throw((((("Attempt to take " + toString(-( | |
1077 | - | else $Tuple4(( | |
1090 | + | else split(fy[as], "_") | |
1091 | + | func fH (cL,dj) = { | |
1092 | + | let ee = cL._1 | |
1093 | + | let fI = parseIntValue(dj) | |
1094 | + | let fJ = parseIntValue(fC[ee]) | |
1095 | + | let fK = parseIntValue(er[ee]) | |
1096 | + | if ((fI == 0)) | |
1097 | + | then $Tuple4((ee + 1), (cL._2 :+ fC[ee]), (cL._3 :+ er[ee]), cL._4) | |
1098 | + | else if ((fI > 0)) | |
1099 | + | then if ((fI > fK)) | |
1100 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available")) | |
1101 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI)) | |
1102 | + | else if ((-(fI) > fJ)) | |
1103 | + | then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fJ)) + " available")) | |
1104 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI)) | |
1078 | 1105 | } | |
1079 | 1106 | ||
1080 | 1107 | let cW = { | |
1081 | - | let cN = | |
1108 | + | let cN = fz | |
1082 | 1109 | let cO = size(cN) | |
1083 | 1110 | let cP = $Tuple4(0, nil, nil, 0) | |
1084 | 1111 | func cQ (cR,cS) = if ((cS >= cO)) | |
1085 | 1112 | then cR | |
1086 | - | else | |
1113 | + | else fH(cR, cN[cS]) | |
1087 | 1114 | ||
1088 | 1115 | func cT (cR,cS) = if ((cS >= cO)) | |
1089 | 1116 | then cR | |
1091 | 1118 | ||
1092 | 1119 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1093 | 1120 | } | |
1094 | - | func | |
1095 | - | let | |
1096 | - | let | |
1097 | - | let | |
1098 | - | let | |
1099 | - | if (( | |
1100 | - | then $Tuple4(( | |
1101 | - | else if (( | |
1102 | - | then if (( | |
1103 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1104 | - | else $Tuple4(( | |
1105 | - | else if ((-( | |
1106 | - | then throw((((("Attempt to take " + toString(-( | |
1107 | - | else $Tuple4(( | |
1121 | + | func fL (cL,dj) = { | |
1122 | + | let ee = cL._1 | |
1123 | + | let fI = parseIntValue(dj) | |
1124 | + | let fM = parseIntValue(fD[ee]) | |
1125 | + | let fN = parseIntValue(fF[ee]) | |
1126 | + | if ((fI == 0)) | |
1127 | + | then $Tuple4((ee + 1), (cL._2 :+ fD[ee]), (cL._3 :+ fF[ee]), cL._4) | |
1128 | + | else if ((fI > 0)) | |
1129 | + | then if ((fI > fN)) | |
1130 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available")) | |
1131 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI)) | |
1132 | + | else if ((-(fI) > fM)) | |
1133 | + | then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fM)) + " available")) | |
1134 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI)) | |
1108 | 1135 | } | |
1109 | 1136 | ||
1110 | - | let | |
1111 | - | let cN = | |
1137 | + | let dW = { | |
1138 | + | let cN = fA | |
1112 | 1139 | let cO = size(cN) | |
1113 | 1140 | let cP = $Tuple4(0, nil, nil, cW._4) | |
1114 | - | func | |
1141 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
1115 | 1142 | then cR | |
1116 | - | else | |
1117 | - | ||
1118 | - | func | |
1143 | + | else fL(cR, cN[cS]) | |
1144 | + | ||
1145 | + | func fa (cR,cS) = if ((cS >= cO)) | |
1119 | 1146 | then cR | |
1120 | 1147 | else throw("List size exceeds 6") | |
1121 | 1148 | ||
1122 | - | | |
1149 | + | fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1123 | 1150 | } | |
1124 | - | func | |
1125 | - | let | |
1126 | - | let | |
1127 | - | let | |
1128 | - | then parseIntValue( | |
1151 | + | func fO (cL,dj) = { | |
1152 | + | let ee = cL._1 | |
1153 | + | let fI = parseIntValue(dj) | |
1154 | + | let fP = if ((size(fE) > ee)) | |
1155 | + | then parseIntValue(fE[ee]) | |
1129 | 1156 | else 0 | |
1130 | - | let | |
1131 | - | then parseIntValue( | |
1157 | + | let fQ = if ((size(fG) > ee)) | |
1158 | + | then parseIntValue(fG[ee]) | |
1132 | 1159 | else 0 | |
1133 | - | if (( | |
1134 | - | then $Tuple4(( | |
1135 | - | else if (( | |
1136 | - | then if (( | |
1137 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1160 | + | if ((fI == 0)) | |
1161 | + | then $Tuple4((ee + 1), (cL._2 :+ toString(fP)), (cL._3 :+ toString(fQ)), cL._4) | |
1162 | + | else if ((fI > 0)) | |
1163 | + | then if ((fI > fQ)) | |
1164 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fQ)) + " available")) | |
1138 | 1165 | else { | |
1139 | - | let | |
1140 | - | $Tuple4(( | |
1166 | + | let fR = (ft((fP + fI), af) - ft(fP, af)) | |
1167 | + | $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR)) | |
1141 | 1168 | } | |
1142 | - | else if ((-( | |
1143 | - | then throw((((("Attempt to take " + toString(-( | |
1169 | + | else if ((-(fI) > fP)) | |
1170 | + | then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fP)) + " available")) | |
1144 | 1171 | else { | |
1145 | - | let | |
1146 | - | $Tuple4(( | |
1172 | + | let fR = (ft((fP + fI), af) - ft(fP, af)) | |
1173 | + | $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR)) | |
1147 | 1174 | } | |
1148 | 1175 | } | |
1149 | 1176 | ||
1150 | - | let | |
1177 | + | let eO = if ((size(fB) != 0)) | |
1151 | 1178 | then { | |
1152 | - | let cN = | |
1179 | + | let cN = fB | |
1153 | 1180 | let cO = size(cN) | |
1154 | - | let cP = $Tuple4(0, nil, nil, | |
1155 | - | func | |
1181 | + | let cP = $Tuple4(0, nil, nil, dW._4) | |
1182 | + | func fc (cR,cS) = if ((cS >= cO)) | |
1156 | 1183 | then cR | |
1157 | - | else | |
1158 | - | ||
1159 | - | func | |
1184 | + | else fO(cR, cN[cS]) | |
1185 | + | ||
1186 | + | func fd (cR,cS) = if ((cS >= cO)) | |
1160 | 1187 | then cR | |
1161 | 1188 | else throw("List size exceeds 50") | |
1162 | 1189 | ||
1163 | - | | |
1190 | + | fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 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) | |
1164 | 1191 | } | |
1165 | - | else $Tuple4(0, | |
1166 | - | let | |
1167 | - | if (( | |
1168 | - | then throw((((("Attempt to put total " + toString( | |
1169 | - | else $Tuple7(makeString(cW._2, "_"), makeString( | |
1192 | + | else $Tuple4(0, fE, fG, dW._4) | |
1193 | + | let fS = eO._4 | |
1194 | + | if ((fS > et)) | |
1195 | + | then throw((((("Attempt to put total " + toString(fS)) + " stuff, but only ") + toString(et)) + " warehouse space left")) | |
1196 | + | else $Tuple7(makeString(cW._2, "_"), makeString(dW._2, "_"), makeString(eO._2, "_"), makeString(cW._3, "_"), makeString(dW._3, "_"), makeString(eO._3, "_"), fS) | |
1170 | 1197 | } | |
1171 | 1198 | } | |
1172 | 1199 | ||
1173 | 1200 | ||
1174 | - | func | |
1175 | - | let aT = toString( | |
1176 | - | let | |
1177 | - | let | |
1178 | - | let co = toString( | |
1179 | - | let | |
1180 | - | let | |
1181 | - | let | |
1182 | - | let | |
1183 | - | let av = calculateAssetId( | |
1184 | - | let | |
1185 | - | $Tuple2([IntegerEntry(cm(), ( | |
1186 | - | } | |
1187 | - | ||
1188 | - | ||
1189 | - | func | |
1201 | + | func fT (fU,fV) = { | |
1202 | + | let aT = toString(fU) | |
1203 | + | let fW = ez(toBigInt(fV)) | |
1204 | + | let fX = valueOrElse(getInteger(cm()), (cl + 1)) | |
1205 | + | let co = toString(fX) | |
1206 | + | let eI = toInt((fW % cf)) | |
1207 | + | let eh = eG(fW, eI) | |
1208 | + | let fY = aa[eI] | |
1209 | + | let fZ = Issue(cE(co, "S"), makeString([co, "S", eh, fY], "_"), 1, 0, false) | |
1210 | + | let av = calculateAssetId(fZ) | |
1211 | + | let ga = toBase58String(av) | |
1212 | + | $Tuple2([IntegerEntry(cm(), (fX + 1)), fZ, StringEntry(cn(co), ga), StringEntry(au(ga), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ga), 0), IntegerEntry(cr(ga, aT), 0), ScriptTransfer(fU, 1, av)], $Tuple2(ga, fY)) | |
1213 | + | } | |
1214 | + | ||
1215 | + | ||
1216 | + | func gb (aT,gc,gd) = if (!(sigVerify_8Kb(gc, gd, bX))) | |
1190 | 1217 | then throw("signature does not match") | |
1191 | 1218 | else { | |
1192 | - | let do = split(toUtf8String( | |
1193 | - | let | |
1194 | - | let | |
1195 | - | let | |
1196 | - | let | |
1197 | - | let | |
1198 | - | let | |
1199 | - | let | |
1200 | - | if (if (( | |
1219 | + | let do = split(toUtf8String(gc), ";") | |
1220 | + | let ge = split(do[0], "|") | |
1221 | + | let gf = split(ge[cA], "_") | |
1222 | + | let gg = parseIntValue(gf[0]) | |
1223 | + | let gh = parseIntValue(gf[1]) | |
1224 | + | let gi = split(do[1], ":") | |
1225 | + | let gj = gi[0] | |
1226 | + | let gk = parseIntValue(ge[cB]) | |
1227 | + | if (if ((gk > (lastBlock.timestamp + bZ))) | |
1201 | 1228 | then true | |
1202 | - | else ((lastBlock.timestamp - bZ) > | |
1203 | - | then throw(((("signature outdated: logTime=" + toString( | |
1229 | + | else ((lastBlock.timestamp - bZ) > gk)) | |
1230 | + | then throw(((("signature outdated: logTime=" + toString(gk)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1204 | 1231 | else { | |
1205 | - | let | |
1206 | - | let | |
1207 | - | if (( | |
1208 | - | then throw(((("Tx ids don't match! In state: " + | |
1232 | + | let gl = gi[1] | |
1233 | + | let gm = valueOrElse(getString(at(aT)), "") | |
1234 | + | if ((gm != gl)) | |
1235 | + | then throw(((("Tx ids don't match! In state: " + gm) + ", in msg: ") + gl)) | |
1209 | 1236 | else { | |
1210 | 1237 | let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked") | |
1211 | - | let | |
1212 | - | let | |
1213 | - | let | |
1214 | - | if (( | |
1215 | - | then throw(((("oldHealth=" + toString( | |
1216 | - | else if ((0 >= | |
1238 | + | let gn = aQ(p) | |
1239 | + | let go = J(valueOrElse(getInteger(r(p)), 0)) | |
1240 | + | let gp = valueOrElse(getInteger(gn), go) | |
1241 | + | if ((gp != gg)) | |
1242 | + | then throw(((("oldHealth=" + toString(gp)) + " from state does not match one from flight log=") + toString(gg))) | |
1243 | + | else if ((0 >= gg)) | |
1217 | 1244 | then throw("You can't fly with zero health") | |
1218 | 1245 | else { | |
1219 | - | let | |
1220 | - | then | |
1246 | + | let gq = if ((size(ge) > cC)) | |
1247 | + | then ge[cC] | |
1221 | 1248 | else "" | |
1222 | - | let | |
1223 | - | then | |
1249 | + | let gr = if ((size(ge) > cD)) | |
1250 | + | then ge[cD] | |
1224 | 1251 | else "" | |
1225 | - | let | |
1226 | - | then ( | |
1252 | + | let gs = if (if ((gh > 0)) | |
1253 | + | then (gq == "$") | |
1227 | 1254 | else false) | |
1228 | 1255 | then bR(invoke(bC, "sendUsdtPrize", [aT], nil)) | |
1229 | 1256 | else 0 | |
1230 | - | $Tuple5( | |
1257 | + | $Tuple5(gh, p, gs, gj, gr) | |
1231 | 1258 | } | |
1232 | 1259 | } | |
1233 | 1260 | } | |
1234 | 1261 | } | |
1235 | 1262 | ||
1236 | 1263 | ||
1237 | - | func | |
1238 | - | let aT = toString( | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | let | |
1245 | - | let dt = de( | |
1246 | - | if ((0 >= | |
1247 | - | then $Tuple3([IntegerEntry( | |
1248 | - | else { | |
1249 | - | let | |
1250 | - | let | |
1251 | - | $Tuple3(((( | |
1252 | - | } | |
1253 | - | } | |
1254 | - | ||
1255 | - | ||
1256 | - | func | |
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | let | |
1261 | - | ((T + fraction(T, (( | |
1262 | - | } | |
1263 | - | ||
1264 | - | ||
1265 | - | func | |
1266 | - | let | |
1267 | - | then $Tuple2( | |
1264 | + | func gt (fU,fV,gc,gd) = { | |
1265 | + | let aT = toString(fU) | |
1266 | + | let eJ = gb(aT, gc, gd) | |
1267 | + | let gn = aQ(eJ._2) | |
1268 | + | let eN = aO(eJ._2) | |
1269 | + | let fy = eM(eN) | |
1270 | + | let gu = split(fy[ar], "_") | |
1271 | + | let gv = makeString(cX(true, gu, cd), "_") | |
1272 | + | let dt = de(fy[as], eJ._5) | |
1273 | + | if ((0 >= eJ._1)) | |
1274 | + | then $Tuple3([IntegerEntry(gn, 0), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":"))], "", 0) | |
1275 | + | else { | |
1276 | + | let gw = fT(fU, fV) | |
1277 | + | let ga = gw._2._1 | |
1278 | + | $Tuple3((((gw._1 :+ StringEntry(aP(eJ._2), makeString([gw._2._2, "L", ga], "_"))) :+ IntegerEntry(gn, eJ._1)) :+ StringEntry(eN, makeString([fy[ap], fy[aq], gv, dt], ":"))), ga, eJ._3) | |
1279 | + | } | |
1280 | + | } | |
1281 | + | ||
1282 | + | ||
1283 | + | func gx (aF,gy) = { | |
1284 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
1285 | + | let gz = valueOrElse(getInteger(az(R, aF)), 0) | |
1286 | + | let gA = (fh / 6) | |
1287 | + | let gB = (fh / 7) | |
1288 | + | ((T + fraction(T, ((fh + gA) + (2 * gB)), 5)) + fraction(T, gz, (gy * 5))) | |
1289 | + | } | |
1290 | + | ||
1291 | + | ||
1292 | + | func gC (b,gD,gE) = { | |
1293 | + | let gF = if ((gD == cx)) | |
1294 | + | then $Tuple2(gE, valueOrElse(getString(aN(b)), "")) | |
1268 | 1295 | else { | |
1269 | 1296 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1270 | - | let | |
1271 | - | let | |
1272 | - | if (( | |
1273 | - | then throw((("Duck location type is " + | |
1274 | - | else $Tuple2( | |
1275 | - | } | |
1276 | - | let aF = | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | let | |
1281 | - | let | |
1282 | - | if (( | |
1297 | + | let gG = valueOrElse(getString(aP(p)), W) | |
1298 | + | let gH = split(value(gG), "_") | |
1299 | + | if ((gH[aV] != "L")) | |
1300 | + | then throw((("Duck location type is " + gH[aV]) + ", but should be L")) | |
1301 | + | else $Tuple2(gH[aW], p) | |
1302 | + | } | |
1303 | + | let aF = gF._1 | |
1304 | + | let gI = gF._2 | |
1305 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
1306 | + | let gK = ax(aF) | |
1307 | + | let gL = valueOrErrorMessage(getInteger(gK), (("Land " + gJ.name) + " is not staked")) | |
1308 | + | let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned")) | |
1309 | + | if ((gM != b)) | |
1283 | 1310 | then throw((P + " is not yours")) | |
1284 | 1311 | else { | |
1285 | - | let | |
1286 | - | $Tuple4( | |
1287 | - | } | |
1288 | - | } | |
1289 | - | ||
1290 | - | ||
1291 | - | func | |
1312 | + | let gN = split(gJ.description, "_") | |
1313 | + | $Tuple4(gI, aF, gN, gL) | |
1314 | + | } | |
1315 | + | } | |
1316 | + | ||
1317 | + | ||
1318 | + | func gO (b,fu,gD,gE) = if ((0 > fu)) | |
1292 | 1319 | then throw("Negative amount") | |
1293 | 1320 | else { | |
1294 | - | let | |
1295 | - | let bU = | |
1296 | - | let | |
1297 | - | let | |
1298 | - | if ((0 > | |
1299 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1321 | + | let dI = gC(b, gD, gE) | |
1322 | + | let bU = dI._3[bI] | |
1323 | + | let ea = eg(dI._3[bJ]) | |
1324 | + | let ek = (lastBlock.timestamp - dI._4) | |
1325 | + | if ((0 > ek)) | |
1326 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dI._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1300 | 1327 | else { | |
1301 | - | let | |
1302 | - | let | |
1303 | - | let | |
1304 | - | if (( | |
1305 | - | then throw(((("Not enough resources, available = " + toString( | |
1328 | + | let gy = bT(bU) | |
1329 | + | let gP = gx(dI._2, gy) | |
1330 | + | let gQ = fraction(ek, (gP * gy), U) | |
1331 | + | if ((fu > gQ)) | |
1332 | + | then throw(((("Not enough resources, available = " + toString(gQ)) + ", requested = ") + toString(fu))) | |
1306 | 1333 | else { | |
1307 | - | let | |
1308 | - | let | |
1309 | - | let | |
1310 | - | let | |
1311 | - | let | |
1312 | - | let | |
1313 | - | let | |
1314 | - | let | |
1315 | - | let | |
1316 | - | if (if (( | |
1317 | - | then ( | |
1334 | + | let gR = fraction((gQ - fu), U, (gP * gy)) | |
1335 | + | let gS = (lastBlock.timestamp - gR) | |
1336 | + | let fg = (gy / bj) | |
1337 | + | let es = eo(ea, (ek - gR), fg, gP) | |
1338 | + | let ff = aE(dI._2) | |
1339 | + | let fh = valueOrElse(getInteger(ay(dI._2)), 0) | |
1340 | + | let eS = fe(ff, fg, fh) | |
1341 | + | let fn = split(eS[ak], "_") | |
1342 | + | let et = parseIntValue(fn[an]) | |
1343 | + | if (if ((gD == cx)) | |
1344 | + | then (fu > et) | |
1318 | 1345 | else false) | |
1319 | - | then throw((("Only " + toString( | |
1346 | + | then throw((("Only " + toString(et)) + " space left in warehouse")) | |
1320 | 1347 | else { | |
1321 | - | let | |
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | then $Tuple4( | |
1327 | - | else if (( | |
1328 | - | then $Tuple4( | |
1348 | + | let eN = aO(dI._1) | |
1349 | + | let fy = eM(eN) | |
1350 | + | let er = split(fy[aq], "_") | |
1351 | + | let eq = split(eS[ah], "_") | |
1352 | + | let gT = if ((gD == cx)) | |
1353 | + | then $Tuple4(ei(eq, ea, (ek - gR), fg, gP), fy[aq], (parseIntValue(fn[am]) + es._2), (parseIntValue(fn[an]) - es._2)) | |
1354 | + | else if ((gD == cy)) | |
1355 | + | then $Tuple4(eS[ah], ei(er, ea, (ek - gR), fg, gP), parseIntValue(fn[am]), parseIntValue(fn[an])) | |
1329 | 1356 | else { | |
1330 | - | let | |
1331 | - | let | |
1332 | - | $Tuple4( | |
1357 | + | let gU = ep(eq, er, es, et) | |
1358 | + | let gV = min([parseIntValue(fn[an]), es._2]) | |
1359 | + | $Tuple4(gU._1, gU._2, (parseIntValue(fn[am]) + gV), (parseIntValue(fn[an]) - gV)) | |
1333 | 1360 | } | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | $Tuple5([IntegerEntry(ax( | |
1361 | + | let gW = gT._1 | |
1362 | + | let gX = gT._2 | |
1363 | + | let gY = gT._3 | |
1364 | + | let gZ = gT._4 | |
1365 | + | $Tuple5([IntegerEntry(ax(dI._2), gS), IntegerEntry(aB(P, dI._2, b), gS)], eN, [fy[ap], gX, fy[ar], fy[as]], ff, [eS[ag], gW, eS[ai], eS[aj], makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")]) | |
1339 | 1366 | } | |
1340 | 1367 | } | |
1341 | 1368 | } | |
1342 | 1369 | } | |
1343 | 1370 | ||
1344 | 1371 | ||
1345 | - | func | |
1346 | - | let | |
1347 | - | let | |
1348 | - | let | |
1349 | - | | |
1350 | - | } | |
1351 | - | ||
1352 | - | ||
1353 | - | func | |
1354 | - | let b = toString( | |
1355 | - | let | |
1356 | - | let | |
1357 | - | let | |
1358 | - | let | |
1359 | - | if (( | |
1372 | + | func ha (b,aF,gy,gD) = { | |
1373 | + | let gK = ax(aF) | |
1374 | + | let gL = value(getInteger(gK)) | |
1375 | + | let gQ = (fraction((lastBlock.timestamp - gL), gx(aF, gy), U) * gy) | |
1376 | + | gO(b, gQ, gD, aF) | |
1377 | + | } | |
1378 | + | ||
1379 | + | ||
1380 | + | func hb (cY,fU,hc,aF) = { | |
1381 | + | let b = toString(fU) | |
1382 | + | let dI = gC(b, cz, aF) | |
1383 | + | let gy = bT(dI._3[bI]) | |
1384 | + | let hd = ay(dI._2) | |
1385 | + | let he = valueOrElse(getInteger(hd), 0) | |
1386 | + | if ((he >= 3)) | |
1360 | 1387 | then throw("Currently max infrastructure level = 3") | |
1361 | 1388 | else { | |
1362 | - | let O = ( | |
1363 | - | let | |
1389 | + | let O = (he + 1) | |
1390 | + | let hf = fraction(cc, (gy * O), bj) | |
1364 | 1391 | if (if (!(cY)) | |
1365 | - | then ( | |
1392 | + | then (hc != hf) | |
1366 | 1393 | else false) | |
1367 | - | then throw(("Payment attached should be " + toString( | |
1394 | + | then throw(("Payment attached should be " + toString(hf))) | |
1368 | 1395 | else { | |
1369 | - | let | |
1370 | - | let | |
1371 | - | let | |
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | let | |
1378 | - | let | |
1379 | - | let | |
1380 | - | let | |
1381 | - | $Tuple3(([IntegerEntry( | |
1396 | + | let eN = aO(dI._1) | |
1397 | + | let fy = eM(eN) | |
1398 | + | let gu = split(fy[ar], "_") | |
1399 | + | let hg = fraction(be, (gy * O), bj) | |
1400 | + | let gv = makeString(cX(cY, gu, hg), "_") | |
1401 | + | let hh = ha(b, dI._2, gy, cz) | |
1402 | + | let hi = hh._5 | |
1403 | + | let hj = eP(hi[ag]) | |
1404 | + | let hk = makeString([split(hi[ag], "_")[0], toString(O)], "_") | |
1405 | + | let hl = eP(hk) | |
1406 | + | let fn = split(hi[ak], "_") | |
1407 | + | let hm = makeString([fn[al], fn[am], toString(((parseIntValue(fn[an]) + hl) - hj)), toString(hl)], "_") | |
1408 | + | $Tuple3(([IntegerEntry(hd, O), IntegerEntry(cr(dI._2, b), O), StringEntry(eN, makeString([fy[ap], hh._3[aq], gv, fy[as]], ":")), StringEntry(hh._4, makeString([hk, hi[ah], hi[ai], hi[aj], hm], ":"))] ++ hh._1), O, hg) | |
1382 | 1409 | } | |
1383 | 1410 | } | |
1384 | 1411 | } | |
1385 | 1412 | ||
1386 | 1413 | ||
1387 | - | func | |
1414 | + | func hn (p,ho) = if (!(aZ)) | |
1388 | 1415 | then $Tuple2(nil, 0) | |
1389 | 1416 | else { | |
1390 | - | let | |
1391 | - | let | |
1392 | - | let I = valueOrElse(getInteger(bD, | |
1393 | - | let N = (I + | |
1394 | - | let | |
1395 | - | let | |
1396 | - | $Tuple2([IntegerEntry( | |
1417 | + | let hp = r(p) | |
1418 | + | let hq = q(p) | |
1419 | + | let I = valueOrElse(getInteger(bD, hq), 0) | |
1420 | + | let N = (I + ho) | |
1421 | + | let hr = L(valueOrElse(getInteger(bD, hp), 0), N) | |
1422 | + | let hs = s(p) | |
1423 | + | $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N) | |
1397 | 1424 | } | |
1398 | 1425 | ||
1399 | 1426 | ||
1400 | - | func | |
1427 | + | func ht (b,ho) = if (!(aZ)) | |
1401 | 1428 | then $Tuple2(nil, 0) | |
1402 | 1429 | else { | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let I = valueOrElse(getInteger(bD, | |
1406 | - | let N = (I + | |
1407 | - | let | |
1408 | - | let | |
1409 | - | $Tuple2([IntegerEntry( | |
1430 | + | let hp = v(b) | |
1431 | + | let hq = u(b) | |
1432 | + | let I = valueOrElse(getInteger(bD, hq), 0) | |
1433 | + | let N = (I + ho) | |
1434 | + | let hr = L(valueOrElse(getInteger(bD, hp), 0), N) | |
1435 | + | let hs = w(b) | |
1436 | + | $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N) | |
1410 | 1437 | } | |
1411 | 1438 | ||
1412 | 1439 | ||
1413 | - | func | |
1440 | + | func hu (b) = { | |
1414 | 1441 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1415 | - | let | |
1416 | - | let | |
1417 | - | if (!(isDefined( | |
1442 | + | let hv = aI(b) | |
1443 | + | let hw = getString(hv) | |
1444 | + | if (!(isDefined(hw))) | |
1418 | 1445 | then throw("You are not eligible for ONBOARD artifact") | |
1419 | 1446 | else { | |
1420 | - | let | |
1421 | - | let | |
1422 | - | if (isDefined( | |
1423 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1447 | + | let hx = aK(b) | |
1448 | + | let hy = getString(hx) | |
1449 | + | if (isDefined(hy)) | |
1450 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hy))) | |
1424 | 1451 | else { | |
1425 | - | let | |
1426 | - | let | |
1427 | - | if (isDefined( | |
1428 | - | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value( | |
1429 | - | else ([StringEntry( | |
1452 | + | let hz = aJ(p) | |
1453 | + | let hA = getString(hz) | |
1454 | + | if (isDefined(hA)) | |
1455 | + | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hA))) | |
1456 | + | else ([StringEntry(hx, p), StringEntry(hz, b)] ++ hn(p, F)._1) | |
1430 | 1457 | } | |
1431 | 1458 | } | |
1432 | 1459 | } | |
1433 | 1460 | ||
1434 | 1461 | ||
1435 | - | func | |
1436 | - | let | |
1437 | - | let aF = | |
1438 | - | let | |
1439 | - | let | |
1440 | - | if ((valueOrElse(getInteger( | |
1462 | + | func hB (b,gE) = { | |
1463 | + | let dI = gC(b, cz, gE) | |
1464 | + | let aF = dI._2 | |
1465 | + | let gy = bT(dI._3[bI]) | |
1466 | + | let hC = az(R, aF) | |
1467 | + | if ((valueOrElse(getInteger(hC), 0) > 0)) | |
1441 | 1468 | then throw("Presale artifact is already activated") | |
1442 | - | else if ((parseIntValue( | |
1469 | + | else if ((parseIntValue(dI._3[bH]) > cl)) | |
1443 | 1470 | then throw((((P + " ") + aF) + " is not eligible for presale artifact")) | |
1444 | 1471 | else { | |
1445 | - | let | |
1446 | - | (((( | |
1472 | + | let hh = ha(b, aF, gy, cz) | |
1473 | + | ((((hh._1 :+ IntegerEntry(hC, gy)) :+ IntegerEntry(cs(R, aF, b), gy)) :+ StringEntry(hh._2, makeString(hh._3, ":"))) :+ StringEntry(hh._4, makeString(hh._5, ":"))) | |
1447 | 1474 | } | |
1448 | 1475 | } | |
1449 | 1476 | ||
1450 | 1477 | ||
1451 | - | func | |
1478 | + | func hD (hE,O,hF,b,hG,fV,hH) = { | |
1452 | 1479 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1453 | - | func | |
1454 | - | let | |
1455 | - | let | |
1456 | - | let | |
1457 | - | let | |
1458 | - | if (( | |
1480 | + | func hI (cL,aF) = { | |
1481 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
1482 | + | let gK = ax(aF) | |
1483 | + | let gL = valueOrErrorMessage(getInteger(gK), (("NFT " + gJ.name) + " is not staked")) | |
1484 | + | let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned")) | |
1485 | + | if ((gM != b)) | |
1459 | 1486 | then throw((P + " is not yours")) | |
1460 | 1487 | else { | |
1461 | - | let | |
1462 | - | let | |
1488 | + | let gN = split(gJ.description, "_") | |
1489 | + | let fY = gN[bK] | |
1463 | 1490 | if (if ((cL._3 != "")) | |
1464 | - | then (cL._3 != | |
1491 | + | then (cL._3 != fY) | |
1465 | 1492 | else false) | |
1466 | 1493 | then throw("Lands should be on the same continent to merge") | |
1467 | 1494 | else { | |
1468 | - | let bU = | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | let | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1495 | + | let bU = gN[bI] | |
1496 | + | let hJ = cL._1 | |
1497 | + | let ee = valueOrErrorMessage(indexOf(hJ, bU), "You haven't passed all the lands needed") | |
1498 | + | let hK = (take(hJ, ee) + drop(hJ, (ee + 1))) | |
1499 | + | let gy = bT(bU) | |
1500 | + | let hL = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0)) | |
1501 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
1502 | + | let hM = { | |
1476 | 1503 | let bc = bU | |
1477 | 1504 | if (("S" == bc)) | |
1478 | 1505 | then 3 | |
1484 | 1511 | then 6 | |
1485 | 1512 | else throw("Only S, M, L, XL can merge") | |
1486 | 1513 | } | |
1487 | - | if (( | |
1514 | + | if ((fh != hM)) | |
1488 | 1515 | then throw("All lands should be maxed to merge") | |
1489 | 1516 | else { | |
1490 | - | let co = | |
1491 | - | let | |
1492 | - | let | |
1493 | - | if ((0 > | |
1494 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1517 | + | let co = gN[bH] | |
1518 | + | let ea = eg(gN[bJ]) | |
1519 | + | let ek = (lastBlock.timestamp - gL) | |
1520 | + | if ((0 > ek)) | |
1521 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gL)) + ", current = ") + toString(lastBlock.timestamp))) | |
1495 | 1522 | else { | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let cV = | |
1500 | - | let | |
1501 | - | let bB = indexOf( | |
1523 | + | let gP = gx(aF, gy) | |
1524 | + | let fg = (gy / bj) | |
1525 | + | let gX = ei(split(cL._4, "_"), ea, ek, fg, gP) | |
1526 | + | let cV = dY(split(cL._6, "_"), ea, fg, -1) | |
1527 | + | let hN = cL._7 | |
1528 | + | let bB = indexOf(hN, aF) | |
1502 | 1529 | if (!(isDefined(bB))) | |
1503 | 1530 | then throw(("Your staked lands don't contain " + aF)) | |
1504 | 1531 | else { | |
1505 | - | let | |
1506 | - | let | |
1507 | - | $Tuple8( | |
1532 | + | let hO = aw(aF) | |
1533 | + | let hP = valueOrElse(getString(hO), "") | |
1534 | + | $Tuple8(hK, hL, fY, gX, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hO)) :+ DeleteEntry(cp(hP))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hN, value(bB)), (cL._8 + gy)) | |
1508 | 1535 | } | |
1509 | 1536 | } | |
1510 | 1537 | } | |
1512 | 1539 | } | |
1513 | 1540 | } | |
1514 | 1541 | ||
1515 | - | let | |
1516 | - | let | |
1517 | - | let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | then split_51C(value( | |
1542 | + | let eN = aO(p) | |
1543 | + | let fy = eM(eN) | |
1544 | + | let hQ = valueOrElse(getString(bL()), "0_0_0_0_0_0") | |
1545 | + | let hR = bM(b) | |
1546 | + | let hS = getString(hR) | |
1547 | + | let hT = if (isDefined(hS)) | |
1548 | + | then split_51C(value(hS), "_") | |
1522 | 1549 | else nil | |
1523 | 1550 | let cW = { | |
1524 | - | let cN = | |
1551 | + | let cN = hG | |
1525 | 1552 | let cO = size(cN) | |
1526 | - | let cP = $Tuple8( | |
1553 | + | let cP = $Tuple8(hF, 0, "", fy[aq], nil, hQ, hT, 0) | |
1527 | 1554 | func cQ (cR,cS) = if ((cS >= cO)) | |
1528 | 1555 | then cR | |
1529 | - | else | |
1556 | + | else hI(cR, cN[cS]) | |
1530 | 1557 | ||
1531 | 1558 | func cT (cR,cS) = if ((cS >= cO)) | |
1532 | 1559 | then cR | |
1534 | 1561 | ||
1535 | 1562 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
1536 | 1563 | } | |
1537 | - | let | |
1538 | - | let | |
1539 | - | let | |
1540 | - | let | |
1541 | - | let | |
1542 | - | let | |
1543 | - | let av = calculateAssetId( | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1564 | + | let fY = cW._3 | |
1565 | + | let eI = valueOrErrorMessage(indexOf(aa, fY), ("Unknown continent: " + fY)) | |
1566 | + | let eh = eG(ez(toBigInt(fV)), eI) | |
1567 | + | let fX = valueOrElse(getInteger(cm()), (cl + 1)) | |
1568 | + | let hU = toString(fX) | |
1569 | + | let fZ = Issue(cE(hU, hE), makeString([hU, hE, eh, fY], "_"), 1, 0, false) | |
1570 | + | let av = calculateAssetId(fZ) | |
1571 | + | let hV = toBase58String(av) | |
1572 | + | let gv = makeString(cX((hH > 0), split(fy[ar], "_"), hH), "_") | |
1573 | + | let hW = bN(b) | |
1574 | + | let hX = valueOrElse(getInteger(hW), 0) | |
1548 | 1575 | $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0)) | |
1549 | - | then StringEntry( | |
1550 | - | else DeleteEntry( | |
1576 | + | then StringEntry(hR, makeString_11C(cW._7, "_")) | |
1577 | + | else DeleteEntry(hR))) :+ IntegerEntry(hW, if ((cW._8 > hX)) | |
1551 | 1578 | then 0 | |
1552 | - | else ( | |
1553 | - | } | |
1554 | - | ||
1555 | - | ||
1556 | - | func | |
1557 | - | ||
1558 | - | ||
1559 | - | func | |
1560 | - | let | |
1579 | + | else (hX - cW._8))) :+ IntegerEntry(cm(), (fX + 1))) :+ fZ) :+ StringEntry(cn(hU), hV)) :+ StringEntry(au(hV), b)) :+ StringEntry(ct(hU), b)) :+ IntegerEntry(az(R, hV), cW._2)) :+ IntegerEntry(cs(R, hV, b), cW._2)) :+ IntegerEntry(ay(hV), O)) :+ IntegerEntry(cr(hV, b), O)) :+ StringEntry(eN, makeString([fy[ap], cW._4, gv, fy[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fY, "L", hV], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hV) | |
1580 | + | } | |
1581 | + | ||
1582 | + | ||
1583 | + | func hY (b,hG,fV) = hD("M", 3, "SSSS", b, hG, fV, 0) | |
1584 | + | ||
1585 | + | ||
1586 | + | func hZ (b,hG,fV,cY,hc) = { | |
1587 | + | let hf = (cc * 4) | |
1561 | 1588 | if (if (!(cY)) | |
1562 | - | then ( | |
1589 | + | then (hc != hf) | |
1563 | 1590 | else false) | |
1564 | - | then throw(("Payment attached should be " + toString( | |
1565 | - | else | |
1566 | - | } | |
1567 | - | ||
1568 | - | ||
1569 | - | func | |
1570 | - | let | |
1591 | + | then throw(("Payment attached should be " + toString(hf))) | |
1592 | + | else hD("L", 4, "SMM", b, hG, fV, (be * 4)) | |
1593 | + | } | |
1594 | + | ||
1595 | + | ||
1596 | + | func ia (b,hG,fV,cY,hc) = { | |
1597 | + | let hf = (cc * 47) | |
1571 | 1598 | if (if (!(cY)) | |
1572 | - | then ( | |
1599 | + | then (hc != hf) | |
1573 | 1600 | else false) | |
1574 | - | then throw(("Payment attached should be " + toString( | |
1575 | - | else | |
1576 | - | } | |
1577 | - | ||
1578 | - | ||
1579 | - | func | |
1580 | - | let | |
1601 | + | then throw(("Payment attached should be " + toString(hf))) | |
1602 | + | else hD("XL", 5, "SSSML", b, hG, fV, (be * 47)) | |
1603 | + | } | |
1604 | + | ||
1605 | + | ||
1606 | + | func ib (b,hG,fV,cY,hc) = { | |
1607 | + | let hf = (cc * 54) | |
1581 | 1608 | if (if (!(cY)) | |
1582 | - | then ( | |
1609 | + | then (hc != hf) | |
1583 | 1610 | else false) | |
1584 | - | then throw(("Payment attached should be " + toString( | |
1585 | - | else | |
1586 | - | } | |
1587 | - | ||
1588 | - | ||
1589 | - | func | |
1590 | - | let | |
1591 | - | let bc = size( | |
1611 | + | then throw(("Payment attached should be " + toString(hf))) | |
1612 | + | else hD("XXL", 6, "LXL", b, hG, fV, (be * 54)) | |
1613 | + | } | |
1614 | + | ||
1615 | + | ||
1616 | + | func ic (cY,b,hc,hG,fV) = { | |
1617 | + | let id = { | |
1618 | + | let bc = size(hG) | |
1592 | 1619 | if ((4 == bc)) | |
1593 | - | then | |
1620 | + | then hY(b, hG, fV) | |
1594 | 1621 | else if ((3 == bc)) | |
1595 | - | then | |
1622 | + | then hZ(b, hG, fV, cY, hc) | |
1596 | 1623 | else if ((5 == bc)) | |
1597 | - | then | |
1624 | + | then ia(b, hG, fV, cY, hc) | |
1598 | 1625 | else if ((2 == bc)) | |
1599 | - | then | |
1626 | + | then ib(b, hG, fV, cY, hc) | |
1600 | 1627 | else throw("Unknown merge") | |
1601 | 1628 | } | |
1602 | - | | |
1603 | - | } | |
1604 | - | ||
1605 | - | ||
1606 | - | func | |
1629 | + | id | |
1630 | + | } | |
1631 | + | ||
1632 | + | ||
1633 | + | func ie (ee) = if (if ((ee.originCaller != bC)) | |
1607 | 1634 | then valueOrElse(getBoolean(aR()), false) | |
1608 | 1635 | else false) | |
1609 | 1636 | then throw("Contracts are under maintenance") | |
1610 | - | else StringEntry(at(toString( | |
1611 | - | ||
1612 | - | ||
1613 | - | @Callable( | |
1614 | - | func constructorV1 ( | |
1637 | + | else StringEntry(at(toString(ee.originCaller)), toBase58String(ee.transactionId)) | |
1638 | + | ||
1639 | + | ||
1640 | + | @Callable(ee) | |
1641 | + | func constructorV1 (if) = if ((ee.caller != this)) | |
1615 | 1642 | then throw("Permission denied") | |
1616 | - | else [StringEntry(bw(), | |
1617 | - | ||
1618 | - | ||
1619 | - | ||
1620 | - | @Callable( | |
1621 | - | func setBlocked ( | |
1643 | + | else [StringEntry(bw(), if)] | |
1644 | + | ||
1645 | + | ||
1646 | + | ||
1647 | + | @Callable(ee) | |
1648 | + | func setBlocked (ig) = if ((ee.caller != this)) | |
1622 | 1649 | then throw("permission denied") | |
1623 | - | else [BooleanEntry(aR(), | |
1624 | - | ||
1625 | - | ||
1626 | - | ||
1627 | - | @Callable( | |
1650 | + | else [BooleanEntry(aR(), ig)] | |
1651 | + | ||
1652 | + | ||
1653 | + | ||
1654 | + | @Callable(ee) | |
1628 | 1655 | func stakeLand () = { | |
1629 | - | let | |
1630 | - | if ((size( | |
1656 | + | let ih = ie(ee) | |
1657 | + | if ((size(ee.payments) != 1)) | |
1631 | 1658 | then throw("Exactly one payment required") | |
1632 | 1659 | else { | |
1633 | - | let | |
1634 | - | let av = value( | |
1635 | - | let bp = toString( | |
1636 | - | if (( | |
1660 | + | let ii = value(ee.payments[0]) | |
1661 | + | let av = value(ii.assetId) | |
1662 | + | let bp = toString(ee.caller) | |
1663 | + | if ((ii.amount != 1)) | |
1637 | 1664 | then throw((("NFT " + P) + " token should be attached as payment")) | |
1638 | 1665 | else { | |
1639 | - | let | |
1640 | - | if (( | |
1666 | + | let gJ = value(assetInfo(av)) | |
1667 | + | if ((gJ.issuer != this)) | |
1641 | 1668 | then throw("Unknown issuer of token") | |
1642 | - | else if (!(contains( | |
1669 | + | else if (!(contains(gJ.name, P))) | |
1643 | 1670 | then throw((("Only NFT " + P) + " tokens are accepted")) | |
1644 | 1671 | else { | |
1645 | - | let | |
1646 | - | let co = if (contains( | |
1647 | - | then dropRight( | |
1648 | - | else if (contains( | |
1649 | - | then dropRight( | |
1650 | - | else dropRight( | |
1672 | + | let ij = drop(gJ.name, 4) | |
1673 | + | let co = if (contains(ij, "XXL")) | |
1674 | + | then dropRight(ij, 3) | |
1675 | + | else if (contains(ij, "XL")) | |
1676 | + | then dropRight(ij, 2) | |
1677 | + | else dropRight(ij, 1) | |
1651 | 1678 | if (!(isDefined(parseInt(co)))) | |
1652 | - | then throw(("Cannot parse land number from " + | |
1679 | + | then throw(("Cannot parse land number from " + gJ.name)) | |
1653 | 1680 | else { | |
1654 | 1681 | let aF = toBase58String(av) | |
1655 | - | let | |
1656 | - | if (isDefined(getInteger( | |
1657 | - | then throw((("NFT " + | |
1682 | + | let gK = ax(aF) | |
1683 | + | if (isDefined(getInteger(gK))) | |
1684 | + | then throw((("NFT " + gJ.name) + " is already staked")) | |
1658 | 1685 | else { | |
1659 | - | let | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let cV = | |
1663 | - | let | |
1664 | - | let | |
1665 | - | let | |
1666 | - | let | |
1667 | - | then split_51C(value( | |
1686 | + | let gN = split(gJ.description, "_") | |
1687 | + | let ea = eg(gN[bJ]) | |
1688 | + | let gy = bT(gN[bI]) | |
1689 | + | let cV = ef(ea, (gy / bj), 1) | |
1690 | + | let gz = valueOrElse(getInteger(az(R, aF)), 0) | |
1691 | + | let hR = bM(bp) | |
1692 | + | let hS = getString(hR) | |
1693 | + | let hN = if (isDefined(hS)) | |
1694 | + | then split_51C(value(hS), "_") | |
1668 | 1695 | else nil | |
1669 | - | if (containsElement( | |
1696 | + | if (containsElement(hN, aF)) | |
1670 | 1697 | then throw(("Your staked lands already contain " + aF)) | |
1671 | 1698 | else { | |
1672 | - | let | |
1673 | - | let | |
1674 | - | let | |
1675 | - | let | |
1676 | - | $Tuple2([IntegerEntry( | |
1699 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
1700 | + | let hW = bN(bp) | |
1701 | + | let ik = valueOrElse(getInteger(hW), 0) | |
1702 | + | let il = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil)) | |
1703 | + | $Tuple2([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hR, makeString_11C((hN :+ aF), "_")), IntegerEntry(hW, (ik + gy)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gz), IntegerEntry(cr(aF, bp), fh), StringEntry(bL(), cV), ih], il) | |
1677 | 1704 | } | |
1678 | 1705 | } | |
1679 | 1706 | } | |
1684 | 1711 | ||
1685 | 1712 | ||
1686 | 1713 | ||
1687 | - | @Callable( | |
1688 | - | func unstakeLand ( | |
1689 | - | let | |
1690 | - | if ((size( | |
1714 | + | @Callable(ee) | |
1715 | + | func unstakeLand (gE) = { | |
1716 | + | let ih = ie(ee) | |
1717 | + | if ((size(ee.payments) != 0)) | |
1691 | 1718 | then throw("No payments required") | |
1692 | 1719 | else { | |
1693 | - | let b = toString( | |
1694 | - | let | |
1695 | - | let aF = | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | let cV = | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let bB = indexOf( | |
1720 | + | let b = toString(ee.caller) | |
1721 | + | let dI = gC(b, cy, gE) | |
1722 | + | let aF = dI._2 | |
1723 | + | let hR = bM(b) | |
1724 | + | let ea = eg(dI._3[bJ]) | |
1725 | + | let gy = bT(dI._3[bI]) | |
1726 | + | let cV = ef(ea, (gy / bj), -1) | |
1727 | + | let hh = ha(b, aF, gy, cy) | |
1728 | + | let hN = split_51C(valueOrElse(getString(hR), ""), "_") | |
1729 | + | let bB = indexOf(hN, aF) | |
1703 | 1730 | if (!(isDefined(bB))) | |
1704 | 1731 | then throw(("Your staked lands don't contain " + aF)) | |
1705 | 1732 | else { | |
1706 | - | let | |
1707 | - | let | |
1708 | - | if (( | |
1709 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1733 | + | let im = lastBlock.timestamp | |
1734 | + | let in = valueOrElse(getInteger(bF, aS(b)), 0) | |
1735 | + | if ((in >= im)) | |
1736 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(in))) | |
1710 | 1737 | else { | |
1711 | - | let | |
1712 | - | if (( | |
1713 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1738 | + | let io = (valueOrElse(getInteger(bG, a(b)), 0) + bf) | |
1739 | + | if ((io > im)) | |
1740 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(io))) | |
1714 | 1741 | else { | |
1715 | - | let | |
1716 | - | let | |
1717 | - | let | |
1742 | + | let hW = bN(b) | |
1743 | + | let hX = valueOrElse(getInteger(hW), 0) | |
1744 | + | let ip = if ((gy > hX)) | |
1718 | 1745 | then 0 | |
1719 | - | else ( | |
1720 | - | let | |
1721 | - | $Tuple2([ScriptTransfer( | |
1722 | - | then StringEntry( | |
1723 | - | else DeleteEntry( | |
1746 | + | else (hX - gy) | |
1747 | + | let il = bR(invoke(bG, "onStakeUnstakeLand", [b], nil)) | |
1748 | + | $Tuple2([ScriptTransfer(ee.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hh._2, makeString(hh._3, ":")), if ((size(hN) > 1)) | |
1749 | + | then StringEntry(hR, makeString_11C(removeByIndex(hN, value(bB)), "_")) | |
1750 | + | else DeleteEntry(hR), IntegerEntry(hW, ip), ih], il) | |
1724 | 1751 | } | |
1725 | 1752 | } | |
1726 | 1753 | } | |
1729 | 1756 | ||
1730 | 1757 | ||
1731 | 1758 | ||
1732 | - | @Callable( | |
1759 | + | @Callable(ee) | |
1733 | 1760 | func stakeDuck () = { | |
1734 | - | let | |
1735 | - | if ((size( | |
1761 | + | let ih = ie(ee) | |
1762 | + | if ((size(ee.payments) != 1)) | |
1736 | 1763 | then throw("Exactly one payment required") | |
1737 | 1764 | else { | |
1738 | - | let | |
1739 | - | let av = value( | |
1740 | - | let bp = toString( | |
1741 | - | if (( | |
1765 | + | let ii = value(ee.payments[0]) | |
1766 | + | let av = value(ii.assetId) | |
1767 | + | let bp = toString(ee.caller) | |
1768 | + | if ((ii.amount != 1)) | |
1742 | 1769 | then throw((("NFT " + Q) + " token should be attached as payment")) | |
1743 | 1770 | else { | |
1744 | - | let | |
1745 | - | if (if (( | |
1746 | - | then ( | |
1771 | + | let gJ = value(assetInfo(av)) | |
1772 | + | if (if ((gJ.issuer != bV)) | |
1773 | + | then (gJ.issuer != bW) | |
1747 | 1774 | else false) | |
1748 | 1775 | then throw((("Unknown issuer of " + Q) + " token")) | |
1749 | - | else if (!(contains( | |
1776 | + | else if (!(contains(gJ.name, Q))) | |
1750 | 1777 | then throw((("Only NFT " + Q) + " tokens are accepted")) | |
1751 | 1778 | else { | |
1752 | - | let | |
1753 | - | let | |
1754 | - | if (isDefined(getInteger( | |
1755 | - | then throw((("NFT " + | |
1779 | + | let iq = toBase58String(av) | |
1780 | + | let gK = ax(iq) | |
1781 | + | if (isDefined(getInteger(gK))) | |
1782 | + | then throw((("NFT " + gJ.name) + " is already staked")) | |
1756 | 1783 | else if (isDefined(getString(aN(bp)))) | |
1757 | - | then throw(("You already staked one duck: " + | |
1784 | + | then throw(("You already staked one duck: " + gJ.name)) | |
1758 | 1785 | else { | |
1759 | - | let | |
1760 | - | let | |
1761 | - | let | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | ([IntegerEntry( | |
1786 | + | let ir = aP(iq) | |
1787 | + | let is = getString(ir) | |
1788 | + | let eN = aO(iq) | |
1789 | + | let it = getString(eN) | |
1790 | + | let gn = aQ(iq) | |
1791 | + | let go = J(valueOrElse(getInteger(r(iq)), 0)) | |
1792 | + | let iu = valueOrElse(getInteger(gn), go) | |
1793 | + | ([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iq), bp), StringEntry(aN(bp), iq)] ++ (if (isDefined(is)) | |
1767 | 1794 | then nil | |
1768 | - | else ([StringEntry( | |
1795 | + | else ([StringEntry(ir, W)] ++ (if (isDefined(it)) | |
1769 | 1796 | then nil | |
1770 | - | else (([StringEntry( | |
1797 | + | else (([StringEntry(eN, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gn, iu)) :+ ih))))) | |
1771 | 1798 | } | |
1772 | 1799 | } | |
1773 | 1800 | } | |
1776 | 1803 | ||
1777 | 1804 | ||
1778 | 1805 | ||
1779 | - | @Callable( | |
1780 | - | func unstakeDuck ( | |
1781 | - | let | |
1782 | - | if ((size( | |
1806 | + | @Callable(ee) | |
1807 | + | func unstakeDuck (iq) = { | |
1808 | + | let ih = ie(ee) | |
1809 | + | if ((size(ee.payments) != 0)) | |
1783 | 1810 | then throw("No payments required") | |
1784 | 1811 | else { | |
1785 | - | let av = fromBase58String( | |
1786 | - | let bp = toString( | |
1787 | - | let | |
1788 | - | let | |
1789 | - | if (!(isDefined(getInteger( | |
1790 | - | then throw((("NFT " + | |
1812 | + | let av = fromBase58String(iq) | |
1813 | + | let bp = toString(ee.caller) | |
1814 | + | let gJ = value(assetInfo(av)) | |
1815 | + | let gK = ax(toBase58String(av)) | |
1816 | + | if (!(isDefined(getInteger(gK)))) | |
1817 | + | then throw((("NFT " + gJ.name) + " is not staked")) | |
1791 | 1818 | else if (!(isDefined(getString(aN(bp))))) | |
1792 | - | then throw((("The duck " + | |
1819 | + | then throw((("The duck " + gJ.name) + " is not staked")) | |
1793 | 1820 | else { | |
1794 | - | let | |
1795 | - | if (( | |
1821 | + | let gM = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gJ.name) + " is orphaned")) | |
1822 | + | if ((gM != bp)) | |
1796 | 1823 | then throw("Staked NFT is not yours") | |
1797 | 1824 | else { | |
1798 | - | let | |
1799 | - | let | |
1800 | - | let | |
1801 | - | if (( | |
1802 | - | then throw((("Please heal your duck to " + toString( | |
1803 | - | else [ScriptTransfer( | |
1825 | + | let gn = aQ(iq) | |
1826 | + | let go = J(valueOrElse(getInteger(r(iq)), 0)) | |
1827 | + | let iv = valueOrElse(getInteger(gn), go) | |
1828 | + | if ((go > iv)) | |
1829 | + | then throw((("Please heal your duck to " + toString(go)) + "hp before unstaking")) | |
1830 | + | else [ScriptTransfer(ee.caller, 1, av), DeleteEntry(gK), DeleteEntry(gn), DeleteEntry(aP(iq)), DeleteEntry(aM(iq)), DeleteEntry(aB(Q, iq, bp)), DeleteEntry(aN(bp)), ih] | |
1804 | 1831 | } | |
1805 | 1832 | } | |
1806 | 1833 | } | |
1808 | 1835 | ||
1809 | 1836 | ||
1810 | 1837 | ||
1811 | - | @Callable( | |
1812 | - | func claimRes ( | |
1813 | - | let | |
1814 | - | if ((size( | |
1838 | + | @Callable(ee) | |
1839 | + | func claimRes (fu,iw) = { | |
1840 | + | let ih = ie(ee) | |
1841 | + | if ((size(ee.payments) != 0)) | |
1815 | 1842 | then throw("No payments required") | |
1816 | 1843 | else { | |
1817 | - | let b = toString( | |
1818 | - | let dd = | |
1844 | + | let b = toString(ee.originCaller) | |
1845 | + | let dd = gO(b, fu, cy, iw) | |
1819 | 1846 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1820 | - | $Tuple2(((((dd._1 ++ | |
1821 | - | } | |
1822 | - | } | |
1823 | - | ||
1824 | - | ||
1825 | - | ||
1826 | - | @Callable( | |
1827 | - | func claimResToWH ( | |
1828 | - | let | |
1829 | - | if ((size( | |
1847 | + | $Tuple2(((((dd._1 ++ hn(p, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._3[aq]) | |
1848 | + | } | |
1849 | + | } | |
1850 | + | ||
1851 | + | ||
1852 | + | ||
1853 | + | @Callable(ee) | |
1854 | + | func claimResToWH (fu,iw) = { | |
1855 | + | let ih = ie(ee) | |
1856 | + | if ((size(ee.payments) != 0)) | |
1830 | 1857 | then throw("No payments required") | |
1831 | 1858 | else { | |
1832 | - | let b = toString( | |
1833 | - | let dd = | |
1834 | - | $Tuple2(((((dd._1 ++ | |
1835 | - | } | |
1836 | - | } | |
1837 | - | ||
1838 | - | ||
1839 | - | ||
1840 | - | @Callable( | |
1841 | - | func flight ( | |
1842 | - | let | |
1843 | - | if ((size( | |
1859 | + | let b = toString(ee.originCaller) | |
1860 | + | let dd = gO(b, fu, cx, iw) | |
1861 | + | $Tuple2(((((dd._1 ++ ht(b, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._5[ah]) | |
1862 | + | } | |
1863 | + | } | |
1864 | + | ||
1865 | + | ||
1866 | + | ||
1867 | + | @Callable(ee) | |
1868 | + | func flight (gc,gd) = { | |
1869 | + | let ih = ie(ee) | |
1870 | + | if ((size(ee.payments) != 0)) | |
1844 | 1871 | then throw("No payments required") | |
1845 | 1872 | else { | |
1846 | - | let aT = toString( | |
1847 | - | let | |
1848 | - | let p = | |
1849 | - | let | |
1850 | - | let | |
1851 | - | if (( | |
1873 | + | let aT = toString(ee.caller) | |
1874 | + | let eJ = gb(aT, gc, gd) | |
1875 | + | let p = eJ._2 | |
1876 | + | let ir = aP(p) | |
1877 | + | let gG = valueOrElse(getString(ir), W) | |
1878 | + | if ((eJ._4 == gG)) | |
1852 | 1879 | then throw("You can't fly to the same location") | |
1853 | 1880 | else { | |
1854 | - | let | |
1855 | - | let | |
1856 | - | let dt = de( | |
1857 | - | $Tuple2(([StringEntry( | |
1858 | - | then | |
1859 | - | else | |
1881 | + | let eN = aO(p) | |
1882 | + | let fy = eM(eN) | |
1883 | + | let dt = de(fy[as], eJ._5) | |
1884 | + | $Tuple2(([StringEntry(ir, if ((eJ._1 > 0)) | |
1885 | + | then eJ._4 | |
1886 | + | else gG), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":")), IntegerEntry(aQ(p), eJ._1), ih] ++ hn(p, if ((eJ._1 > 0)) | |
1860 | 1887 | then y | |
1861 | - | else z)._1), | |
1888 | + | else z)._1), eJ._3) | |
1862 | 1889 | } | |
1863 | 1890 | } | |
1864 | 1891 | } | |
1865 | 1892 | ||
1866 | 1893 | ||
1867 | 1894 | ||
1868 | - | @Callable( | |
1869 | - | func heal ( | |
1870 | - | let | |
1871 | - | if (if (if ((0 > | |
1895 | + | @Callable(ee) | |
1896 | + | func heal (ix,iy,iz) = { | |
1897 | + | let ih = ie(ee) | |
1898 | + | if (if (if ((0 > ix)) | |
1872 | 1899 | then true | |
1873 | - | else (0 > | |
1900 | + | else (0 > iy)) | |
1874 | 1901 | then true | |
1875 | - | else (0 > | |
1902 | + | else (0 > iz)) | |
1876 | 1903 | then throw("Quantity cannot be negative") | |
1877 | 1904 | else { | |
1878 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1879 | - | let | |
1880 | - | let | |
1881 | - | let | |
1882 | - | let | |
1883 | - | if (( | |
1884 | - | then throw((("HP should be < " + toString( | |
1905 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
1906 | + | let iA = [ix, iy, iz] | |
1907 | + | let gn = aQ(p) | |
1908 | + | let go = J(valueOrElse(getInteger(r(p)), 0)) | |
1909 | + | let iB = valueOrElse(getInteger(gn), go) | |
1910 | + | if ((iB >= go)) | |
1911 | + | then throw((("HP should be < " + toString(go)) + " to heal")) | |
1885 | 1912 | else { | |
1886 | - | let | |
1887 | - | let | |
1888 | - | let | |
1913 | + | let eN = aO(p) | |
1914 | + | let fy = eM(eN) | |
1915 | + | let iC = if ((fy[as] == "")) | |
1889 | 1916 | then nil | |
1890 | - | else split( | |
1891 | - | func | |
1917 | + | else split(fy[as], "_") | |
1918 | + | func iD (cL,iE) = { | |
1892 | 1919 | let bS = cL._2 | |
1893 | - | let | |
1894 | - | then parseIntValue( | |
1920 | + | let eA = if ((size(iC) > bS)) | |
1921 | + | then parseIntValue(iC[bS]) | |
1895 | 1922 | else 0 | |
1896 | 1923 | if ((3 > bS)) | |
1897 | 1924 | then { | |
1898 | - | let | |
1899 | - | if (( | |
1900 | - | then throw(((("You have only " + toString( | |
1901 | - | else $Tuple3((cL._1 :+ toString(( | |
1925 | + | let iF = iA[bS] | |
1926 | + | if ((iF > eA)) | |
1927 | + | then throw(((("You have only " + toString(eA)) + " of ") + Z[bS])) | |
1928 | + | else $Tuple3((cL._1 :+ toString((eA - iF))), (bS + 1), (cL._3 + (bY[bS] * iF))) | |
1902 | 1929 | } | |
1903 | - | else $Tuple3((cL._1 :+ toString( | |
1930 | + | else $Tuple3((cL._1 :+ toString(eA)), (bS + 1), cL._3) | |
1904 | 1931 | } | |
1905 | 1932 | ||
1906 | 1933 | let dd = { | |
1909 | 1936 | let cP = $Tuple3(nil, 0, 0) | |
1910 | 1937 | func cQ (cR,cS) = if ((cS >= cO)) | |
1911 | 1938 | then cR | |
1912 | - | else | |
1939 | + | else iD(cR, cN[cS]) | |
1913 | 1940 | ||
1914 | 1941 | func cT (cR,cS) = if ((cS >= cO)) | |
1915 | 1942 | then cR | |
1917 | 1944 | ||
1918 | 1945 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
1919 | 1946 | } | |
1920 | - | let | |
1921 | - | $Tuple2(([IntegerEntry( | |
1947 | + | let iG = min([go, (iB + dd._3)]) | |
1948 | + | $Tuple2(([IntegerEntry(gn, iG), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dd._1, "_")], ":")), ih] ++ hn(p, (G * ((ix + iy) + iz)))._1), iG) | |
1922 | 1949 | } | |
1923 | 1950 | } | |
1924 | 1951 | } | |
1925 | 1952 | ||
1926 | 1953 | ||
1927 | 1954 | ||
1928 | - | @Callable( | |
1955 | + | @Callable(ee) | |
1929 | 1956 | func healES () = { | |
1930 | - | let | |
1931 | - | if ((size( | |
1957 | + | let ih = ie(ee) | |
1958 | + | if ((size(ee.payments) != 1)) | |
1932 | 1959 | then throw("Exactly one payment required") | |
1933 | 1960 | else { | |
1934 | - | let | |
1935 | - | if (( | |
1961 | + | let ii = value(ee.payments[0]) | |
1962 | + | if ((ii.assetId != bb)) | |
1936 | 1963 | then throw("Allowed USDT payment only!") | |
1937 | 1964 | else { | |
1938 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | if (( | |
1965 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
1966 | + | let gn = aQ(p) | |
1967 | + | let go = J(valueOrElse(getInteger(r(p)), 0)) | |
1968 | + | let iB = valueOrElse(getInteger(gn), go) | |
1969 | + | if ((iB > 0)) | |
1943 | 1970 | then throw("HP should be 0 to call Emergency Service") | |
1944 | 1971 | else { | |
1945 | - | let | |
1946 | - | let | |
1947 | - | let | |
1972 | + | let eN = aO(p) | |
1973 | + | let fy = eM(eN) | |
1974 | + | let iC = if ((fy[as] == "")) | |
1948 | 1975 | then nil | |
1949 | - | else split( | |
1950 | - | let | |
1951 | - | then parseIntValue( | |
1976 | + | else split(fy[as], "_") | |
1977 | + | let iH = if ((size(iC) > 0)) | |
1978 | + | then parseIntValue(iC[0]) | |
1952 | 1979 | else 0 | |
1953 | - | let | |
1954 | - | then parseIntValue( | |
1980 | + | let iI = if ((size(iC) > 1)) | |
1981 | + | then parseIntValue(iC[1]) | |
1955 | 1982 | else 0 | |
1956 | - | let | |
1957 | - | then parseIntValue( | |
1983 | + | let iJ = if ((size(iC) > 2)) | |
1984 | + | then parseIntValue(iC[2]) | |
1958 | 1985 | else 0 | |
1959 | - | if (if (if (( | |
1986 | + | if (if (if ((iH > 0)) | |
1960 | 1987 | then true | |
1961 | - | else ( | |
1988 | + | else (iI > 0)) | |
1962 | 1989 | then true | |
1963 | - | else ( | |
1990 | + | else (iJ > 0)) | |
1964 | 1991 | then throw("You have to use own Medical Kit") | |
1965 | 1992 | else { | |
1966 | - | let | |
1967 | - | let | |
1968 | - | then split(value( | |
1993 | + | let iK = getString(bE, aU()) | |
1994 | + | let iL = if (isDefined(iK)) | |
1995 | + | then split(value(iK), "_") | |
1969 | 1996 | else nil | |
1970 | - | let | |
1971 | - | then parseIntValue( | |
1997 | + | let iM = if ((size(iL) > 0)) | |
1998 | + | then parseIntValue(iL[0]) | |
1972 | 1999 | else 0 | |
1973 | - | if ((0 >= | |
2000 | + | if ((0 >= iM)) | |
1974 | 2001 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1975 | 2002 | else { | |
1976 | - | let | |
1977 | - | let | |
2003 | + | let iG = (iB + bY[0]) | |
2004 | + | let iN = makeString([toString((iM - 1)), removeByIndex(iL, 0)], "_") | |
1978 | 2005 | let aY = split(ac[0], "_") | |
1979 | - | let | |
1980 | - | let | |
1981 | - | if (( | |
1982 | - | then throw(("Payment attached should be " + toString( | |
2006 | + | let iO = aX(aY) | |
2007 | + | let iP = fraction((iO * Y), X, (10 * af)) | |
2008 | + | if ((ii.amount != iP)) | |
2009 | + | then throw(("Payment attached should be " + toString(iP))) | |
1983 | 2010 | else { | |
1984 | - | let dd = bO(invoke(bE, "updateEsStorage", [ | |
1985 | - | $Tuple2(([IntegerEntry( | |
2011 | + | let dd = bO(invoke(bE, "updateEsStorage", [iN], [AttachedPayment(bb, iP)])) | |
2012 | + | $Tuple2(([IntegerEntry(gn, iG), ih] ++ hn(p, A)._1), dd) | |
1986 | 2013 | } | |
1987 | 2014 | } | |
1988 | 2015 | } | |
1993 | 2020 | ||
1994 | 2021 | ||
1995 | 2022 | ||
1996 | - | @Callable( | |
1997 | - | func updateBackpack (p, | |
2023 | + | @Callable(ee) | |
2024 | + | func updateBackpack (p,iQ) = if ((ee.caller != bE)) | |
1998 | 2025 | then throw("permission denied") | |
1999 | - | else $Tuple2([StringEntry(aO(p), | |
2000 | - | ||
2001 | - | ||
2002 | - | ||
2003 | - | @Callable( | |
2026 | + | else $Tuple2([StringEntry(aO(p), iQ)], iQ) | |
2027 | + | ||
2028 | + | ||
2029 | + | ||
2030 | + | @Callable(ee) | |
2004 | 2031 | func buySLand () = { | |
2005 | - | let | |
2006 | - | if ((size( | |
2032 | + | let ih = ie(ee) | |
2033 | + | if ((size(ee.payments) != 1)) | |
2007 | 2034 | then throw("Exactly one payment required") | |
2008 | 2035 | else { | |
2009 | - | let | |
2010 | - | if (( | |
2036 | + | let ii = value(ee.payments[0]) | |
2037 | + | if ((ii.assetId != bb)) | |
2011 | 2038 | then throw("Allowed USDT payment only!") | |
2012 | - | else if (( | |
2039 | + | else if ((ii.amount != ce)) | |
2013 | 2040 | then throw(("Payment attached should be " + toString(ce))) | |
2014 | 2041 | else { | |
2015 | - | let dd = | |
2016 | - | $Tuple2((((dd._1 :+ ScriptTransfer(bE, | |
2042 | + | let dd = fT(ee.caller, ee.transactionId) | |
2043 | + | $Tuple2((((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) ++ ht(toString(ee.caller), C)._1) :+ ih), dd._2._1) | |
2017 | 2044 | } | |
2018 | 2045 | } | |
2019 | 2046 | } | |
2020 | 2047 | ||
2021 | 2048 | ||
2022 | 2049 | ||
2023 | - | @Callable( | |
2024 | - | func expedition ( | |
2025 | - | let | |
2026 | - | if ((size( | |
2050 | + | @Callable(ee) | |
2051 | + | func expedition (gc,gd) = { | |
2052 | + | let ih = ie(ee) | |
2053 | + | if ((size(ee.payments) != 0)) | |
2027 | 2054 | then throw("No payments required") | |
2028 | 2055 | else { | |
2029 | - | let dd = | |
2030 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2031 | - | $Tuple2(((dd._1 ++ | |
2032 | - | } | |
2033 | - | } | |
2034 | - | ||
2035 | - | ||
2036 | - | ||
2037 | - | @Callable( | |
2056 | + | let dd = gt(ee.caller, ee.transactionId, gc, gd) | |
2057 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
2058 | + | $Tuple2(((dd._1 ++ hn(p, C)._1) :+ ih), $Tuple2(dd._2, dd._3)) | |
2059 | + | } | |
2060 | + | } | |
2061 | + | ||
2062 | + | ||
2063 | + | ||
2064 | + | @Callable(ee) | |
2038 | 2065 | func upgradeInfra (aF) = { | |
2039 | - | let | |
2040 | - | if ((size( | |
2066 | + | let ih = ie(ee) | |
2067 | + | if ((size(ee.payments) != 0)) | |
2041 | 2068 | then throw("No payments required") | |
2042 | 2069 | else { | |
2043 | - | let dd = | |
2044 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2045 | - | $Tuple2(((dd._1 :+ | |
2046 | - | } | |
2047 | - | } | |
2048 | - | ||
2049 | - | ||
2050 | - | ||
2051 | - | @Callable( | |
2052 | - | func upgradeInfraUsdt (aF) = if (( | |
2070 | + | let dd = hb(true, ee.caller, 0, aF) | |
2071 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
2072 | + | $Tuple2(((dd._1 :+ ih) ++ hn(p, fraction(D, dd._3, bi))._1), dd._2) | |
2073 | + | } | |
2074 | + | } | |
2075 | + | ||
2076 | + | ||
2077 | + | ||
2078 | + | @Callable(ee) | |
2079 | + | func upgradeInfraUsdt (aF) = if ((ee.caller != this)) | |
2053 | 2080 | then throw("Permission denied") | |
2054 | 2081 | else { | |
2055 | - | let | |
2056 | - | if ((size( | |
2082 | + | let ih = ie(ee) | |
2083 | + | if ((size(ee.payments) != 1)) | |
2057 | 2084 | then throw("Exactly one payment required") | |
2058 | 2085 | else { | |
2059 | - | let | |
2060 | - | if (( | |
2086 | + | let ii = value(ee.payments[0]) | |
2087 | + | if ((ii.assetId != bb)) | |
2061 | 2088 | then throw("Allowed USDT payment only!") | |
2062 | 2089 | else { | |
2063 | - | let dd = | |
2064 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2090 | + | let dd = hb(false, ee.caller, ii.amount, aF) | |
2091 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2) | |
2065 | 2092 | } | |
2066 | 2093 | } | |
2067 | 2094 | } | |
2068 | 2095 | ||
2069 | 2096 | ||
2070 | 2097 | ||
2071 | - | @Callable( | |
2072 | - | func activateArtifact ( | |
2073 | - | let | |
2074 | - | if ((size( | |
2098 | + | @Callable(ee) | |
2099 | + | func activateArtifact (iR,iS) = { | |
2100 | + | let ih = ie(ee) | |
2101 | + | if ((size(ee.payments) != 0)) | |
2075 | 2102 | then throw("No payments required") | |
2076 | 2103 | else { | |
2077 | - | let b = toString( | |
2104 | + | let b = toString(ee.caller) | |
2078 | 2105 | let dd = { | |
2079 | - | let bc = | |
2106 | + | let bc = iR | |
2080 | 2107 | if (("PRESALE" == bc)) | |
2081 | - | then | |
2108 | + | then hB(b, iS) | |
2082 | 2109 | else if (("ONBOARD" == bc)) | |
2083 | - | then | |
2110 | + | then hu(b) | |
2084 | 2111 | else throw("Unknown artifact") | |
2085 | 2112 | } | |
2086 | - | (dd :+ | |
2087 | - | } | |
2088 | - | } | |
2089 | - | ||
2090 | - | ||
2091 | - | ||
2092 | - | @Callable( | |
2093 | - | func mergeLands ( | |
2094 | - | let | |
2095 | - | if ((size( | |
2113 | + | (dd :+ ih) | |
2114 | + | } | |
2115 | + | } | |
2116 | + | ||
2117 | + | ||
2118 | + | ||
2119 | + | @Callable(ee) | |
2120 | + | func mergeLands (hG) = { | |
2121 | + | let ih = ie(ee) | |
2122 | + | if ((size(ee.payments) != 0)) | |
2096 | 2123 | then throw("No payments required") | |
2097 | 2124 | else { | |
2098 | - | let dd = | |
2099 | - | $Tuple2(((dd._1 :+ | |
2100 | - | } | |
2101 | - | } | |
2102 | - | ||
2103 | - | ||
2104 | - | ||
2105 | - | @Callable( | |
2106 | - | func mergeLandsUsdt ( | |
2107 | - | let | |
2108 | - | if ((size( | |
2125 | + | let dd = ic(true, toString(ee.caller), 0, hG, ee.transactionId) | |
2126 | + | $Tuple2(((dd._1 :+ ih) ++ ht(toString(ee.caller), E)._1), dd._2) | |
2127 | + | } | |
2128 | + | } | |
2129 | + | ||
2130 | + | ||
2131 | + | ||
2132 | + | @Callable(ee) | |
2133 | + | func mergeLandsUsdt (hG) = { | |
2134 | + | let ih = ie(ee) | |
2135 | + | if ((size(ee.payments) != 1)) | |
2109 | 2136 | then throw("Exactly one payment required") | |
2110 | 2137 | else { | |
2111 | - | let | |
2112 | - | if (( | |
2138 | + | let ii = value(ee.payments[0]) | |
2139 | + | if ((ii.assetId != bb)) | |
2113 | 2140 | then throw("Allowed USDT payment only!") | |
2114 | 2141 | else { | |
2115 | - | let dd = | |
2116 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2142 | + | let dd = ic(false, toString(ee.caller), ii.amount, hG, ee.transactionId) | |
2143 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2) | |
2117 | 2144 | } | |
2118 | 2145 | } | |
2119 | 2146 | } | |
2120 | 2147 | ||
2121 | 2148 | ||
2122 | 2149 | ||
2123 | - | @Callable( | |
2124 | - | func cargoExchange ( | |
2125 | - | let | |
2126 | - | if ((size( | |
2150 | + | @Callable(ee) | |
2151 | + | func cargoExchange (iT,aF) = { | |
2152 | + | let ih = ie(ee) | |
2153 | + | if ((size(ee.payments) != 0)) | |
2127 | 2154 | then throw("No payments required") | |
2128 | 2155 | else { | |
2129 | - | let | |
2130 | - | let b = toString( | |
2131 | - | let | |
2132 | - | let | |
2133 | - | if (!(isDefined(getInteger( | |
2134 | - | then throw(( | |
2156 | + | let fx = split_4C(iT, ":") | |
2157 | + | let b = toString(ee.originCaller) | |
2158 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2159 | + | let gK = ax(aF) | |
2160 | + | if (!(isDefined(getInteger(gK)))) | |
2161 | + | then throw((gJ.name + " is not staked")) | |
2135 | 2162 | else { | |
2136 | - | let | |
2137 | - | if (( | |
2163 | + | let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned")) | |
2164 | + | if ((gM != b)) | |
2138 | 2165 | then throw((P + " is not yours")) | |
2139 | 2166 | else { | |
2140 | - | let | |
2141 | - | let | |
2167 | + | let fg = (bT(split(gJ.description, "_")[bI]) / bj) | |
2168 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
2142 | 2169 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2143 | - | let | |
2144 | - | let | |
2145 | - | if (( | |
2146 | - | then throw((("Duck location type is " + | |
2147 | - | else if (( | |
2170 | + | let gG = valueOrElse(getString(aP(p)), W) | |
2171 | + | let gH = split(value(gG), "_") | |
2172 | + | if ((gH[aV] != "L")) | |
2173 | + | then throw((("Duck location type is " + gH[aV]) + ", but should be L")) | |
2174 | + | else if ((gH[aW] != aF)) | |
2148 | 2175 | then throw(("Duck should be on the land " + aF)) | |
2149 | 2176 | else { | |
2150 | - | let | |
2151 | - | let | |
2152 | - | let | |
2153 | - | let | |
2154 | - | let dd = | |
2155 | - | let | |
2156 | - | let | |
2157 | - | let | |
2158 | - | [StringEntry( | |
2177 | + | let ff = aE(aF) | |
2178 | + | let eS = fe(ff, fg, fh) | |
2179 | + | let eN = aO(p) | |
2180 | + | let fy = eM(eN) | |
2181 | + | let dd = fw(fx, eS, fy) | |
2182 | + | let fn = split(eS[ak], "_") | |
2183 | + | let gY = (parseIntValue(fn[am]) + dd._7) | |
2184 | + | let gZ = (parseIntValue(fn[an]) - dd._7) | |
2185 | + | [StringEntry(eN, makeString_2C([fy[ap], dd._4, dd._5, dd._6], ":")), StringEntry(ff, makeString_2C([eS[ag], dd._1, dd._2, dd._3, makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")], ":")), ih] | |
2159 | 2186 | } | |
2160 | 2187 | } | |
2161 | 2188 | } | |
2164 | 2191 | ||
2165 | 2192 | ||
2166 | 2193 | ||
2167 | - | @Callable( | |
2168 | - | func saveWarehouse ( | |
2194 | + | @Callable(ee) | |
2195 | + | func saveWarehouse (fj,aF) = if ((ee.caller != bE)) | |
2169 | 2196 | then throw("Access denied") | |
2170 | 2197 | else { | |
2171 | - | let | |
2172 | - | let | |
2173 | - | if ((size( | |
2198 | + | let ff = aE(aF) | |
2199 | + | let fk = split_4C(fj, ":") | |
2200 | + | if ((size(fk) != 5)) | |
2174 | 2201 | then throw("warehouse string should contain 4 ':' separators") | |
2175 | 2202 | else { | |
2176 | - | let | |
2177 | - | let | |
2178 | - | let | |
2179 | - | let | |
2180 | - | let | |
2181 | - | $Tuple2([StringEntry( | |
2203 | + | let iU = split(fk[ak], "_")[al] | |
2204 | + | let gY = eR(fk) | |
2205 | + | let iV = eP(fk[ag]) | |
2206 | + | let gZ = ((iV - parseIntValue(iU)) - gY) | |
2207 | + | let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([iU, toString(gY), toString(gZ), toString(iV)], "_")], ":") | |
2208 | + | $Tuple2([StringEntry(ff, iW)], iW) | |
2182 | 2209 | } | |
2183 | 2210 | } | |
2184 | 2211 | ||
2185 | 2212 | ||
2186 | 2213 | ||
2187 | - | @Callable( | |
2188 | - | func fixWarehouseFormat (aF) = if (( | |
2214 | + | @Callable(ee) | |
2215 | + | func fixWarehouseFormat (aF) = if ((ee.caller != bC)) | |
2189 | 2216 | then throw("Access denied") | |
2190 | 2217 | else { | |
2191 | - | let | |
2192 | - | let | |
2193 | - | let | |
2194 | - | let | |
2195 | - | let | |
2196 | - | let | |
2197 | - | let | |
2198 | - | let | |
2199 | - | let | |
2200 | - | let | |
2201 | - | $Tuple2([StringEntry( | |
2218 | + | let ff = aE(aF) | |
2219 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2220 | + | let fg = (bT(split(gJ.description, "_")[bI]) / bj) | |
2221 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
2222 | + | let fk = fe(ff, fg, fh) | |
2223 | + | let iU = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fk], nil)) | |
2224 | + | let gY = eR(fk) | |
2225 | + | let iV = eP(fk[ag]) | |
2226 | + | let gZ = ((iV - iU) - gY) | |
2227 | + | let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([toString(iU), toString(gY), toString(gZ), toString(iV)], "_")], ":") | |
2228 | + | $Tuple2([StringEntry(ff, iW)], iW) | |
2202 | 2229 | } | |
2203 | 2230 | ||
2204 | 2231 | ||
2205 | 2232 | ||
2206 | - | @Callable( | |
2207 | - | func fixStakedPieces (bp) = if (( | |
2233 | + | @Callable(ee) | |
2234 | + | func fixStakedPieces (bp) = if ((ee.caller != bC)) | |
2208 | 2235 | then throw("Access denied") | |
2209 | 2236 | else { | |
2210 | - | let | |
2237 | + | let hX = if ((bp == "")) | |
2211 | 2238 | then 0 | |
2212 | 2239 | else { | |
2213 | - | let | |
2214 | - | let | |
2215 | - | then split_51C(value( | |
2240 | + | let hS = getString(bD, bM(bp)) | |
2241 | + | let hN = if (isDefined(hS)) | |
2242 | + | then split_51C(value(hS), "_") | |
2216 | 2243 | else nil | |
2217 | - | func | |
2218 | - | let | |
2219 | - | let bU = split( | |
2244 | + | func iX (cL,aF) = { | |
2245 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2246 | + | let bU = split(gJ.description, "_")[bI] | |
2220 | 2247 | (cL + bT(bU)) | |
2221 | 2248 | } | |
2222 | 2249 | ||
2223 | - | let cN = | |
2250 | + | let cN = hN | |
2224 | 2251 | let cO = size(cN) | |
2225 | 2252 | let cP = 0 | |
2226 | 2253 | func cQ (cR,cS) = if ((cS >= cO)) | |
2227 | 2254 | then cR | |
2228 | - | else | |
2255 | + | else iX(cR, cN[cS]) | |
2229 | 2256 | ||
2230 | 2257 | func cT (cR,cS) = if ((cS >= cO)) | |
2231 | 2258 | then cR | |
2233 | 2260 | ||
2234 | 2261 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2235 | 2262 | } | |
2236 | - | $Tuple2([IntegerEntry(bN(bp), | |
2263 | + | $Tuple2([IntegerEntry(bN(bp), hX)], hX) | |
2237 | 2264 | } | |
2238 | 2265 | ||
2239 | 2266 | ||
2240 | 2267 | ||
2241 | - | @Callable( | |
2242 | - | func setCustomName (av, | |
2243 | - | let | |
2244 | - | if ((size( | |
2268 | + | @Callable(ee) | |
2269 | + | func setCustomName (av,hP,aA) = { | |
2270 | + | let ih = ie(ee) | |
2271 | + | if ((size(ee.payments) != 1)) | |
2245 | 2272 | then throw("Exactly one payment required") | |
2246 | 2273 | else { | |
2247 | - | let | |
2248 | - | if (( | |
2274 | + | let ii = value(ee.payments[0]) | |
2275 | + | if ((ii.assetId != bb)) | |
2249 | 2276 | then throw("Allowed USDT payment only!") | |
2250 | - | else if (( | |
2277 | + | else if ((ii.amount != ca)) | |
2251 | 2278 | then throw(("Payment should be " + toString(ca))) | |
2252 | - | else if (contains( | |
2253 | - | then throw(("Name should not contain '__': " + | |
2254 | - | else if ((size( | |
2279 | + | else if (contains(hP, "__")) | |
2280 | + | then throw(("Name should not contain '__': " + hP)) | |
2281 | + | else if ((size(hP) > cb)) | |
2255 | 2282 | then throw(("Name too long, maxLength=" + toString(cb))) | |
2256 | 2283 | else { | |
2257 | - | let b = toString( | |
2258 | - | let | |
2284 | + | let b = toString(ee.originCaller) | |
2285 | + | let iY = { | |
2259 | 2286 | let bc = aA | |
2260 | 2287 | if (("ACCOUNT" == bc)) | |
2261 | 2288 | then { | |
2262 | - | let | |
2263 | - | let | |
2264 | - | if (isDefined( | |
2265 | - | then throw(("Name already registered: " + | |
2289 | + | let iZ = cv(hP) | |
2290 | + | let ja = getString(iZ) | |
2291 | + | if (isDefined(ja)) | |
2292 | + | then throw(("Name already registered: " + hP)) | |
2266 | 2293 | else { | |
2267 | - | let | |
2268 | - | let | |
2269 | - | let | |
2270 | - | then [DeleteEntry(cv(value( | |
2294 | + | let jb = aH(b) | |
2295 | + | let jc = getString(jb) | |
2296 | + | let jd = if (isDefined(jc)) | |
2297 | + | then [DeleteEntry(cv(value(jc)))] | |
2271 | 2298 | else nil | |
2272 | - | ((( | |
2299 | + | (((jd :+ StringEntry(jb, hP)) :+ StringEntry(iZ, b)) ++ ht(b, B)._1) | |
2273 | 2300 | } | |
2274 | 2301 | } | |
2275 | 2302 | else if (("LAND" == bc)) | |
2276 | 2303 | then { | |
2277 | - | let | |
2278 | - | let | |
2279 | - | if (!(isDefined(getInteger( | |
2280 | - | then throw(( | |
2304 | + | let gJ = value(assetInfo(fromBase58String(av))) | |
2305 | + | let gK = ax(av) | |
2306 | + | if (!(isDefined(getInteger(gK)))) | |
2307 | + | then throw((gJ.name + " is not staked")) | |
2281 | 2308 | else { | |
2282 | - | let | |
2283 | - | if (( | |
2309 | + | let gM = valueOrErrorMessage(getString(au(av)), (("NFT " + gJ.name) + " is orphaned")) | |
2310 | + | if ((gM != b)) | |
2284 | 2311 | then throw((P + " is not yours")) | |
2285 | 2312 | else { | |
2286 | - | let | |
2287 | - | let | |
2288 | - | if (isDefined( | |
2289 | - | then throw(("Name already registered: " + | |
2313 | + | let iZ = cp(hP) | |
2314 | + | let ja = getString(iZ) | |
2315 | + | if (isDefined(ja)) | |
2316 | + | then throw(("Name already registered: " + hP)) | |
2290 | 2317 | else { | |
2291 | - | let | |
2292 | - | let | |
2293 | - | let | |
2294 | - | then [DeleteEntry(cp(value( | |
2318 | + | let je = aw(av) | |
2319 | + | let jc = getString(je) | |
2320 | + | let jd = if (isDefined(jc)) | |
2321 | + | then [DeleteEntry(cp(value(jc)))] | |
2295 | 2322 | else nil | |
2296 | - | ((( | |
2323 | + | (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ ht(b, B)._1) | |
2297 | 2324 | } | |
2298 | 2325 | } | |
2299 | 2326 | } | |
2300 | 2327 | } | |
2301 | 2328 | else if (("DUCK" == bc)) | |
2302 | 2329 | then { | |
2303 | - | let | |
2304 | - | let | |
2305 | - | if (if (!(isDefined(getInteger( | |
2330 | + | let gJ = value(assetInfo(fromBase58String(av))) | |
2331 | + | let gK = ax(av) | |
2332 | + | if (if (!(isDefined(getInteger(gK)))) | |
2306 | 2333 | then true | |
2307 | 2334 | else !(isDefined(getString(aN(b))))) | |
2308 | - | then throw(( | |
2335 | + | then throw((gJ.name + " is not staked")) | |
2309 | 2336 | else { | |
2310 | - | let | |
2311 | - | if (( | |
2337 | + | let gM = valueOrErrorMessage(getString(aM(av)), (("NFT " + gJ.name) + " is orphaned")) | |
2338 | + | if ((gM != b)) | |
2312 | 2339 | then throw((Q + " is not yours")) | |
2313 | 2340 | else { | |
2314 | - | let | |
2315 | - | let | |
2316 | - | if (isDefined( | |
2317 | - | then throw(("Name already registered: " + | |
2341 | + | let iZ = cu(hP) | |
2342 | + | let ja = getString(iZ) | |
2343 | + | if (isDefined(ja)) | |
2344 | + | then throw(("Name already registered: " + hP)) | |
2318 | 2345 | else { | |
2319 | - | let | |
2320 | - | let | |
2321 | - | let | |
2322 | - | then [DeleteEntry(cu(value( | |
2346 | + | let je = aG(av) | |
2347 | + | let jc = getString(je) | |
2348 | + | let jd = if (isDefined(jc)) | |
2349 | + | then [DeleteEntry(cu(value(jc)))] | |
2323 | 2350 | else nil | |
2324 | - | ((( | |
2351 | + | (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ hn(av, B)._1) | |
2325 | 2352 | } | |
2326 | 2353 | } | |
2327 | 2354 | } | |
2328 | 2355 | } | |
2329 | 2356 | else throw("Unknown entity type") | |
2330 | 2357 | } | |
2331 | - | $Tuple2((( | |
2358 | + | $Tuple2(((iY :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), 0) | |
2332 | 2359 | } | |
2333 | 2360 | } | |
2334 | 2361 | } | |
2335 | 2362 | ||
2336 | 2363 | ||
2337 | 2364 | ||
2338 | - | @Callable( | |
2339 | - | func setReferrals ( | |
2365 | + | @Callable(ee) | |
2366 | + | func setReferrals (jf,jg) = if ((ee.callerPublicKey != bX)) | |
2340 | 2367 | then throw("Permission denied") | |
2341 | 2368 | else { | |
2342 | - | let | |
2343 | - | if ((size( | |
2369 | + | let ih = ie(ee) | |
2370 | + | if ((size(ee.payments) != 0)) | |
2344 | 2371 | then throw("No payments required") | |
2345 | - | else if (!(isDefined(addressFromString( | |
2346 | - | then throw(("Invalid address: " + | |
2347 | - | else if (!(isDefined(addressFromString( | |
2348 | - | then throw(("Invalid address: " + | |
2372 | + | else if (!(isDefined(addressFromString(jf)))) | |
2373 | + | then throw(("Invalid address: " + jf)) | |
2374 | + | else if (!(isDefined(addressFromString(jg)))) | |
2375 | + | then throw(("Invalid address: " + jg)) | |
2349 | 2376 | else { | |
2350 | - | let | |
2351 | - | let | |
2352 | - | let | |
2353 | - | then split_4C(value( | |
2377 | + | let jh = cw() | |
2378 | + | let ji = getString(jh) | |
2379 | + | let jj = if (isDefined(ji)) | |
2380 | + | then split_4C(value(ji), "_") | |
2354 | 2381 | else nil | |
2355 | - | if (containsElement( | |
2356 | - | then throw(( | |
2382 | + | if (containsElement(jj, jg)) | |
2383 | + | then throw((jg + " is not newbie (already has referrals)")) | |
2357 | 2384 | else { | |
2358 | - | let | |
2359 | - | let | |
2360 | - | if (if (isDefined( | |
2361 | - | then isDefined(addressFromString(value( | |
2385 | + | let hv = aI(jg) | |
2386 | + | let hw = getString(hv) | |
2387 | + | if (if (isDefined(hw)) | |
2388 | + | then isDefined(addressFromString(value(hw))) | |
2362 | 2389 | else false) | |
2363 | - | then throw((( | |
2390 | + | then throw(((jg + " already has refBy: ") + value(hw))) | |
2364 | 2391 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | let | |
2368 | - | then split_4C(value( | |
2392 | + | let jk = aL(jf) | |
2393 | + | let jl = getString(jk) | |
2394 | + | let jm = if (isDefined(jl)) | |
2395 | + | then split_4C(value(jl), "_") | |
2369 | 2396 | else nil | |
2370 | - | if (containsElement( | |
2371 | - | then throw(((( | |
2397 | + | if (containsElement(jm, jg)) | |
2398 | + | then throw((((jf + " already contains ") + jg) + " within referrals")) | |
2372 | 2399 | else { | |
2373 | - | let | |
2374 | - | let | |
2375 | - | then value( | |
2376 | - | else makeString_2C(( | |
2377 | - | $Tuple2([StringEntry( | |
2400 | + | let jn = makeString_2C((jm :+ jg), "_") | |
2401 | + | let jo = if (containsElement(jj, jf)) | |
2402 | + | then value(ji) | |
2403 | + | else makeString_2C((jj :+ jf), "_") | |
2404 | + | $Tuple2([StringEntry(hv, jf), StringEntry(jk, jn), StringEntry(jh, jo), ih], 0) | |
2378 | 2405 | } | |
2379 | 2406 | } | |
2380 | 2407 | } | |
2383 | 2410 | ||
2384 | 2411 | ||
2385 | 2412 | ||
2386 | - | @Callable( | |
2387 | - | func distributePoints ( | |
2388 | - | let | |
2389 | - | if ((size( | |
2413 | + | @Callable(ee) | |
2414 | + | func distributePoints (jp,jq,jr,js,jt) = { | |
2415 | + | let ih = ie(ee) | |
2416 | + | if ((size(ee.payments) != 0)) | |
2390 | 2417 | then throw("No payments required") | |
2391 | 2418 | else { | |
2392 | - | let b = toString( | |
2419 | + | let b = toString(ee.originCaller) | |
2393 | 2420 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2394 | - | let | |
2395 | - | let | |
2396 | - | let | |
2397 | - | let | |
2398 | - | let | |
2399 | - | let | |
2400 | - | if (( | |
2401 | - | then throw((("There are only " + toString( | |
2421 | + | let ju = w(b) | |
2422 | + | let jv = valueOrElse(getInteger(bD, ju), 0) | |
2423 | + | let jw = s(p) | |
2424 | + | let jx = valueOrElse(getInteger(bD, jw), 0) | |
2425 | + | let jy = (jv + jx) | |
2426 | + | let jz = ((((jp + jq) + jr) + js) + jt) | |
2427 | + | if ((jz > jy)) | |
2428 | + | then throw((("There are only " + toString(jy)) + " free points to distribute")) | |
2402 | 2429 | else { | |
2403 | - | let | |
2404 | - | let | |
2405 | - | let | |
2406 | - | $Tuple2([IntegerEntry( | |
2430 | + | let jA = o(p) | |
2431 | + | let jB = split(valueOrElse(getString(bD, jA), "0_0_0_0_0"), "_") | |
2432 | + | let jC = (jv - jz) | |
2433 | + | $Tuple2([IntegerEntry(ju, if ((0 > jC)) | |
2407 | 2434 | then 0 | |
2408 | - | else | |
2409 | - | then ( | |
2410 | - | else | |
2435 | + | else jC), IntegerEntry(jw, if ((0 > jC)) | |
2436 | + | then (jx + jC) | |
2437 | + | else jx), StringEntry(jA, makeString([toString((parseIntValue(jB[g]) + jp)), toString((parseIntValue(jB[h]) + jq)), toString((parseIntValue(jB[i]) + jr)), toString((parseIntValue(jB[j]) + js)), toString((parseIntValue(jB[k]) + jt))], "_")), ih], 0) | |
2411 | 2438 | } | |
2412 | 2439 | } | |
2413 | 2440 | } | |
2414 | 2441 | ||
2415 | 2442 | ||
2416 | 2443 | ||
2417 | - | @Callable( | |
2418 | - | func splitByGlobalWeightsREADONLY ( | |
2419 | - | ||
2420 | - | ||
2421 | - | ||
2422 | - | @Callable( | |
2423 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2424 | - | let | |
2425 | - | $Tuple2(nil, $Tuple2(cU( | |
2426 | - | } | |
2427 | - | ||
2428 | - | ||
2429 | - | ||
2430 | - | @Callable( | |
2431 | - | func getBackpackREADONLY (p) = $Tuple2(nil, makeString( | |
2432 | - | ||
2433 | - | ||
2434 | - | ||
2435 | - | @Callable( | |
2444 | + | @Callable(ee) | |
2445 | + | func splitByGlobalWeightsREADONLY (fu) = $Tuple2(nil, cU(fu)) | |
2446 | + | ||
2447 | + | ||
2448 | + | ||
2449 | + | @Callable(ee) | |
2450 | + | func splitByGlobalAndLocalWeightsREADONLY (jD,jE,eh) = { | |
2451 | + | let ea = eg(eh) | |
2452 | + | $Tuple2(nil, $Tuple2(cU(jD), cF(jE, ea))) | |
2453 | + | } | |
2454 | + | ||
2455 | + | ||
2456 | + | ||
2457 | + | @Callable(ee) | |
2458 | + | func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eM(aO(p)), ":")) | |
2459 | + | ||
2460 | + | ||
2461 | + | ||
2462 | + | @Callable(ee) | |
2436 | 2463 | func getWarehouseREADONLY (aF) = { | |
2437 | - | let | |
2438 | - | let | |
2439 | - | let | |
2440 | - | $Tuple2(nil, makeString_2C( | |
2441 | - | } | |
2442 | - | ||
2443 | - | ||
2444 | - | ||
2445 | - | @Callable( | |
2446 | - | func saveLastTx () = if (if (( | |
2447 | - | then ( | |
2464 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2465 | + | let fg = (bT(split(gJ.description, "_")[bI]) / bj) | |
2466 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
2467 | + | $Tuple2(nil, makeString_2C(fe(aE(aF), fg, fh), ":")) | |
2468 | + | } | |
2469 | + | ||
2470 | + | ||
2471 | + | ||
2472 | + | @Callable(ee) | |
2473 | + | func saveLastTx () = if (if ((ee.caller != bG)) | |
2474 | + | then (ee.caller != bE) | |
2448 | 2475 | else false) | |
2449 | 2476 | then throw("Access denied") | |
2450 | - | else $Tuple2([ | |
2451 | - | ||
2452 | - | ||
2453 | - | ||
2454 | - | @Callable( | |
2455 | - | func updateDuckStats (p, | |
2477 | + | else $Tuple2([ie(ee)], 42) | |
2478 | + | ||
2479 | + | ||
2480 | + | ||
2481 | + | @Callable(ee) | |
2482 | + | func updateDuckStats (p,ho) = if ((ee.caller != bE)) | |
2456 | 2483 | then throw("Access denied") | |
2457 | - | else | |
2458 | - | ||
2459 | - | ||
2460 | - | ||
2461 | - | @Callable( | |
2462 | - | func updateAccStats (b, | |
2484 | + | else hn(p, ho) | |
2485 | + | ||
2486 | + | ||
2487 | + | ||
2488 | + | @Callable(ee) | |
2489 | + | func updateAccStats (b,ho) = if ((ee.caller != bE)) | |
2463 | 2490 | then throw("Access denied") | |
2464 | - | else | |
2465 | - | ||
2466 | - | ||
2467 | - | ||
2468 | - | @Callable( | |
2469 | - | func equipDuck ( | |
2470 | - | let | |
2471 | - | if ((size( | |
2491 | + | else ht(b, ho) | |
2492 | + | ||
2493 | + | ||
2494 | + | ||
2495 | + | @Callable(ee) | |
2496 | + | func equipDuck (jF) = { | |
2497 | + | let ih = ie(ee) | |
2498 | + | if ((size(ee.payments) != 0)) | |
2472 | 2499 | then throw("No payments required") | |
2473 | 2500 | else { | |
2474 | - | let b = toString( | |
2501 | + | let b = toString(ee.originCaller) | |
2475 | 2502 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2476 | - | let | |
2477 | - | let | |
2478 | - | let | |
2479 | - | let | |
2480 | - | let | |
2481 | - | if ((size( | |
2503 | + | let jG = t(p) | |
2504 | + | let jH = split(valueOrElse(getString(jG), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2505 | + | let eN = aO(p) | |
2506 | + | let fy = eM(eN) | |
2507 | + | let jI = split(jF, "_") | |
2508 | + | if ((size(jI) != l)) | |
2482 | 2509 | then throw("Wrong equipment string") | |
2483 | 2510 | else { | |
2484 | - | let | |
2485 | - | let dh = if (( | |
2511 | + | let jJ = fy[as] | |
2512 | + | let dh = if ((jJ == "")) | |
2486 | 2513 | then nil | |
2487 | - | else split( | |
2488 | - | let | |
2489 | - | let dt = | |
2490 | - | $Tuple2([StringEntry( | |
2514 | + | else split(jJ, "_") | |
2515 | + | let jK = dT(jH, dh, true) | |
2516 | + | let dt = dT(jI, jK, false) | |
2517 | + | $Tuple2([StringEntry(jG, jF), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dt, "_")], ":")), ih], 0) | |
2491 | 2518 | } | |
2492 | 2519 | } | |
2493 | 2520 | } | |
2521 | + | ||
2522 | + | ||
2523 | + | ||
2524 | + | @Callable(ee) | |
2525 | + | func test () = if ((ee.caller != this)) | |
2526 | + | then throw("Access denied") | |
2527 | + | else $Tuple2(nil, du("")) | |
2494 | 2528 | ||
2495 | 2529 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("lastArbTimeUser_" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = 100000000 | |
8 | 8 | ||
9 | 9 | let d = 3200 | |
10 | 10 | ||
11 | 11 | let e = 4000 | |
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | 15 | let g = 0 | |
16 | 16 | ||
17 | 17 | let h = 1 | |
18 | 18 | ||
19 | 19 | let i = 2 | |
20 | 20 | ||
21 | 21 | let j = 3 | |
22 | 22 | ||
23 | 23 | let k = 4 | |
24 | 24 | ||
25 | 25 | let l = 6 | |
26 | 26 | ||
27 | 27 | let m = 2 | |
28 | 28 | ||
29 | 29 | let n = 2 | |
30 | 30 | ||
31 | 31 | func o (p) = ("duckChars_" + p) | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func q (p) = ("duckXP_" + p) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func r (p) = ("duckLevel_" + p) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func s (p) = ("duckFreePoints_" + p) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func t (p) = ("duckEquipment_" + p) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func u (b) = ("userXP_" + b) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func v (b) = ("userLevel_" + b) | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func w (b) = ("userFreePoints_" + b) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | let x = 100000 | |
56 | 56 | ||
57 | 57 | let y = 50000 | |
58 | 58 | ||
59 | 59 | let z = 10000 | |
60 | 60 | ||
61 | 61 | let A = 100000 | |
62 | 62 | ||
63 | 63 | let B = 5000000 | |
64 | 64 | ||
65 | 65 | let C = 50000000 | |
66 | 66 | ||
67 | 67 | let D = 100000 | |
68 | 68 | ||
69 | 69 | let E = 10000000 | |
70 | 70 | ||
71 | 71 | let F = 10000000 | |
72 | 72 | ||
73 | 73 | let G = 10000 | |
74 | 74 | ||
75 | 75 | func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c) | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func J (K) = (100 + K) | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func L (M,N) = { | |
82 | 82 | let O = H(N) | |
83 | 83 | [O, (f * (O - M))] | |
84 | 84 | } | |
85 | 85 | ||
86 | 86 | ||
87 | 87 | let P = "LAND" | |
88 | 88 | ||
89 | 89 | let Q = "DUCK" | |
90 | 90 | ||
91 | 91 | let R = "PRESALE" | |
92 | 92 | ||
93 | 93 | let S = 6 | |
94 | 94 | ||
95 | 95 | let T = 3456000 | |
96 | 96 | ||
97 | 97 | let U = 86400000 | |
98 | 98 | ||
99 | 99 | let V = 10000000000 | |
100 | 100 | ||
101 | 101 | let W = "Africa_F_Africa" | |
102 | 102 | ||
103 | 103 | let X = 39637 | |
104 | 104 | ||
105 | 105 | let Y = 10 | |
106 | 106 | ||
107 | 107 | let Z = ["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"] | |
108 | 108 | ||
109 | 109 | let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
110 | 110 | ||
111 | 111 | let ab = 10000000 | |
112 | 112 | ||
113 | 113 | let ac = ["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_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "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_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"] | |
114 | 114 | ||
115 | 115 | let ad = 6 | |
116 | 116 | ||
117 | 117 | let ae = 10 | |
118 | 118 | ||
119 | 119 | let af = 10 | |
120 | 120 | ||
121 | 121 | let ag = 0 | |
122 | 122 | ||
123 | 123 | let ah = 1 | |
124 | 124 | ||
125 | 125 | let ai = 2 | |
126 | 126 | ||
127 | 127 | let aj = 3 | |
128 | 128 | ||
129 | 129 | let ak = 4 | |
130 | 130 | ||
131 | 131 | let al = 0 | |
132 | 132 | ||
133 | 133 | let am = 1 | |
134 | 134 | ||
135 | 135 | let an = 2 | |
136 | 136 | ||
137 | 137 | let ao = 3 | |
138 | 138 | ||
139 | 139 | let ap = 0 | |
140 | 140 | ||
141 | 141 | let aq = 1 | |
142 | 142 | ||
143 | 143 | let ar = 2 | |
144 | 144 | ||
145 | 145 | let as = 3 | |
146 | 146 | ||
147 | 147 | func at (b) = ("lastTxIdByUser_" + b) | |
148 | 148 | ||
149 | 149 | ||
150 | 150 | func au (av) = ("nftOwner_" + av) | |
151 | 151 | ||
152 | 152 | ||
153 | 153 | func aw (av) = ("landCustomNameByAssetId_" + av) | |
154 | 154 | ||
155 | 155 | ||
156 | 156 | func ax (av) = ("stakedTime_" + av) | |
157 | 157 | ||
158 | 158 | ||
159 | 159 | func ay (av) = ("infraLevel_" + av) | |
160 | 160 | ||
161 | 161 | ||
162 | 162 | func az (aA,av) = makeString(["landArtStatus", aA, av], "_") | |
163 | 163 | ||
164 | 164 | ||
165 | 165 | func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD) | |
166 | 166 | ||
167 | 167 | ||
168 | 168 | func aE (aF) = ("wareHouse_" + aF) | |
169 | 169 | ||
170 | 170 | ||
171 | 171 | func aG (av) = ("duckCustomNameByAssetId_" + av) | |
172 | 172 | ||
173 | 173 | ||
174 | 174 | func aH (b) = ("accountCustomNameByAddr_" + b) | |
175 | 175 | ||
176 | 176 | ||
177 | 177 | func aI (b) = ("accRefBy_" + b) | |
178 | 178 | ||
179 | 179 | ||
180 | 180 | func aJ (p) = ("onboardArtActivatedOnDuck_" + p) | |
181 | 181 | ||
182 | 182 | ||
183 | 183 | func aK (b) = ("onboardArtActivatedDuckBy_" + b) | |
184 | 184 | ||
185 | 185 | ||
186 | 186 | func aL (b) = ("accReferrals_" + b) | |
187 | 187 | ||
188 | 188 | ||
189 | 189 | func aM (av) = ("duckOwner_" + av) | |
190 | 190 | ||
191 | 191 | ||
192 | 192 | func aN (aD) = ("stakedDuckByOwner_" + aD) | |
193 | 193 | ||
194 | 194 | ||
195 | 195 | func aO (p) = ("backPack_" + p) | |
196 | 196 | ||
197 | 197 | ||
198 | 198 | func aP (p) = ("duckLocation_" + p) | |
199 | 199 | ||
200 | 200 | ||
201 | 201 | func aQ (p) = ("duckHealth_" + p) | |
202 | 202 | ||
203 | 203 | ||
204 | 204 | func aR () = "contractsBlocked" | |
205 | 205 | ||
206 | 206 | ||
207 | 207 | func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT) | |
208 | 208 | ||
209 | 209 | ||
210 | 210 | func aU () = "emergencyWarehouseProducts" | |
211 | 211 | ||
212 | 212 | ||
213 | 213 | let aV = 1 | |
214 | 214 | ||
215 | 215 | let aW = 2 | |
216 | 216 | ||
217 | 217 | func aX (aY) = (parseIntValue(aY[ad]) * ab) | |
218 | 218 | ||
219 | 219 | ||
220 | 220 | let aZ = true | |
221 | 221 | ||
222 | 222 | let ba = take(drop(this.bytes, 1), 1) | |
223 | 223 | ||
224 | 224 | let bb = { | |
225 | 225 | let bc = ba | |
226 | 226 | if ((base58'2W' == bc)) | |
227 | 227 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
228 | 228 | else if ((base58'2T' == bc)) | |
229 | 229 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
230 | 230 | else throw("Unknown chain") | |
231 | 231 | } | |
232 | 232 | ||
233 | 233 | let bd = { | |
234 | 234 | let bc = ba | |
235 | 235 | if ((base58'2W' == bc)) | |
236 | 236 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
237 | 237 | else if ((base58'2T' == bc)) | |
238 | 238 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
239 | 239 | else throw("Unknown chain") | |
240 | 240 | } | |
241 | 241 | ||
242 | 242 | let be = { | |
243 | 243 | let bc = ba | |
244 | 244 | if ((base58'2W' == bc)) | |
245 | 245 | then 10000000000 | |
246 | 246 | else if ((base58'2T' == bc)) | |
247 | 247 | then 100000000 | |
248 | 248 | else throw("Unknown chain") | |
249 | 249 | } | |
250 | 250 | ||
251 | 251 | let bf = { | |
252 | 252 | let bc = ba | |
253 | 253 | if ((base58'2W' == bc)) | |
254 | 254 | then 600000 | |
255 | 255 | else if ((base58'2T' == bc)) | |
256 | 256 | then 60000 | |
257 | 257 | else throw("Unknown chain") | |
258 | 258 | } | |
259 | 259 | ||
260 | 260 | let bg = "__" | |
261 | 261 | ||
262 | 262 | let bh = 1000000 | |
263 | 263 | ||
264 | 264 | let bi = 100000000 | |
265 | 265 | ||
266 | 266 | let bj = 25 | |
267 | 267 | ||
268 | 268 | let bk = 100 | |
269 | 269 | ||
270 | 270 | let bl = 225 | |
271 | 271 | ||
272 | 272 | let bm = 400 | |
273 | 273 | ||
274 | 274 | let bn = 625 | |
275 | 275 | ||
276 | 276 | func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], "")) | |
277 | 277 | ||
278 | 278 | ||
279 | 279 | let br = 1 | |
280 | 280 | ||
281 | 281 | let bs = 2 | |
282 | 282 | ||
283 | 283 | let bt = 3 | |
284 | 284 | ||
285 | 285 | let bu = 4 | |
286 | 286 | ||
287 | 287 | func bv () = "%s__restConfig" | |
288 | 288 | ||
289 | 289 | ||
290 | 290 | func bw () = "%s__restAddr" | |
291 | 291 | ||
292 | 292 | ||
293 | 293 | func bx (by) = split_4C(bo(by, bv()), bg) | |
294 | 294 | ||
295 | 295 | ||
296 | 296 | func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB))) | |
297 | 297 | ||
298 | 298 | ||
299 | 299 | let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd)) | |
300 | 300 | ||
301 | 301 | let bA = bx(bC) | |
302 | 302 | ||
303 | 303 | let bD = bz(bA, br) | |
304 | 304 | ||
305 | 305 | let bE = bz(bA, bs) | |
306 | 306 | ||
307 | 307 | let bF = bz(bA, bt) | |
308 | 308 | ||
309 | 309 | let bG = bz(bA, bu) | |
310 | 310 | ||
311 | 311 | let bH = 0 | |
312 | 312 | ||
313 | 313 | let bI = 1 | |
314 | 314 | ||
315 | 315 | let bJ = 2 | |
316 | 316 | ||
317 | 317 | let bK = 3 | |
318 | 318 | ||
319 | 319 | func bL () = "resTypesProportions" | |
320 | 320 | ||
321 | 321 | ||
322 | 322 | func bM (aD) = ("stakedLandsByOwner_" + aD) | |
323 | 323 | ||
324 | 324 | ||
325 | 325 | func bN (aD) = ("stakedPiecesByOwner_" + aD) | |
326 | 326 | ||
327 | 327 | ||
328 | 328 | func bO (bP) = { | |
329 | 329 | let bc = bP | |
330 | 330 | if ($isInstanceOf(bc, "String")) | |
331 | 331 | then { | |
332 | 332 | let bQ = bc | |
333 | 333 | bQ | |
334 | 334 | } | |
335 | 335 | else throw("fail to cast into String") | |
336 | 336 | } | |
337 | 337 | ||
338 | 338 | ||
339 | 339 | func bR (bP) = { | |
340 | 340 | let bc = bP | |
341 | 341 | if ($isInstanceOf(bc, "Int")) | |
342 | 342 | then { | |
343 | 343 | let bS = bc | |
344 | 344 | bS | |
345 | 345 | } | |
346 | 346 | else throw("fail to cast into Int") | |
347 | 347 | } | |
348 | 348 | ||
349 | 349 | ||
350 | 350 | func bT (bU) = { | |
351 | 351 | let bc = bU | |
352 | 352 | if (("S" == bc)) | |
353 | 353 | then bj | |
354 | 354 | else if (("M" == bc)) | |
355 | 355 | then bk | |
356 | 356 | else if (("L" == bc)) | |
357 | 357 | then bl | |
358 | 358 | else if (("XL" == bc)) | |
359 | 359 | then bm | |
360 | 360 | else if (("XXL" == bc)) | |
361 | 361 | then bn | |
362 | 362 | else throw("Unknown land size") | |
363 | 363 | } | |
364 | 364 | ||
365 | 365 | ||
366 | 366 | let bV = { | |
367 | 367 | let bc = ba | |
368 | 368 | if ((base58'2W' == bc)) | |
369 | 369 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
370 | 370 | else if ((base58'2T' == bc)) | |
371 | 371 | then this | |
372 | 372 | else throw("Unknown chain") | |
373 | 373 | } | |
374 | 374 | ||
375 | 375 | let bW = { | |
376 | 376 | let bc = ba | |
377 | 377 | if ((base58'2W' == bc)) | |
378 | 378 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
379 | 379 | else if ((base58'2T' == bc)) | |
380 | 380 | then this | |
381 | 381 | else throw("Unknown chain") | |
382 | 382 | } | |
383 | 383 | ||
384 | 384 | let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
385 | 385 | ||
386 | 386 | let bY = [30, 60, 120] | |
387 | 387 | ||
388 | 388 | let bZ = 300000 | |
389 | 389 | ||
390 | 390 | let ca = 5000000 | |
391 | 391 | ||
392 | 392 | let cb = 50 | |
393 | 393 | ||
394 | 394 | let cc = 10000000 | |
395 | 395 | ||
396 | 396 | let cd = { | |
397 | 397 | let bc = ba | |
398 | 398 | if ((base58'2W' == bc)) | |
399 | 399 | then 252289527462 | |
400 | 400 | else if ((base58'2T' == bc)) | |
401 | 401 | then 2522895274 | |
402 | 402 | else throw("Unknown chain") | |
403 | 403 | } | |
404 | 404 | ||
405 | 405 | let ce = { | |
406 | 406 | let bc = ba | |
407 | 407 | if ((base58'2W' == bc)) | |
408 | 408 | then 250000000 | |
409 | 409 | else if ((base58'2T' == bc)) | |
410 | 410 | then 250000000 | |
411 | 411 | else throw("Unknown chain") | |
412 | 412 | } | |
413 | 413 | ||
414 | 414 | let cf = toBigInt(5) | |
415 | 415 | ||
416 | 416 | let cg = toBigInt(20) | |
417 | 417 | ||
418 | 418 | let ch = toBigInt((20 * 20)) | |
419 | 419 | ||
420 | 420 | let ci = toBigInt(((20 * 20) * 20)) | |
421 | 421 | ||
422 | 422 | let cj = toBigInt((((20 * 20) * 20) * 20)) | |
423 | 423 | ||
424 | 424 | let ck = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
425 | 425 | ||
426 | 426 | let cl = 500 | |
427 | 427 | ||
428 | 428 | func cm () = "nextLandNum" | |
429 | 429 | ||
430 | 430 | ||
431 | 431 | func cn (co) = ("landToAsset_" + co) | |
432 | 432 | ||
433 | 433 | ||
434 | 434 | func cp (cq) = ("landByCustomName_" + cq) | |
435 | 435 | ||
436 | 436 | ||
437 | 437 | func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD) | |
438 | 438 | ||
439 | 439 | ||
440 | 440 | func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_") | |
441 | 441 | ||
442 | 442 | ||
443 | 443 | func ct (co) = ("landOwner_" + co) | |
444 | 444 | ||
445 | 445 | ||
446 | 446 | func cu (cq) = ("duckByCustomName_" + cq) | |
447 | 447 | ||
448 | 448 | ||
449 | 449 | func cv (cq) = ("accountByCustomName_" + cq) | |
450 | 450 | ||
451 | 451 | ||
452 | 452 | func cw () = "oldiesList" | |
453 | 453 | ||
454 | 454 | ||
455 | 455 | let cx = 0 | |
456 | 456 | ||
457 | 457 | let cy = 1 | |
458 | 458 | ||
459 | 459 | let cz = 2 | |
460 | 460 | ||
461 | 461 | let cA = 0 | |
462 | 462 | ||
463 | 463 | let cB = 5 | |
464 | 464 | ||
465 | 465 | let cC = 6 | |
466 | 466 | ||
467 | 467 | let cD = 7 | |
468 | 468 | ||
469 | 469 | func cE (co,bU) = ((P + co) + bU) | |
470 | 470 | ||
471 | 471 | ||
472 | 472 | func cF (cG,cH) = { | |
473 | 473 | let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5]) | |
474 | 474 | if ((0 >= cI)) | |
475 | 475 | then throw("Zero weights sum") | |
476 | 476 | else { | |
477 | 477 | let cJ = fraction(cG, bh, cI) | |
478 | 478 | func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh)) | |
479 | 479 | ||
480 | 480 | let cN = cH | |
481 | 481 | let cO = size(cN) | |
482 | 482 | let cP = nil | |
483 | 483 | func cQ (cR,cS) = if ((cS >= cO)) | |
484 | 484 | then cR | |
485 | 485 | else cK(cR, cN[cS]) | |
486 | 486 | ||
487 | 487 | func cT (cR,cS) = if ((cS >= cO)) | |
488 | 488 | then cR | |
489 | 489 | else throw("List size exceeds 6") | |
490 | 490 | ||
491 | 491 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
492 | 492 | } | |
493 | 493 | } | |
494 | 494 | ||
495 | 495 | ||
496 | 496 | func cU (cG) = { | |
497 | 497 | let cV = split(value(getString(bL())), "_") | |
498 | 498 | if ((size(cV) != S)) | |
499 | 499 | then throw("Wrong proportions data") | |
500 | 500 | else { | |
501 | 501 | let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])] | |
502 | 502 | cF(cG, cW) | |
503 | 503 | } | |
504 | 504 | } | |
505 | 505 | ||
506 | 506 | ||
507 | 507 | func cX (cY,cZ,da) = { | |
508 | 508 | let db = cU(da) | |
509 | 509 | func dc (cL,bB) = { | |
510 | 510 | let dd = (parseIntValue(cZ[bB]) - db[bB]) | |
511 | 511 | if ((0 > dd)) | |
512 | 512 | then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB]))) | |
513 | 513 | else (cL :+ toString(dd)) | |
514 | 514 | } | |
515 | 515 | ||
516 | 516 | if (cY) | |
517 | 517 | then { | |
518 | 518 | let cN = [0, 1, 2, 3, 4, 5] | |
519 | 519 | let cO = size(cN) | |
520 | 520 | let cP = nil | |
521 | 521 | func cQ (cR,cS) = if ((cS >= cO)) | |
522 | 522 | then cR | |
523 | 523 | else dc(cR, cN[cS]) | |
524 | 524 | ||
525 | 525 | func cT (cR,cS) = if ((cS >= cO)) | |
526 | 526 | then cR | |
527 | 527 | else throw("List size exceeds 6") | |
528 | 528 | ||
529 | 529 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
530 | 530 | } | |
531 | 531 | else cZ | |
532 | 532 | } | |
533 | 533 | ||
534 | 534 | ||
535 | 535 | func de (df,dg) = if ((dg == "")) | |
536 | 536 | then df | |
537 | 537 | else { | |
538 | 538 | let dh = if ((df == "")) | |
539 | 539 | then nil | |
540 | 540 | else split(df, "_") | |
541 | 541 | func di (cL,dj) = { | |
542 | 542 | let dk = cL._1 | |
543 | 543 | func dl (dm,dn) = { | |
544 | 544 | let do = split(dn, ",") | |
545 | 545 | if ((size(do) != 2)) | |
546 | 546 | then throw("Incorrect format, should be index,amount") | |
547 | 547 | else { | |
548 | 548 | let bB = parseIntValue(do[0]) | |
549 | 549 | if (if ((0 > bB)) | |
550 | 550 | then true | |
551 | 551 | else (bB >= size(ac))) | |
552 | 552 | then throw("Unknown product idx") | |
553 | 553 | else if ((bB != dk)) | |
554 | 554 | then dm | |
555 | 555 | else { | |
556 | 556 | let dp = parseIntValue(do[1]) | |
557 | 557 | if ((0 >= dp)) | |
558 | 558 | then throw("Pass only positive amounts") | |
559 | 559 | else (dm + dp) | |
560 | 560 | } | |
561 | 561 | } | |
562 | 562 | } | |
563 | 563 | ||
564 | 564 | let dq = { | |
565 | 565 | let cN = split(dg, "_") | |
566 | 566 | let cO = size(cN) | |
567 | 567 | let cP = 0 | |
568 | 568 | func cQ (cR,cS) = if ((cS >= cO)) | |
569 | 569 | then cR | |
570 | 570 | else dl(cR, cN[cS]) | |
571 | 571 | ||
572 | 572 | func cT (cR,cS) = if ((cS >= cO)) | |
573 | 573 | then cR | |
574 | 574 | else throw("List size exceeds 10") | |
575 | 575 | ||
576 | 576 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
577 | 577 | } | |
578 | 578 | let dr = if ((size(dh) > dk)) | |
579 | 579 | then parseIntValue(dh[dk]) | |
580 | 580 | else 0 | |
581 | 581 | let ds = if ((dr >= dq)) | |
582 | 582 | then (dr - dq) | |
583 | 583 | else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq))) | |
584 | 584 | $Tuple2((dk + 1), (cL._2 :+ toString(ds))) | |
585 | 585 | } | |
586 | 586 | ||
587 | 587 | let dt = { | |
588 | 588 | let cN = ac | |
589 | 589 | let cO = size(cN) | |
590 | 590 | let cP = $Tuple2(0, nil) | |
591 | 591 | func cQ (cR,cS) = if ((cS >= cO)) | |
592 | 592 | then cR | |
593 | 593 | else di(cR, cN[cS]) | |
594 | 594 | ||
595 | 595 | func cT (cR,cS) = if ((cS >= cO)) | |
596 | 596 | then cR | |
597 | 597 | else throw("List size exceeds 50") | |
598 | 598 | ||
599 | 599 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
600 | 600 | } | |
601 | 601 | makeString(dt._2, "_") | |
602 | 602 | } | |
603 | 603 | ||
604 | 604 | ||
605 | - | func du (dv,dh,dw,dx,dy,dz) = { | |
606 | - | let do = split(dv, ":") | |
605 | + | func du (dv) = { | |
606 | + | let dh = if ((dv == "")) | |
607 | + | then nil | |
608 | + | else split(dv, "_") | |
609 | + | func dw (cL,aY) = { | |
610 | + | let dk = (size(cL) / 8) | |
611 | + | let dr = if ((size(dh) > dk)) | |
612 | + | then parseIntValue(dh[dk]) | |
613 | + | else 0 | |
614 | + | (cL + toBytes(dr)) | |
615 | + | } | |
616 | + | ||
617 | + | let cN = ac | |
618 | + | let cO = size(cN) | |
619 | + | let cP = base58'' | |
620 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
621 | + | then cR | |
622 | + | else dw(cR, cN[cS]) | |
623 | + | ||
624 | + | func cT (cR,cS) = if ((cS >= cO)) | |
625 | + | then cR | |
626 | + | else throw("List size exceeds 50") | |
627 | + | ||
628 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
629 | + | } | |
630 | + | ||
631 | + | ||
632 | + | func dx (dy,dh,dz,dA,dB,dC) = { | |
633 | + | let do = split(dy, ":") | |
607 | 634 | if ((size(do) != 2)) | |
608 | 635 | then throw("Incorrect format, should be index:amount") | |
609 | 636 | else { | |
610 | - | let | |
611 | - | let | |
612 | - | if (if ((0 > | |
637 | + | let dD = parseIntValue(do[0]) | |
638 | + | let dE = parseIntValue(do[1]) | |
639 | + | if (if ((0 > dD)) | |
613 | 640 | then true | |
614 | - | else ( | |
641 | + | else (dD >= size(ac))) | |
615 | 642 | then throw("Unknown product idx") | |
616 | - | else if ((0 > | |
643 | + | else if ((0 > dE)) | |
617 | 644 | then throw("Count can't be negative") | |
618 | - | else if (( | |
645 | + | else if ((dE == 0)) | |
619 | 646 | then $Tuple2(dh, false) | |
620 | 647 | else { | |
621 | - | func | |
648 | + | func dF (cL,dj) = { | |
622 | 649 | let dk = cL._1 | |
623 | 650 | let dr = if ((size(dh) > dk)) | |
624 | 651 | then parseIntValue(dh[dk]) | |
625 | 652 | else 0 | |
626 | - | if (( | |
653 | + | if ((dD != dk)) | |
627 | 654 | then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3) | |
628 | - | else if (if (!( | |
629 | - | then ( | |
655 | + | else if (if (!(dz)) | |
656 | + | then (dE > dr) | |
630 | 657 | else false) | |
631 | - | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString( | |
658 | + | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dE))) | |
632 | 659 | else { | |
633 | - | let | |
660 | + | let dG = if (!(dz)) | |
634 | 661 | then { | |
635 | - | let | |
636 | - | if (( | |
662 | + | let dH = split(dj, "_")[ae] | |
663 | + | if ((dH == "")) | |
637 | 664 | then throw("Item cannot be equipped") | |
638 | 665 | else { | |
639 | - | let | |
640 | - | let | |
641 | - | if (( | |
666 | + | let dI = parseIntValue(dH) | |
667 | + | let dJ = (dI / 100) | |
668 | + | if ((dA != dJ)) | |
642 | 669 | then throw("Segment incompatible") | |
643 | 670 | else { | |
644 | - | let | |
645 | - | if (( | |
671 | + | let dK = ((dI % 100) / 10) | |
672 | + | if ((dB != dK)) | |
646 | 673 | then throw("Slot incompatible") | |
647 | 674 | else { | |
648 | - | let | |
649 | - | if (if (( | |
650 | - | then ( | |
675 | + | let dL = (dI % 10) | |
676 | + | if (if ((dC != 0)) | |
677 | + | then (dL > 1) | |
651 | 678 | else false) | |
652 | 679 | then throw("Big items should occupy slot 0") | |
653 | - | else ( | |
680 | + | else (dL > 1) | |
654 | 681 | } | |
655 | 682 | } | |
656 | 683 | } | |
657 | 684 | } | |
658 | 685 | else false | |
659 | - | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if ( | |
660 | - | then | |
661 | - | else -( | |
686 | + | $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dz) | |
687 | + | then dE | |
688 | + | else -(dE))))), if (cL._3) | |
662 | 689 | then true | |
663 | - | else | |
690 | + | else dG) | |
664 | 691 | } | |
665 | 692 | } | |
666 | 693 | ||
667 | 694 | let dd = { | |
668 | 695 | let cN = ac | |
669 | 696 | let cO = size(cN) | |
670 | 697 | let cP = $Tuple3(0, nil, false) | |
671 | 698 | func cQ (cR,cS) = if ((cS >= cO)) | |
672 | 699 | then cR | |
673 | - | else | |
700 | + | else dF(cR, cN[cS]) | |
674 | 701 | ||
675 | 702 | func cT (cR,cS) = if ((cS >= cO)) | |
676 | 703 | then cR | |
677 | 704 | else throw("List size exceeds 27") | |
678 | 705 | ||
679 | 706 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
680 | 707 | } | |
681 | 708 | $Tuple2(dd._2, dd._3) | |
682 | 709 | } | |
683 | 710 | } | |
684 | 711 | } | |
685 | 712 | ||
686 | 713 | ||
687 | - | func | |
714 | + | func dM (dN,dO,dz,dA,dB) = if ((dN != "")) | |
688 | 715 | then { | |
689 | - | let | |
690 | - | if ((size( | |
716 | + | let dP = split(dN, ",") | |
717 | + | if ((size(dP) > n)) | |
691 | 718 | then throw("Wrong slots format") | |
692 | 719 | else { | |
693 | - | let | |
694 | - | let | |
695 | - | then | |
720 | + | let dQ = dP[0] | |
721 | + | let dR = if ((size(dP) > 1)) | |
722 | + | then dP[1] | |
696 | 723 | else "" | |
697 | - | if (if (( | |
698 | - | then ( | |
724 | + | if (if ((dQ == "")) | |
725 | + | then (dR == "") | |
699 | 726 | else false) | |
700 | - | then | |
727 | + | then dO | |
701 | 728 | else { | |
702 | - | let | |
703 | - | then | |
704 | - | else $Tuple2( | |
705 | - | if (( | |
706 | - | then if ( | |
729 | + | let dS = if ((dQ != "")) | |
730 | + | then dx(dQ, dO, dz, dA, dB, 0) | |
731 | + | else $Tuple2(dO, false) | |
732 | + | if ((dR != "")) | |
733 | + | then if (dS._2) | |
707 | 734 | then throw("Big item already occupies slot") | |
708 | - | else | |
709 | - | else | |
735 | + | else dx(dR, dS._1, dz, dA, dB, 1)._1 | |
736 | + | else dS._1 | |
710 | 737 | } | |
711 | 738 | } | |
712 | 739 | } | |
713 | - | else | |
714 | - | ||
715 | - | ||
716 | - | func | |
717 | - | func | |
740 | + | else dO | |
741 | + | ||
742 | + | ||
743 | + | func dT (dU,dh,dz) = { | |
744 | + | func dA (cL,dV) = { | |
718 | 745 | let dk = cL._1 | |
719 | - | let | |
720 | - | if ((size( | |
746 | + | let dB = split(dV, ";") | |
747 | + | if ((size(dB) != m)) | |
721 | 748 | then throw("Wrong segment format") | |
722 | 749 | else { | |
723 | - | let | |
724 | - | let dq = | |
725 | - | if (if (( | |
750 | + | let dW = dB[0] | |
751 | + | let dq = dB[1] | |
752 | + | if (if ((dW == "")) | |
726 | 753 | then (dq == "") | |
727 | 754 | else false) | |
728 | 755 | then $Tuple2((dk + 1), cL._2) | |
729 | 756 | else { | |
730 | - | let | |
731 | - | $Tuple2((dk + 1), | |
757 | + | let dX = dM(dW, cL._2, dz, dk, 0) | |
758 | + | $Tuple2((dk + 1), dM(dq, dX, dz, dk, 1)) | |
732 | 759 | } | |
733 | 760 | } | |
734 | 761 | } | |
735 | 762 | ||
736 | - | ( let cN = | |
763 | + | ( let cN = dU | |
737 | 764 | let cO = size(cN) | |
738 | 765 | let cP = $Tuple2(0, dh) | |
739 | 766 | func cQ (cR,cS) = if ((cS >= cO)) | |
740 | 767 | then cR | |
741 | - | else | |
768 | + | else dA(cR, cN[cS]) | |
742 | 769 | ||
743 | 770 | func cT (cR,cS) = if ((cS >= cO)) | |
744 | 771 | then cR | |
745 | 772 | else throw("List size exceeds 6") | |
746 | 773 | ||
747 | 774 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2 | |
748 | 775 | } | |
749 | 776 | ||
750 | 777 | ||
751 | - | func | |
778 | + | func dY (dZ,ea,eb,ec) = if ((size(dZ) != S)) | |
752 | 779 | then throw("Wrong proportions data") | |
753 | 780 | else { | |
754 | - | func | |
755 | - | let dd = (parseIntValue( | |
781 | + | func ed (cL,ee) = { | |
782 | + | let dd = (parseIntValue(dZ[ee]) + ((ec * ea[ee]) * eb)) | |
756 | 783 | if ((0 > dd)) | |
757 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
784 | + | then throw(((((((("Panic! Pieces of type=" + toString(ee)) + ", sign=") + toString(ec)) + ", terrainCounts[i]=") + toString(ea[ee])) + ", landSizeIndex=") + toString(eb))) | |
758 | 785 | else (cL :+ toString(dd)) | |
759 | 786 | } | |
760 | 787 | ||
761 | 788 | let cW = { | |
762 | 789 | let cN = [0, 1, 2, 3, 4, 5] | |
763 | 790 | let cO = size(cN) | |
764 | 791 | let cP = nil | |
765 | 792 | func cQ (cR,cS) = if ((cS >= cO)) | |
766 | 793 | then cR | |
767 | - | else | |
794 | + | else ed(cR, cN[cS]) | |
768 | 795 | ||
769 | 796 | func cT (cR,cS) = if ((cS >= cO)) | |
770 | 797 | then cR | |
771 | 798 | else throw("List size exceeds 6") | |
772 | 799 | ||
773 | 800 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
774 | 801 | } | |
775 | 802 | makeString(cW, "_") | |
776 | 803 | } | |
777 | 804 | ||
778 | 805 | ||
779 | - | func | |
780 | - | let | |
781 | - | | |
782 | - | } | |
783 | - | ||
784 | - | ||
785 | - | func | |
786 | - | ||
787 | - | ||
788 | - | func | |
789 | - | func | |
790 | - | let | |
791 | - | (cL :+ toString((parseIntValue( | |
806 | + | func ef (ea,eb,ec) = { | |
807 | + | let dZ = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_") | |
808 | + | dY(dZ, ea, eb, ec) | |
809 | + | } | |
810 | + | ||
811 | + | ||
812 | + | func eg (eh) = [(size(split(eh, "A")) - 1), (size(split(eh, "B")) - 1), (size(split(eh, "C")) - 1), (size(split(eh, "D")) - 1), (size(split(eh, "E")) - 1), (size(split(eh, "F")) - 1)] | |
813 | + | ||
814 | + | ||
815 | + | func ei (ej,ea,ek,eb,el) = { | |
816 | + | func em (cL,ee) = { | |
817 | + | let en = ((fraction(ek, el, U) * ea[ee]) * eb) | |
818 | + | (cL :+ toString((parseIntValue(ej[ee]) + en))) | |
792 | 819 | } | |
793 | 820 | ||
794 | 821 | let cW = { | |
795 | 822 | let cN = [0, 1, 2, 3, 4, 5] | |
796 | 823 | let cO = size(cN) | |
797 | 824 | let cP = nil | |
798 | 825 | func cQ (cR,cS) = if ((cS >= cO)) | |
799 | 826 | then cR | |
800 | - | else | |
827 | + | else em(cR, cN[cS]) | |
801 | 828 | ||
802 | 829 | func cT (cR,cS) = if ((cS >= cO)) | |
803 | 830 | then cR | |
804 | 831 | else throw("List size exceeds 6") | |
805 | 832 | ||
806 | 833 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
807 | 834 | } | |
808 | 835 | makeString(cW, "_") | |
809 | 836 | } | |
810 | 837 | ||
811 | 838 | ||
812 | - | func | |
813 | - | func | |
814 | - | let | |
815 | - | $Tuple2((cL._1 :+ | |
839 | + | func eo (ea,ek,eb,el) = { | |
840 | + | func em (cL,ee) = { | |
841 | + | let en = ((fraction(ek, el, U) * ea[ee]) * eb) | |
842 | + | $Tuple2((cL._1 :+ en), (cL._2 + en)) | |
816 | 843 | } | |
817 | 844 | ||
818 | 845 | let cN = [0, 1, 2, 3, 4, 5] | |
819 | 846 | let cO = size(cN) | |
820 | 847 | let cP = $Tuple2(nil, 0) | |
821 | 848 | func cQ (cR,cS) = if ((cS >= cO)) | |
822 | 849 | then cR | |
823 | - | else | |
850 | + | else em(cR, cN[cS]) | |
824 | 851 | ||
825 | 852 | func cT (cR,cS) = if ((cS >= cO)) | |
826 | 853 | then cR | |
827 | 854 | else throw("List size exceeds 6") | |
828 | 855 | ||
829 | 856 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
830 | 857 | } | |
831 | 858 | ||
832 | 859 | ||
833 | - | func | |
834 | - | let | |
835 | - | let | |
836 | - | if (( | |
837 | - | then $Tuple2(makeString( | |
838 | - | else if (( | |
860 | + | func ep (eq,er,es,et) = { | |
861 | + | let eu = es._1 | |
862 | + | let ev = es._2 | |
863 | + | if ((ev == 0)) | |
864 | + | then $Tuple2(makeString(eq, "_"), makeString(er, "_")) | |
865 | + | else if ((et >= ev)) | |
839 | 866 | then { | |
840 | - | func | |
867 | + | func ew (cL,ee) = (cL :+ toString((parseIntValue(eq[ee]) + eu[ee]))) | |
841 | 868 | ||
842 | 869 | let cW = { | |
843 | 870 | let cN = [0, 1, 2, 3, 4, 5] | |
844 | 871 | let cO = size(cN) | |
845 | 872 | let cP = nil | |
846 | 873 | func cQ (cR,cS) = if ((cS >= cO)) | |
847 | 874 | then cR | |
848 | - | else | |
875 | + | else ew(cR, cN[cS]) | |
849 | 876 | ||
850 | 877 | func cT (cR,cS) = if ((cS >= cO)) | |
851 | 878 | then cR | |
852 | 879 | else throw("List size exceeds 6") | |
853 | 880 | ||
854 | 881 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
855 | 882 | } | |
856 | - | $Tuple2(makeString(cW, "_"), makeString( | |
883 | + | $Tuple2(makeString(cW, "_"), makeString(er, "_")) | |
857 | 884 | } | |
858 | 885 | else { | |
859 | - | func | |
860 | - | let | |
861 | - | $Tuple2((cL._1 :+ toString((parseIntValue( | |
886 | + | func ex (cL,ee) = { | |
887 | + | let ey = fraction(eu[ee], et, ev) | |
888 | + | $Tuple2((cL._1 :+ toString((parseIntValue(eq[ee]) + ey))), (cL._2 :+ toString(((parseIntValue(er[ee]) + eu[ee]) - ey)))) | |
862 | 889 | } | |
863 | 890 | ||
864 | 891 | let cW = { | |
865 | 892 | let cN = [0, 1, 2, 3, 4, 5] | |
866 | 893 | let cO = size(cN) | |
867 | 894 | let cP = $Tuple2(nil, nil) | |
868 | 895 | func cQ (cR,cS) = if ((cS >= cO)) | |
869 | 896 | then cR | |
870 | - | else | |
897 | + | else ex(cR, cN[cS]) | |
871 | 898 | ||
872 | 899 | func cT (cR,cS) = if ((cS >= cO)) | |
873 | 900 | then cR | |
874 | 901 | else throw("List size exceeds 6") | |
875 | 902 | ||
876 | 903 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
877 | 904 | } | |
878 | 905 | $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_")) | |
879 | 906 | } | |
880 | 907 | } | |
881 | 908 | ||
882 | 909 | ||
883 | - | func | |
884 | - | then | |
885 | - | else -( | |
886 | - | ||
887 | - | ||
888 | - | let | |
889 | - | ||
890 | - | func | |
891 | - | let | |
892 | - | let | |
910 | + | func ez (eA) = if ((eA >= toBigInt(0))) | |
911 | + | then eA | |
912 | + | else -(eA) | |
913 | + | ||
914 | + | ||
915 | + | let eB = [[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]] | |
916 | + | ||
917 | + | func eC (bS,eD) = { | |
918 | + | let eE = toInt((bS % cg)) | |
919 | + | let eF = if ((eD[0] > eE)) | |
893 | 920 | then "A" | |
894 | - | else if (( | |
921 | + | else if ((eD[1] > eE)) | |
895 | 922 | then "B" | |
896 | - | else if (( | |
923 | + | else if ((eD[2] > eE)) | |
897 | 924 | then "C" | |
898 | - | else if (( | |
925 | + | else if ((eD[3] > eE)) | |
899 | 926 | then "D" | |
900 | - | else if (( | |
927 | + | else if ((eD[4] > eE)) | |
901 | 928 | then "E" | |
902 | 929 | else "F" | |
903 | - | | |
904 | - | } | |
905 | - | ||
906 | - | ||
907 | - | func | |
908 | - | let | |
909 | - | func | |
910 | - | ||
911 | - | let | |
930 | + | eF | |
931 | + | } | |
932 | + | ||
933 | + | ||
934 | + | func eG (eH,eI) = { | |
935 | + | let eJ = eB[eI] | |
936 | + | func eK (cL,cM) = $Tuple2((((((cL._1 + eC(cL._2, eJ)) + eC((cL._2 / cg), eJ)) + eC((cL._2 / ch), eJ)) + eC((cL._2 / ci), eJ)) + eC((cL._2 / cj), eJ)), (cL._2 / ck)) | |
937 | + | ||
938 | + | let eL = { | |
912 | 939 | let cN = [1, 2, 3, 4, 5] | |
913 | 940 | let cO = size(cN) | |
914 | - | let cP = $Tuple2("", ( | |
941 | + | let cP = $Tuple2("", (eH / cf)) | |
915 | 942 | func cQ (cR,cS) = if ((cS >= cO)) | |
916 | 943 | then cR | |
917 | - | else | |
944 | + | else eK(cR, cN[cS]) | |
918 | 945 | ||
919 | 946 | func cT (cR,cS) = if ((cS >= cO)) | |
920 | 947 | then cR | |
921 | 948 | else throw("List size exceeds 5") | |
922 | 949 | ||
923 | 950 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
924 | 951 | } | |
925 | - | eI._1 | |
926 | - | } | |
927 | - | ||
928 | - | ||
929 | - | func eJ (eK) = { | |
930 | - | let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
931 | - | [toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S)) | |
932 | - | then eL[aq] | |
933 | - | else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S)) | |
934 | - | then eL[ar] | |
935 | - | else "0_0_0_0_0_0", eL[as]] | |
952 | + | eL._1 | |
936 | 953 | } | |
937 | 954 | ||
938 | 955 | ||
939 | 956 | func eM (eN) = { | |
940 | - | let do = split(eN, "_") | |
957 | + | let eO = split(valueOrElse(getString(eN), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
958 | + | [toString(valueOrElse(parseInt(eO[ap]), 0)), if ((size(split(eO[aq], "_")) == S)) | |
959 | + | then eO[aq] | |
960 | + | else "0_0_0_0_0_0", if ((size(split(eO[ar], "_")) == S)) | |
961 | + | then eO[ar] | |
962 | + | else "0_0_0_0_0_0", eO[as]] | |
963 | + | } | |
964 | + | ||
965 | + | ||
966 | + | func eP (eQ) = { | |
967 | + | let do = split(eQ, "_") | |
941 | 968 | ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0])) | |
942 | 969 | } | |
943 | 970 | ||
944 | 971 | ||
945 | - | func | |
946 | - | let | |
947 | - | func | |
948 | - | ||
949 | - | func | |
972 | + | func eR (eS) = { | |
973 | + | let eT = eS[aj] | |
974 | + | func eU (cL,dj) = (cL + parseIntValue(dj)) | |
975 | + | ||
976 | + | func eV (cL,dj) = { | |
950 | 977 | let bB = cL._1 | |
951 | - | let | |
952 | - | $Tuple2((bB + 1), (cL._2 + ( | |
978 | + | let eW = (((parseIntValue(dj) + af) - 1) / af) | |
979 | + | $Tuple2((bB + 1), (cL._2 + (eW * bi))) | |
953 | 980 | } | |
954 | 981 | ||
955 | - | let | |
956 | - | let cN = split( | |
982 | + | let eX = { | |
983 | + | let cN = split(eS[ah], "_") | |
957 | 984 | let cO = size(cN) | |
958 | 985 | let cP = 0 | |
959 | 986 | func cQ (cR,cS) = if ((cS >= cO)) | |
960 | 987 | then cR | |
961 | - | else | |
988 | + | else eU(cR, cN[cS]) | |
962 | 989 | ||
963 | 990 | func cT (cR,cS) = if ((cS >= cO)) | |
964 | 991 | then cR | |
965 | 992 | else throw("List size exceeds 6") | |
966 | 993 | ||
967 | 994 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
968 | 995 | } | |
969 | - | let | |
970 | - | let cN = split( | |
996 | + | let eY = { | |
997 | + | let cN = split(eS[ai], "_") | |
971 | 998 | let cO = size(cN) | |
972 | 999 | let cP = 0 | |
973 | - | func | |
1000 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
974 | 1001 | then cR | |
975 | - | else | |
976 | - | ||
977 | - | func | |
1002 | + | else eU(cR, cN[cS]) | |
1003 | + | ||
1004 | + | func fa (cR,cS) = if ((cS >= cO)) | |
978 | 1005 | then cR | |
979 | 1006 | else throw("List size exceeds 6") | |
980 | 1007 | ||
981 | - | | |
1008 | + | fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6) | |
982 | 1009 | } | |
983 | - | let | |
1010 | + | let fb = if ((eT == "")) | |
984 | 1011 | then 0 | |
985 | - | else ( let cN = split_4C( | |
1012 | + | else ( let cN = split_4C(eT, "_") | |
986 | 1013 | let cO = size(cN) | |
987 | 1014 | let cP = $Tuple2(0, 0) | |
988 | - | func | |
1015 | + | func fc (cR,cS) = if ((cS >= cO)) | |
989 | 1016 | then cR | |
990 | - | else | |
991 | - | ||
992 | - | func | |
1017 | + | else eV(cR, cN[cS]) | |
1018 | + | ||
1019 | + | func fd (cR,cS) = if ((cS >= cO)) | |
993 | 1020 | then cR | |
994 | 1021 | else throw("List size exceeds 50") | |
995 | 1022 | ||
996 | - | | |
997 | - | (( | |
998 | - | } | |
999 | - | ||
1000 | - | ||
1001 | - | func | |
1002 | - | let | |
1003 | - | let | |
1004 | - | let | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1008 | - | then makeString(["0", toString( | |
1009 | - | else { | |
1010 | - | let | |
1011 | - | let | |
1012 | - | let | |
1013 | - | then parseIntValue( | |
1014 | - | else | |
1015 | - | makeString([toString( | |
1016 | - | } | |
1017 | - | [ | |
1018 | - | then | |
1019 | - | else "0_0_0_0_0_0", if ((size(split( | |
1020 | - | then | |
1021 | - | else "0_0_0_0_0_0", | |
1022 | - | } | |
1023 | - | ||
1024 | - | ||
1025 | - | func | |
1026 | - | let | |
1027 | - | let | |
1028 | - | (( | |
1029 | - | } | |
1030 | - | ||
1031 | - | ||
1032 | - | func | |
1033 | - | let | |
1034 | - | then ((( | |
1035 | - | else -((((-( | |
1036 | - | ( | |
1037 | - | } | |
1038 | - | ||
1039 | - | ||
1040 | - | func | |
1023 | + | fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 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 | |
1024 | + | ((eX + eY) + fb) | |
1025 | + | } | |
1026 | + | ||
1027 | + | ||
1028 | + | func fe (ff,fg,fh) = { | |
1029 | + | let eQ = ((toString(fg) + "_") + toString(fh)) | |
1030 | + | let fi = eP(eQ) | |
1031 | + | let fj = valueOrElse(getString(ff), (eQ + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1032 | + | let fk = split_4C(fj, ":") | |
1033 | + | let fl = eR(fk) | |
1034 | + | let fm = if ((5 > size(fk))) | |
1035 | + | then makeString(["0", toString(fl), toString((fi - fl)), toString(fi)], "_") | |
1036 | + | else { | |
1037 | + | let fn = split(fk[ak], "_") | |
1038 | + | let fo = parseIntValue(fn[al]) | |
1039 | + | let fp = if ((size(fn) > 1)) | |
1040 | + | then parseIntValue(fn[am]) | |
1041 | + | else fl | |
1042 | + | makeString([toString(fo), toString(fp), toString(((fi - fo) - fp)), toString(fi)], "_") | |
1043 | + | } | |
1044 | + | [fk[ag], if ((size(split(fk[ah], "_")) == S)) | |
1045 | + | then fk[ah] | |
1046 | + | else "0_0_0_0_0_0", if ((size(split(fk[ai], "_")) == S)) | |
1047 | + | then fk[ai] | |
1048 | + | else "0_0_0_0_0_0", fk[aj], fm] | |
1049 | + | } | |
1050 | + | ||
1051 | + | ||
1052 | + | func fq (eS) = { | |
1053 | + | let fr = eR(eS) | |
1054 | + | let fs = parseIntValue(split(eS[ak], "_")[al]) | |
1055 | + | ((eP(eS[ag]) - fr) - fs) | |
1056 | + | } | |
1057 | + | ||
1058 | + | ||
1059 | + | func ft (fu,fv) = { | |
1060 | + | let eW = if ((fu >= 0)) | |
1061 | + | then (((fu + fv) - 1) / fv) | |
1062 | + | else -((((-(fu) + fv) - 1) / fv)) | |
1063 | + | (eW * bi) | |
1064 | + | } | |
1065 | + | ||
1066 | + | ||
1067 | + | func fw (fx,eS,fy) = if ((size(fx) != 3)) | |
1041 | 1068 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1042 | 1069 | else { | |
1043 | - | let | |
1044 | - | let | |
1045 | - | let | |
1070 | + | let fz = split(fx[0], "_") | |
1071 | + | let fA = split(fx[1], "_") | |
1072 | + | let fB = if ((fx[2] == "")) | |
1046 | 1073 | then nil | |
1047 | - | else split( | |
1048 | - | if ((size( | |
1074 | + | else split(fx[2], "_") | |
1075 | + | if ((size(fz) != S)) | |
1049 | 1076 | then throw("All 6 resources should be passed") | |
1050 | - | else if ((size( | |
1077 | + | else if ((size(fA) != S)) | |
1051 | 1078 | then throw("All 6 materials should be passed") | |
1052 | 1079 | else { | |
1053 | - | let | |
1054 | - | let | |
1055 | - | let | |
1056 | - | let | |
1080 | + | let et = fq(eS) | |
1081 | + | let fC = split(eS[ah], "_") | |
1082 | + | let fD = split(eS[ai], "_") | |
1083 | + | let fE = if ((eS[aj] == "")) | |
1057 | 1084 | then nil | |
1058 | - | else split( | |
1059 | - | let | |
1060 | - | let | |
1061 | - | let | |
1085 | + | else split(eS[aj], "_") | |
1086 | + | let er = split(fy[aq], "_") | |
1087 | + | let fF = split(fy[ar], "_") | |
1088 | + | let fG = if ((fy[as] == "")) | |
1062 | 1089 | then nil | |
1063 | - | else split( | |
1064 | - | func | |
1065 | - | let | |
1066 | - | let | |
1067 | - | let | |
1068 | - | let | |
1069 | - | if (( | |
1070 | - | then $Tuple4(( | |
1071 | - | else if (( | |
1072 | - | then if (( | |
1073 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1074 | - | else $Tuple4(( | |
1075 | - | else if ((-( | |
1076 | - | then throw((((("Attempt to take " + toString(-( | |
1077 | - | else $Tuple4(( | |
1090 | + | else split(fy[as], "_") | |
1091 | + | func fH (cL,dj) = { | |
1092 | + | let ee = cL._1 | |
1093 | + | let fI = parseIntValue(dj) | |
1094 | + | let fJ = parseIntValue(fC[ee]) | |
1095 | + | let fK = parseIntValue(er[ee]) | |
1096 | + | if ((fI == 0)) | |
1097 | + | then $Tuple4((ee + 1), (cL._2 :+ fC[ee]), (cL._3 :+ er[ee]), cL._4) | |
1098 | + | else if ((fI > 0)) | |
1099 | + | then if ((fI > fK)) | |
1100 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available")) | |
1101 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI)) | |
1102 | + | else if ((-(fI) > fJ)) | |
1103 | + | then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fJ)) + " available")) | |
1104 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI)) | |
1078 | 1105 | } | |
1079 | 1106 | ||
1080 | 1107 | let cW = { | |
1081 | - | let cN = | |
1108 | + | let cN = fz | |
1082 | 1109 | let cO = size(cN) | |
1083 | 1110 | let cP = $Tuple4(0, nil, nil, 0) | |
1084 | 1111 | func cQ (cR,cS) = if ((cS >= cO)) | |
1085 | 1112 | then cR | |
1086 | - | else | |
1113 | + | else fH(cR, cN[cS]) | |
1087 | 1114 | ||
1088 | 1115 | func cT (cR,cS) = if ((cS >= cO)) | |
1089 | 1116 | then cR | |
1090 | 1117 | else throw("List size exceeds 6") | |
1091 | 1118 | ||
1092 | 1119 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1093 | 1120 | } | |
1094 | - | func | |
1095 | - | let | |
1096 | - | let | |
1097 | - | let | |
1098 | - | let | |
1099 | - | if (( | |
1100 | - | then $Tuple4(( | |
1101 | - | else if (( | |
1102 | - | then if (( | |
1103 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1104 | - | else $Tuple4(( | |
1105 | - | else if ((-( | |
1106 | - | then throw((((("Attempt to take " + toString(-( | |
1107 | - | else $Tuple4(( | |
1121 | + | func fL (cL,dj) = { | |
1122 | + | let ee = cL._1 | |
1123 | + | let fI = parseIntValue(dj) | |
1124 | + | let fM = parseIntValue(fD[ee]) | |
1125 | + | let fN = parseIntValue(fF[ee]) | |
1126 | + | if ((fI == 0)) | |
1127 | + | then $Tuple4((ee + 1), (cL._2 :+ fD[ee]), (cL._3 :+ fF[ee]), cL._4) | |
1128 | + | else if ((fI > 0)) | |
1129 | + | then if ((fI > fN)) | |
1130 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available")) | |
1131 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI)) | |
1132 | + | else if ((-(fI) > fM)) | |
1133 | + | then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fM)) + " available")) | |
1134 | + | else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI)) | |
1108 | 1135 | } | |
1109 | 1136 | ||
1110 | - | let | |
1111 | - | let cN = | |
1137 | + | let dW = { | |
1138 | + | let cN = fA | |
1112 | 1139 | let cO = size(cN) | |
1113 | 1140 | let cP = $Tuple4(0, nil, nil, cW._4) | |
1114 | - | func | |
1141 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
1115 | 1142 | then cR | |
1116 | - | else | |
1117 | - | ||
1118 | - | func | |
1143 | + | else fL(cR, cN[cS]) | |
1144 | + | ||
1145 | + | func fa (cR,cS) = if ((cS >= cO)) | |
1119 | 1146 | then cR | |
1120 | 1147 | else throw("List size exceeds 6") | |
1121 | 1148 | ||
1122 | - | | |
1149 | + | fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1123 | 1150 | } | |
1124 | - | func | |
1125 | - | let | |
1126 | - | let | |
1127 | - | let | |
1128 | - | then parseIntValue( | |
1151 | + | func fO (cL,dj) = { | |
1152 | + | let ee = cL._1 | |
1153 | + | let fI = parseIntValue(dj) | |
1154 | + | let fP = if ((size(fE) > ee)) | |
1155 | + | then parseIntValue(fE[ee]) | |
1129 | 1156 | else 0 | |
1130 | - | let | |
1131 | - | then parseIntValue( | |
1157 | + | let fQ = if ((size(fG) > ee)) | |
1158 | + | then parseIntValue(fG[ee]) | |
1132 | 1159 | else 0 | |
1133 | - | if (( | |
1134 | - | then $Tuple4(( | |
1135 | - | else if (( | |
1136 | - | then if (( | |
1137 | - | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString( | |
1160 | + | if ((fI == 0)) | |
1161 | + | then $Tuple4((ee + 1), (cL._2 :+ toString(fP)), (cL._3 :+ toString(fQ)), cL._4) | |
1162 | + | else if ((fI > 0)) | |
1163 | + | then if ((fI > fQ)) | |
1164 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fQ)) + " available")) | |
1138 | 1165 | else { | |
1139 | - | let | |
1140 | - | $Tuple4(( | |
1166 | + | let fR = (ft((fP + fI), af) - ft(fP, af)) | |
1167 | + | $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR)) | |
1141 | 1168 | } | |
1142 | - | else if ((-( | |
1143 | - | then throw((((("Attempt to take " + toString(-( | |
1169 | + | else if ((-(fI) > fP)) | |
1170 | + | then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fP)) + " available")) | |
1144 | 1171 | else { | |
1145 | - | let | |
1146 | - | $Tuple4(( | |
1172 | + | let fR = (ft((fP + fI), af) - ft(fP, af)) | |
1173 | + | $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR)) | |
1147 | 1174 | } | |
1148 | 1175 | } | |
1149 | 1176 | ||
1150 | - | let | |
1177 | + | let eO = if ((size(fB) != 0)) | |
1151 | 1178 | then { | |
1152 | - | let cN = | |
1179 | + | let cN = fB | |
1153 | 1180 | let cO = size(cN) | |
1154 | - | let cP = $Tuple4(0, nil, nil, | |
1155 | - | func | |
1181 | + | let cP = $Tuple4(0, nil, nil, dW._4) | |
1182 | + | func fc (cR,cS) = if ((cS >= cO)) | |
1156 | 1183 | then cR | |
1157 | - | else | |
1158 | - | ||
1159 | - | func | |
1184 | + | else fO(cR, cN[cS]) | |
1185 | + | ||
1186 | + | func fd (cR,cS) = if ((cS >= cO)) | |
1160 | 1187 | then cR | |
1161 | 1188 | else throw("List size exceeds 50") | |
1162 | 1189 | ||
1163 | - | | |
1190 | + | fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 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) | |
1164 | 1191 | } | |
1165 | - | else $Tuple4(0, | |
1166 | - | let | |
1167 | - | if (( | |
1168 | - | then throw((((("Attempt to put total " + toString( | |
1169 | - | else $Tuple7(makeString(cW._2, "_"), makeString( | |
1192 | + | else $Tuple4(0, fE, fG, dW._4) | |
1193 | + | let fS = eO._4 | |
1194 | + | if ((fS > et)) | |
1195 | + | then throw((((("Attempt to put total " + toString(fS)) + " stuff, but only ") + toString(et)) + " warehouse space left")) | |
1196 | + | else $Tuple7(makeString(cW._2, "_"), makeString(dW._2, "_"), makeString(eO._2, "_"), makeString(cW._3, "_"), makeString(dW._3, "_"), makeString(eO._3, "_"), fS) | |
1170 | 1197 | } | |
1171 | 1198 | } | |
1172 | 1199 | ||
1173 | 1200 | ||
1174 | - | func | |
1175 | - | let aT = toString( | |
1176 | - | let | |
1177 | - | let | |
1178 | - | let co = toString( | |
1179 | - | let | |
1180 | - | let | |
1181 | - | let | |
1182 | - | let | |
1183 | - | let av = calculateAssetId( | |
1184 | - | let | |
1185 | - | $Tuple2([IntegerEntry(cm(), ( | |
1186 | - | } | |
1187 | - | ||
1188 | - | ||
1189 | - | func | |
1201 | + | func fT (fU,fV) = { | |
1202 | + | let aT = toString(fU) | |
1203 | + | let fW = ez(toBigInt(fV)) | |
1204 | + | let fX = valueOrElse(getInteger(cm()), (cl + 1)) | |
1205 | + | let co = toString(fX) | |
1206 | + | let eI = toInt((fW % cf)) | |
1207 | + | let eh = eG(fW, eI) | |
1208 | + | let fY = aa[eI] | |
1209 | + | let fZ = Issue(cE(co, "S"), makeString([co, "S", eh, fY], "_"), 1, 0, false) | |
1210 | + | let av = calculateAssetId(fZ) | |
1211 | + | let ga = toBase58String(av) | |
1212 | + | $Tuple2([IntegerEntry(cm(), (fX + 1)), fZ, StringEntry(cn(co), ga), StringEntry(au(ga), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ga), 0), IntegerEntry(cr(ga, aT), 0), ScriptTransfer(fU, 1, av)], $Tuple2(ga, fY)) | |
1213 | + | } | |
1214 | + | ||
1215 | + | ||
1216 | + | func gb (aT,gc,gd) = if (!(sigVerify_8Kb(gc, gd, bX))) | |
1190 | 1217 | then throw("signature does not match") | |
1191 | 1218 | else { | |
1192 | - | let do = split(toUtf8String( | |
1193 | - | let | |
1194 | - | let | |
1195 | - | let | |
1196 | - | let | |
1197 | - | let | |
1198 | - | let | |
1199 | - | let | |
1200 | - | if (if (( | |
1219 | + | let do = split(toUtf8String(gc), ";") | |
1220 | + | let ge = split(do[0], "|") | |
1221 | + | let gf = split(ge[cA], "_") | |
1222 | + | let gg = parseIntValue(gf[0]) | |
1223 | + | let gh = parseIntValue(gf[1]) | |
1224 | + | let gi = split(do[1], ":") | |
1225 | + | let gj = gi[0] | |
1226 | + | let gk = parseIntValue(ge[cB]) | |
1227 | + | if (if ((gk > (lastBlock.timestamp + bZ))) | |
1201 | 1228 | then true | |
1202 | - | else ((lastBlock.timestamp - bZ) > | |
1203 | - | then throw(((("signature outdated: logTime=" + toString( | |
1229 | + | else ((lastBlock.timestamp - bZ) > gk)) | |
1230 | + | then throw(((("signature outdated: logTime=" + toString(gk)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1204 | 1231 | else { | |
1205 | - | let | |
1206 | - | let | |
1207 | - | if (( | |
1208 | - | then throw(((("Tx ids don't match! In state: " + | |
1232 | + | let gl = gi[1] | |
1233 | + | let gm = valueOrElse(getString(at(aT)), "") | |
1234 | + | if ((gm != gl)) | |
1235 | + | then throw(((("Tx ids don't match! In state: " + gm) + ", in msg: ") + gl)) | |
1209 | 1236 | else { | |
1210 | 1237 | let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked") | |
1211 | - | let | |
1212 | - | let | |
1213 | - | let | |
1214 | - | if (( | |
1215 | - | then throw(((("oldHealth=" + toString( | |
1216 | - | else if ((0 >= | |
1238 | + | let gn = aQ(p) | |
1239 | + | let go = J(valueOrElse(getInteger(r(p)), 0)) | |
1240 | + | let gp = valueOrElse(getInteger(gn), go) | |
1241 | + | if ((gp != gg)) | |
1242 | + | then throw(((("oldHealth=" + toString(gp)) + " from state does not match one from flight log=") + toString(gg))) | |
1243 | + | else if ((0 >= gg)) | |
1217 | 1244 | then throw("You can't fly with zero health") | |
1218 | 1245 | else { | |
1219 | - | let | |
1220 | - | then | |
1246 | + | let gq = if ((size(ge) > cC)) | |
1247 | + | then ge[cC] | |
1221 | 1248 | else "" | |
1222 | - | let | |
1223 | - | then | |
1249 | + | let gr = if ((size(ge) > cD)) | |
1250 | + | then ge[cD] | |
1224 | 1251 | else "" | |
1225 | - | let | |
1226 | - | then ( | |
1252 | + | let gs = if (if ((gh > 0)) | |
1253 | + | then (gq == "$") | |
1227 | 1254 | else false) | |
1228 | 1255 | then bR(invoke(bC, "sendUsdtPrize", [aT], nil)) | |
1229 | 1256 | else 0 | |
1230 | - | $Tuple5( | |
1257 | + | $Tuple5(gh, p, gs, gj, gr) | |
1231 | 1258 | } | |
1232 | 1259 | } | |
1233 | 1260 | } | |
1234 | 1261 | } | |
1235 | 1262 | ||
1236 | 1263 | ||
1237 | - | func | |
1238 | - | let aT = toString( | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | let | |
1245 | - | let dt = de( | |
1246 | - | if ((0 >= | |
1247 | - | then $Tuple3([IntegerEntry( | |
1248 | - | else { | |
1249 | - | let | |
1250 | - | let | |
1251 | - | $Tuple3(((( | |
1252 | - | } | |
1253 | - | } | |
1254 | - | ||
1255 | - | ||
1256 | - | func | |
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | let | |
1261 | - | ((T + fraction(T, (( | |
1262 | - | } | |
1263 | - | ||
1264 | - | ||
1265 | - | func | |
1266 | - | let | |
1267 | - | then $Tuple2( | |
1264 | + | func gt (fU,fV,gc,gd) = { | |
1265 | + | let aT = toString(fU) | |
1266 | + | let eJ = gb(aT, gc, gd) | |
1267 | + | let gn = aQ(eJ._2) | |
1268 | + | let eN = aO(eJ._2) | |
1269 | + | let fy = eM(eN) | |
1270 | + | let gu = split(fy[ar], "_") | |
1271 | + | let gv = makeString(cX(true, gu, cd), "_") | |
1272 | + | let dt = de(fy[as], eJ._5) | |
1273 | + | if ((0 >= eJ._1)) | |
1274 | + | then $Tuple3([IntegerEntry(gn, 0), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":"))], "", 0) | |
1275 | + | else { | |
1276 | + | let gw = fT(fU, fV) | |
1277 | + | let ga = gw._2._1 | |
1278 | + | $Tuple3((((gw._1 :+ StringEntry(aP(eJ._2), makeString([gw._2._2, "L", ga], "_"))) :+ IntegerEntry(gn, eJ._1)) :+ StringEntry(eN, makeString([fy[ap], fy[aq], gv, dt], ":"))), ga, eJ._3) | |
1279 | + | } | |
1280 | + | } | |
1281 | + | ||
1282 | + | ||
1283 | + | func gx (aF,gy) = { | |
1284 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
1285 | + | let gz = valueOrElse(getInteger(az(R, aF)), 0) | |
1286 | + | let gA = (fh / 6) | |
1287 | + | let gB = (fh / 7) | |
1288 | + | ((T + fraction(T, ((fh + gA) + (2 * gB)), 5)) + fraction(T, gz, (gy * 5))) | |
1289 | + | } | |
1290 | + | ||
1291 | + | ||
1292 | + | func gC (b,gD,gE) = { | |
1293 | + | let gF = if ((gD == cx)) | |
1294 | + | then $Tuple2(gE, valueOrElse(getString(aN(b)), "")) | |
1268 | 1295 | else { | |
1269 | 1296 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1270 | - | let | |
1271 | - | let | |
1272 | - | if (( | |
1273 | - | then throw((("Duck location type is " + | |
1274 | - | else $Tuple2( | |
1275 | - | } | |
1276 | - | let aF = | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | let | |
1281 | - | let | |
1282 | - | if (( | |
1297 | + | let gG = valueOrElse(getString(aP(p)), W) | |
1298 | + | let gH = split(value(gG), "_") | |
1299 | + | if ((gH[aV] != "L")) | |
1300 | + | then throw((("Duck location type is " + gH[aV]) + ", but should be L")) | |
1301 | + | else $Tuple2(gH[aW], p) | |
1302 | + | } | |
1303 | + | let aF = gF._1 | |
1304 | + | let gI = gF._2 | |
1305 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
1306 | + | let gK = ax(aF) | |
1307 | + | let gL = valueOrErrorMessage(getInteger(gK), (("Land " + gJ.name) + " is not staked")) | |
1308 | + | let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned")) | |
1309 | + | if ((gM != b)) | |
1283 | 1310 | then throw((P + " is not yours")) | |
1284 | 1311 | else { | |
1285 | - | let | |
1286 | - | $Tuple4( | |
1287 | - | } | |
1288 | - | } | |
1289 | - | ||
1290 | - | ||
1291 | - | func | |
1312 | + | let gN = split(gJ.description, "_") | |
1313 | + | $Tuple4(gI, aF, gN, gL) | |
1314 | + | } | |
1315 | + | } | |
1316 | + | ||
1317 | + | ||
1318 | + | func gO (b,fu,gD,gE) = if ((0 > fu)) | |
1292 | 1319 | then throw("Negative amount") | |
1293 | 1320 | else { | |
1294 | - | let | |
1295 | - | let bU = | |
1296 | - | let | |
1297 | - | let | |
1298 | - | if ((0 > | |
1299 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1321 | + | let dI = gC(b, gD, gE) | |
1322 | + | let bU = dI._3[bI] | |
1323 | + | let ea = eg(dI._3[bJ]) | |
1324 | + | let ek = (lastBlock.timestamp - dI._4) | |
1325 | + | if ((0 > ek)) | |
1326 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dI._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1300 | 1327 | else { | |
1301 | - | let | |
1302 | - | let | |
1303 | - | let | |
1304 | - | if (( | |
1305 | - | then throw(((("Not enough resources, available = " + toString( | |
1328 | + | let gy = bT(bU) | |
1329 | + | let gP = gx(dI._2, gy) | |
1330 | + | let gQ = fraction(ek, (gP * gy), U) | |
1331 | + | if ((fu > gQ)) | |
1332 | + | then throw(((("Not enough resources, available = " + toString(gQ)) + ", requested = ") + toString(fu))) | |
1306 | 1333 | else { | |
1307 | - | let | |
1308 | - | let | |
1309 | - | let | |
1310 | - | let | |
1311 | - | let | |
1312 | - | let | |
1313 | - | let | |
1314 | - | let | |
1315 | - | let | |
1316 | - | if (if (( | |
1317 | - | then ( | |
1334 | + | let gR = fraction((gQ - fu), U, (gP * gy)) | |
1335 | + | let gS = (lastBlock.timestamp - gR) | |
1336 | + | let fg = (gy / bj) | |
1337 | + | let es = eo(ea, (ek - gR), fg, gP) | |
1338 | + | let ff = aE(dI._2) | |
1339 | + | let fh = valueOrElse(getInteger(ay(dI._2)), 0) | |
1340 | + | let eS = fe(ff, fg, fh) | |
1341 | + | let fn = split(eS[ak], "_") | |
1342 | + | let et = parseIntValue(fn[an]) | |
1343 | + | if (if ((gD == cx)) | |
1344 | + | then (fu > et) | |
1318 | 1345 | else false) | |
1319 | - | then throw((("Only " + toString( | |
1346 | + | then throw((("Only " + toString(et)) + " space left in warehouse")) | |
1320 | 1347 | else { | |
1321 | - | let | |
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | then $Tuple4( | |
1327 | - | else if (( | |
1328 | - | then $Tuple4( | |
1348 | + | let eN = aO(dI._1) | |
1349 | + | let fy = eM(eN) | |
1350 | + | let er = split(fy[aq], "_") | |
1351 | + | let eq = split(eS[ah], "_") | |
1352 | + | let gT = if ((gD == cx)) | |
1353 | + | then $Tuple4(ei(eq, ea, (ek - gR), fg, gP), fy[aq], (parseIntValue(fn[am]) + es._2), (parseIntValue(fn[an]) - es._2)) | |
1354 | + | else if ((gD == cy)) | |
1355 | + | then $Tuple4(eS[ah], ei(er, ea, (ek - gR), fg, gP), parseIntValue(fn[am]), parseIntValue(fn[an])) | |
1329 | 1356 | else { | |
1330 | - | let | |
1331 | - | let | |
1332 | - | $Tuple4( | |
1357 | + | let gU = ep(eq, er, es, et) | |
1358 | + | let gV = min([parseIntValue(fn[an]), es._2]) | |
1359 | + | $Tuple4(gU._1, gU._2, (parseIntValue(fn[am]) + gV), (parseIntValue(fn[an]) - gV)) | |
1333 | 1360 | } | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | $Tuple5([IntegerEntry(ax( | |
1361 | + | let gW = gT._1 | |
1362 | + | let gX = gT._2 | |
1363 | + | let gY = gT._3 | |
1364 | + | let gZ = gT._4 | |
1365 | + | $Tuple5([IntegerEntry(ax(dI._2), gS), IntegerEntry(aB(P, dI._2, b), gS)], eN, [fy[ap], gX, fy[ar], fy[as]], ff, [eS[ag], gW, eS[ai], eS[aj], makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")]) | |
1339 | 1366 | } | |
1340 | 1367 | } | |
1341 | 1368 | } | |
1342 | 1369 | } | |
1343 | 1370 | ||
1344 | 1371 | ||
1345 | - | func | |
1346 | - | let | |
1347 | - | let | |
1348 | - | let | |
1349 | - | | |
1350 | - | } | |
1351 | - | ||
1352 | - | ||
1353 | - | func | |
1354 | - | let b = toString( | |
1355 | - | let | |
1356 | - | let | |
1357 | - | let | |
1358 | - | let | |
1359 | - | if (( | |
1372 | + | func ha (b,aF,gy,gD) = { | |
1373 | + | let gK = ax(aF) | |
1374 | + | let gL = value(getInteger(gK)) | |
1375 | + | let gQ = (fraction((lastBlock.timestamp - gL), gx(aF, gy), U) * gy) | |
1376 | + | gO(b, gQ, gD, aF) | |
1377 | + | } | |
1378 | + | ||
1379 | + | ||
1380 | + | func hb (cY,fU,hc,aF) = { | |
1381 | + | let b = toString(fU) | |
1382 | + | let dI = gC(b, cz, aF) | |
1383 | + | let gy = bT(dI._3[bI]) | |
1384 | + | let hd = ay(dI._2) | |
1385 | + | let he = valueOrElse(getInteger(hd), 0) | |
1386 | + | if ((he >= 3)) | |
1360 | 1387 | then throw("Currently max infrastructure level = 3") | |
1361 | 1388 | else { | |
1362 | - | let O = ( | |
1363 | - | let | |
1389 | + | let O = (he + 1) | |
1390 | + | let hf = fraction(cc, (gy * O), bj) | |
1364 | 1391 | if (if (!(cY)) | |
1365 | - | then ( | |
1392 | + | then (hc != hf) | |
1366 | 1393 | else false) | |
1367 | - | then throw(("Payment attached should be " + toString( | |
1394 | + | then throw(("Payment attached should be " + toString(hf))) | |
1368 | 1395 | else { | |
1369 | - | let | |
1370 | - | let | |
1371 | - | let | |
1372 | - | let | |
1373 | - | let | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | let | |
1378 | - | let | |
1379 | - | let | |
1380 | - | let | |
1381 | - | $Tuple3(([IntegerEntry( | |
1396 | + | let eN = aO(dI._1) | |
1397 | + | let fy = eM(eN) | |
1398 | + | let gu = split(fy[ar], "_") | |
1399 | + | let hg = fraction(be, (gy * O), bj) | |
1400 | + | let gv = makeString(cX(cY, gu, hg), "_") | |
1401 | + | let hh = ha(b, dI._2, gy, cz) | |
1402 | + | let hi = hh._5 | |
1403 | + | let hj = eP(hi[ag]) | |
1404 | + | let hk = makeString([split(hi[ag], "_")[0], toString(O)], "_") | |
1405 | + | let hl = eP(hk) | |
1406 | + | let fn = split(hi[ak], "_") | |
1407 | + | let hm = makeString([fn[al], fn[am], toString(((parseIntValue(fn[an]) + hl) - hj)), toString(hl)], "_") | |
1408 | + | $Tuple3(([IntegerEntry(hd, O), IntegerEntry(cr(dI._2, b), O), StringEntry(eN, makeString([fy[ap], hh._3[aq], gv, fy[as]], ":")), StringEntry(hh._4, makeString([hk, hi[ah], hi[ai], hi[aj], hm], ":"))] ++ hh._1), O, hg) | |
1382 | 1409 | } | |
1383 | 1410 | } | |
1384 | 1411 | } | |
1385 | 1412 | ||
1386 | 1413 | ||
1387 | - | func | |
1414 | + | func hn (p,ho) = if (!(aZ)) | |
1388 | 1415 | then $Tuple2(nil, 0) | |
1389 | 1416 | else { | |
1390 | - | let | |
1391 | - | let | |
1392 | - | let I = valueOrElse(getInteger(bD, | |
1393 | - | let N = (I + | |
1394 | - | let | |
1395 | - | let | |
1396 | - | $Tuple2([IntegerEntry( | |
1417 | + | let hp = r(p) | |
1418 | + | let hq = q(p) | |
1419 | + | let I = valueOrElse(getInteger(bD, hq), 0) | |
1420 | + | let N = (I + ho) | |
1421 | + | let hr = L(valueOrElse(getInteger(bD, hp), 0), N) | |
1422 | + | let hs = s(p) | |
1423 | + | $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N) | |
1397 | 1424 | } | |
1398 | 1425 | ||
1399 | 1426 | ||
1400 | - | func | |
1427 | + | func ht (b,ho) = if (!(aZ)) | |
1401 | 1428 | then $Tuple2(nil, 0) | |
1402 | 1429 | else { | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let I = valueOrElse(getInteger(bD, | |
1406 | - | let N = (I + | |
1407 | - | let | |
1408 | - | let | |
1409 | - | $Tuple2([IntegerEntry( | |
1430 | + | let hp = v(b) | |
1431 | + | let hq = u(b) | |
1432 | + | let I = valueOrElse(getInteger(bD, hq), 0) | |
1433 | + | let N = (I + ho) | |
1434 | + | let hr = L(valueOrElse(getInteger(bD, hp), 0), N) | |
1435 | + | let hs = w(b) | |
1436 | + | $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N) | |
1410 | 1437 | } | |
1411 | 1438 | ||
1412 | 1439 | ||
1413 | - | func | |
1440 | + | func hu (b) = { | |
1414 | 1441 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1415 | - | let | |
1416 | - | let | |
1417 | - | if (!(isDefined( | |
1442 | + | let hv = aI(b) | |
1443 | + | let hw = getString(hv) | |
1444 | + | if (!(isDefined(hw))) | |
1418 | 1445 | then throw("You are not eligible for ONBOARD artifact") | |
1419 | 1446 | else { | |
1420 | - | let | |
1421 | - | let | |
1422 | - | if (isDefined( | |
1423 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1447 | + | let hx = aK(b) | |
1448 | + | let hy = getString(hx) | |
1449 | + | if (isDefined(hy)) | |
1450 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hy))) | |
1424 | 1451 | else { | |
1425 | - | let | |
1426 | - | let | |
1427 | - | if (isDefined( | |
1428 | - | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value( | |
1429 | - | else ([StringEntry( | |
1452 | + | let hz = aJ(p) | |
1453 | + | let hA = getString(hz) | |
1454 | + | if (isDefined(hA)) | |
1455 | + | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hA))) | |
1456 | + | else ([StringEntry(hx, p), StringEntry(hz, b)] ++ hn(p, F)._1) | |
1430 | 1457 | } | |
1431 | 1458 | } | |
1432 | 1459 | } | |
1433 | 1460 | ||
1434 | 1461 | ||
1435 | - | func | |
1436 | - | let | |
1437 | - | let aF = | |
1438 | - | let | |
1439 | - | let | |
1440 | - | if ((valueOrElse(getInteger( | |
1462 | + | func hB (b,gE) = { | |
1463 | + | let dI = gC(b, cz, gE) | |
1464 | + | let aF = dI._2 | |
1465 | + | let gy = bT(dI._3[bI]) | |
1466 | + | let hC = az(R, aF) | |
1467 | + | if ((valueOrElse(getInteger(hC), 0) > 0)) | |
1441 | 1468 | then throw("Presale artifact is already activated") | |
1442 | - | else if ((parseIntValue( | |
1469 | + | else if ((parseIntValue(dI._3[bH]) > cl)) | |
1443 | 1470 | then throw((((P + " ") + aF) + " is not eligible for presale artifact")) | |
1444 | 1471 | else { | |
1445 | - | let | |
1446 | - | (((( | |
1472 | + | let hh = ha(b, aF, gy, cz) | |
1473 | + | ((((hh._1 :+ IntegerEntry(hC, gy)) :+ IntegerEntry(cs(R, aF, b), gy)) :+ StringEntry(hh._2, makeString(hh._3, ":"))) :+ StringEntry(hh._4, makeString(hh._5, ":"))) | |
1447 | 1474 | } | |
1448 | 1475 | } | |
1449 | 1476 | ||
1450 | 1477 | ||
1451 | - | func | |
1478 | + | func hD (hE,O,hF,b,hG,fV,hH) = { | |
1452 | 1479 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1453 | - | func | |
1454 | - | let | |
1455 | - | let | |
1456 | - | let | |
1457 | - | let | |
1458 | - | if (( | |
1480 | + | func hI (cL,aF) = { | |
1481 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
1482 | + | let gK = ax(aF) | |
1483 | + | let gL = valueOrErrorMessage(getInteger(gK), (("NFT " + gJ.name) + " is not staked")) | |
1484 | + | let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned")) | |
1485 | + | if ((gM != b)) | |
1459 | 1486 | then throw((P + " is not yours")) | |
1460 | 1487 | else { | |
1461 | - | let | |
1462 | - | let | |
1488 | + | let gN = split(gJ.description, "_") | |
1489 | + | let fY = gN[bK] | |
1463 | 1490 | if (if ((cL._3 != "")) | |
1464 | - | then (cL._3 != | |
1491 | + | then (cL._3 != fY) | |
1465 | 1492 | else false) | |
1466 | 1493 | then throw("Lands should be on the same continent to merge") | |
1467 | 1494 | else { | |
1468 | - | let bU = | |
1469 | - | let | |
1470 | - | let | |
1471 | - | let | |
1472 | - | let | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1495 | + | let bU = gN[bI] | |
1496 | + | let hJ = cL._1 | |
1497 | + | let ee = valueOrErrorMessage(indexOf(hJ, bU), "You haven't passed all the lands needed") | |
1498 | + | let hK = (take(hJ, ee) + drop(hJ, (ee + 1))) | |
1499 | + | let gy = bT(bU) | |
1500 | + | let hL = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0)) | |
1501 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
1502 | + | let hM = { | |
1476 | 1503 | let bc = bU | |
1477 | 1504 | if (("S" == bc)) | |
1478 | 1505 | then 3 | |
1479 | 1506 | else if (("M" == bc)) | |
1480 | 1507 | then 4 | |
1481 | 1508 | else if (("L" == bc)) | |
1482 | 1509 | then 5 | |
1483 | 1510 | else if (("XL" == bc)) | |
1484 | 1511 | then 6 | |
1485 | 1512 | else throw("Only S, M, L, XL can merge") | |
1486 | 1513 | } | |
1487 | - | if (( | |
1514 | + | if ((fh != hM)) | |
1488 | 1515 | then throw("All lands should be maxed to merge") | |
1489 | 1516 | else { | |
1490 | - | let co = | |
1491 | - | let | |
1492 | - | let | |
1493 | - | if ((0 > | |
1494 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1517 | + | let co = gN[bH] | |
1518 | + | let ea = eg(gN[bJ]) | |
1519 | + | let ek = (lastBlock.timestamp - gL) | |
1520 | + | if ((0 > ek)) | |
1521 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gL)) + ", current = ") + toString(lastBlock.timestamp))) | |
1495 | 1522 | else { | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let cV = | |
1500 | - | let | |
1501 | - | let bB = indexOf( | |
1523 | + | let gP = gx(aF, gy) | |
1524 | + | let fg = (gy / bj) | |
1525 | + | let gX = ei(split(cL._4, "_"), ea, ek, fg, gP) | |
1526 | + | let cV = dY(split(cL._6, "_"), ea, fg, -1) | |
1527 | + | let hN = cL._7 | |
1528 | + | let bB = indexOf(hN, aF) | |
1502 | 1529 | if (!(isDefined(bB))) | |
1503 | 1530 | then throw(("Your staked lands don't contain " + aF)) | |
1504 | 1531 | else { | |
1505 | - | let | |
1506 | - | let | |
1507 | - | $Tuple8( | |
1532 | + | let hO = aw(aF) | |
1533 | + | let hP = valueOrElse(getString(hO), "") | |
1534 | + | $Tuple8(hK, hL, fY, gX, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hO)) :+ DeleteEntry(cp(hP))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hN, value(bB)), (cL._8 + gy)) | |
1508 | 1535 | } | |
1509 | 1536 | } | |
1510 | 1537 | } | |
1511 | 1538 | } | |
1512 | 1539 | } | |
1513 | 1540 | } | |
1514 | 1541 | ||
1515 | - | let | |
1516 | - | let | |
1517 | - | let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | then split_51C(value( | |
1542 | + | let eN = aO(p) | |
1543 | + | let fy = eM(eN) | |
1544 | + | let hQ = valueOrElse(getString(bL()), "0_0_0_0_0_0") | |
1545 | + | let hR = bM(b) | |
1546 | + | let hS = getString(hR) | |
1547 | + | let hT = if (isDefined(hS)) | |
1548 | + | then split_51C(value(hS), "_") | |
1522 | 1549 | else nil | |
1523 | 1550 | let cW = { | |
1524 | - | let cN = | |
1551 | + | let cN = hG | |
1525 | 1552 | let cO = size(cN) | |
1526 | - | let cP = $Tuple8( | |
1553 | + | let cP = $Tuple8(hF, 0, "", fy[aq], nil, hQ, hT, 0) | |
1527 | 1554 | func cQ (cR,cS) = if ((cS >= cO)) | |
1528 | 1555 | then cR | |
1529 | - | else | |
1556 | + | else hI(cR, cN[cS]) | |
1530 | 1557 | ||
1531 | 1558 | func cT (cR,cS) = if ((cS >= cO)) | |
1532 | 1559 | then cR | |
1533 | 1560 | else throw("List size exceeds 5") | |
1534 | 1561 | ||
1535 | 1562 | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
1536 | 1563 | } | |
1537 | - | let | |
1538 | - | let | |
1539 | - | let | |
1540 | - | let | |
1541 | - | let | |
1542 | - | let | |
1543 | - | let av = calculateAssetId( | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | let | |
1564 | + | let fY = cW._3 | |
1565 | + | let eI = valueOrErrorMessage(indexOf(aa, fY), ("Unknown continent: " + fY)) | |
1566 | + | let eh = eG(ez(toBigInt(fV)), eI) | |
1567 | + | let fX = valueOrElse(getInteger(cm()), (cl + 1)) | |
1568 | + | let hU = toString(fX) | |
1569 | + | let fZ = Issue(cE(hU, hE), makeString([hU, hE, eh, fY], "_"), 1, 0, false) | |
1570 | + | let av = calculateAssetId(fZ) | |
1571 | + | let hV = toBase58String(av) | |
1572 | + | let gv = makeString(cX((hH > 0), split(fy[ar], "_"), hH), "_") | |
1573 | + | let hW = bN(b) | |
1574 | + | let hX = valueOrElse(getInteger(hW), 0) | |
1548 | 1575 | $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0)) | |
1549 | - | then StringEntry( | |
1550 | - | else DeleteEntry( | |
1576 | + | then StringEntry(hR, makeString_11C(cW._7, "_")) | |
1577 | + | else DeleteEntry(hR))) :+ IntegerEntry(hW, if ((cW._8 > hX)) | |
1551 | 1578 | then 0 | |
1552 | - | else ( | |
1553 | - | } | |
1554 | - | ||
1555 | - | ||
1556 | - | func | |
1557 | - | ||
1558 | - | ||
1559 | - | func | |
1560 | - | let | |
1579 | + | else (hX - cW._8))) :+ IntegerEntry(cm(), (fX + 1))) :+ fZ) :+ StringEntry(cn(hU), hV)) :+ StringEntry(au(hV), b)) :+ StringEntry(ct(hU), b)) :+ IntegerEntry(az(R, hV), cW._2)) :+ IntegerEntry(cs(R, hV, b), cW._2)) :+ IntegerEntry(ay(hV), O)) :+ IntegerEntry(cr(hV, b), O)) :+ StringEntry(eN, makeString([fy[ap], cW._4, gv, fy[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fY, "L", hV], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hV) | |
1580 | + | } | |
1581 | + | ||
1582 | + | ||
1583 | + | func hY (b,hG,fV) = hD("M", 3, "SSSS", b, hG, fV, 0) | |
1584 | + | ||
1585 | + | ||
1586 | + | func hZ (b,hG,fV,cY,hc) = { | |
1587 | + | let hf = (cc * 4) | |
1561 | 1588 | if (if (!(cY)) | |
1562 | - | then ( | |
1589 | + | then (hc != hf) | |
1563 | 1590 | else false) | |
1564 | - | then throw(("Payment attached should be " + toString( | |
1565 | - | else | |
1566 | - | } | |
1567 | - | ||
1568 | - | ||
1569 | - | func | |
1570 | - | let | |
1591 | + | then throw(("Payment attached should be " + toString(hf))) | |
1592 | + | else hD("L", 4, "SMM", b, hG, fV, (be * 4)) | |
1593 | + | } | |
1594 | + | ||
1595 | + | ||
1596 | + | func ia (b,hG,fV,cY,hc) = { | |
1597 | + | let hf = (cc * 47) | |
1571 | 1598 | if (if (!(cY)) | |
1572 | - | then ( | |
1599 | + | then (hc != hf) | |
1573 | 1600 | else false) | |
1574 | - | then throw(("Payment attached should be " + toString( | |
1575 | - | else | |
1576 | - | } | |
1577 | - | ||
1578 | - | ||
1579 | - | func | |
1580 | - | let | |
1601 | + | then throw(("Payment attached should be " + toString(hf))) | |
1602 | + | else hD("XL", 5, "SSSML", b, hG, fV, (be * 47)) | |
1603 | + | } | |
1604 | + | ||
1605 | + | ||
1606 | + | func ib (b,hG,fV,cY,hc) = { | |
1607 | + | let hf = (cc * 54) | |
1581 | 1608 | if (if (!(cY)) | |
1582 | - | then ( | |
1609 | + | then (hc != hf) | |
1583 | 1610 | else false) | |
1584 | - | then throw(("Payment attached should be " + toString( | |
1585 | - | else | |
1586 | - | } | |
1587 | - | ||
1588 | - | ||
1589 | - | func | |
1590 | - | let | |
1591 | - | let bc = size( | |
1611 | + | then throw(("Payment attached should be " + toString(hf))) | |
1612 | + | else hD("XXL", 6, "LXL", b, hG, fV, (be * 54)) | |
1613 | + | } | |
1614 | + | ||
1615 | + | ||
1616 | + | func ic (cY,b,hc,hG,fV) = { | |
1617 | + | let id = { | |
1618 | + | let bc = size(hG) | |
1592 | 1619 | if ((4 == bc)) | |
1593 | - | then | |
1620 | + | then hY(b, hG, fV) | |
1594 | 1621 | else if ((3 == bc)) | |
1595 | - | then | |
1622 | + | then hZ(b, hG, fV, cY, hc) | |
1596 | 1623 | else if ((5 == bc)) | |
1597 | - | then | |
1624 | + | then ia(b, hG, fV, cY, hc) | |
1598 | 1625 | else if ((2 == bc)) | |
1599 | - | then | |
1626 | + | then ib(b, hG, fV, cY, hc) | |
1600 | 1627 | else throw("Unknown merge") | |
1601 | 1628 | } | |
1602 | - | | |
1603 | - | } | |
1604 | - | ||
1605 | - | ||
1606 | - | func | |
1629 | + | id | |
1630 | + | } | |
1631 | + | ||
1632 | + | ||
1633 | + | func ie (ee) = if (if ((ee.originCaller != bC)) | |
1607 | 1634 | then valueOrElse(getBoolean(aR()), false) | |
1608 | 1635 | else false) | |
1609 | 1636 | then throw("Contracts are under maintenance") | |
1610 | - | else StringEntry(at(toString( | |
1611 | - | ||
1612 | - | ||
1613 | - | @Callable( | |
1614 | - | func constructorV1 ( | |
1637 | + | else StringEntry(at(toString(ee.originCaller)), toBase58String(ee.transactionId)) | |
1638 | + | ||
1639 | + | ||
1640 | + | @Callable(ee) | |
1641 | + | func constructorV1 (if) = if ((ee.caller != this)) | |
1615 | 1642 | then throw("Permission denied") | |
1616 | - | else [StringEntry(bw(), | |
1617 | - | ||
1618 | - | ||
1619 | - | ||
1620 | - | @Callable( | |
1621 | - | func setBlocked ( | |
1643 | + | else [StringEntry(bw(), if)] | |
1644 | + | ||
1645 | + | ||
1646 | + | ||
1647 | + | @Callable(ee) | |
1648 | + | func setBlocked (ig) = if ((ee.caller != this)) | |
1622 | 1649 | then throw("permission denied") | |
1623 | - | else [BooleanEntry(aR(), | |
1624 | - | ||
1625 | - | ||
1626 | - | ||
1627 | - | @Callable( | |
1650 | + | else [BooleanEntry(aR(), ig)] | |
1651 | + | ||
1652 | + | ||
1653 | + | ||
1654 | + | @Callable(ee) | |
1628 | 1655 | func stakeLand () = { | |
1629 | - | let | |
1630 | - | if ((size( | |
1656 | + | let ih = ie(ee) | |
1657 | + | if ((size(ee.payments) != 1)) | |
1631 | 1658 | then throw("Exactly one payment required") | |
1632 | 1659 | else { | |
1633 | - | let | |
1634 | - | let av = value( | |
1635 | - | let bp = toString( | |
1636 | - | if (( | |
1660 | + | let ii = value(ee.payments[0]) | |
1661 | + | let av = value(ii.assetId) | |
1662 | + | let bp = toString(ee.caller) | |
1663 | + | if ((ii.amount != 1)) | |
1637 | 1664 | then throw((("NFT " + P) + " token should be attached as payment")) | |
1638 | 1665 | else { | |
1639 | - | let | |
1640 | - | if (( | |
1666 | + | let gJ = value(assetInfo(av)) | |
1667 | + | if ((gJ.issuer != this)) | |
1641 | 1668 | then throw("Unknown issuer of token") | |
1642 | - | else if (!(contains( | |
1669 | + | else if (!(contains(gJ.name, P))) | |
1643 | 1670 | then throw((("Only NFT " + P) + " tokens are accepted")) | |
1644 | 1671 | else { | |
1645 | - | let | |
1646 | - | let co = if (contains( | |
1647 | - | then dropRight( | |
1648 | - | else if (contains( | |
1649 | - | then dropRight( | |
1650 | - | else dropRight( | |
1672 | + | let ij = drop(gJ.name, 4) | |
1673 | + | let co = if (contains(ij, "XXL")) | |
1674 | + | then dropRight(ij, 3) | |
1675 | + | else if (contains(ij, "XL")) | |
1676 | + | then dropRight(ij, 2) | |
1677 | + | else dropRight(ij, 1) | |
1651 | 1678 | if (!(isDefined(parseInt(co)))) | |
1652 | - | then throw(("Cannot parse land number from " + | |
1679 | + | then throw(("Cannot parse land number from " + gJ.name)) | |
1653 | 1680 | else { | |
1654 | 1681 | let aF = toBase58String(av) | |
1655 | - | let | |
1656 | - | if (isDefined(getInteger( | |
1657 | - | then throw((("NFT " + | |
1682 | + | let gK = ax(aF) | |
1683 | + | if (isDefined(getInteger(gK))) | |
1684 | + | then throw((("NFT " + gJ.name) + " is already staked")) | |
1658 | 1685 | else { | |
1659 | - | let | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let cV = | |
1663 | - | let | |
1664 | - | let | |
1665 | - | let | |
1666 | - | let | |
1667 | - | then split_51C(value( | |
1686 | + | let gN = split(gJ.description, "_") | |
1687 | + | let ea = eg(gN[bJ]) | |
1688 | + | let gy = bT(gN[bI]) | |
1689 | + | let cV = ef(ea, (gy / bj), 1) | |
1690 | + | let gz = valueOrElse(getInteger(az(R, aF)), 0) | |
1691 | + | let hR = bM(bp) | |
1692 | + | let hS = getString(hR) | |
1693 | + | let hN = if (isDefined(hS)) | |
1694 | + | then split_51C(value(hS), "_") | |
1668 | 1695 | else nil | |
1669 | - | if (containsElement( | |
1696 | + | if (containsElement(hN, aF)) | |
1670 | 1697 | then throw(("Your staked lands already contain " + aF)) | |
1671 | 1698 | else { | |
1672 | - | let | |
1673 | - | let | |
1674 | - | let | |
1675 | - | let | |
1676 | - | $Tuple2([IntegerEntry( | |
1699 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
1700 | + | let hW = bN(bp) | |
1701 | + | let ik = valueOrElse(getInteger(hW), 0) | |
1702 | + | let il = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil)) | |
1703 | + | $Tuple2([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hR, makeString_11C((hN :+ aF), "_")), IntegerEntry(hW, (ik + gy)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gz), IntegerEntry(cr(aF, bp), fh), StringEntry(bL(), cV), ih], il) | |
1677 | 1704 | } | |
1678 | 1705 | } | |
1679 | 1706 | } | |
1680 | 1707 | } | |
1681 | 1708 | } | |
1682 | 1709 | } | |
1683 | 1710 | } | |
1684 | 1711 | ||
1685 | 1712 | ||
1686 | 1713 | ||
1687 | - | @Callable( | |
1688 | - | func unstakeLand ( | |
1689 | - | let | |
1690 | - | if ((size( | |
1714 | + | @Callable(ee) | |
1715 | + | func unstakeLand (gE) = { | |
1716 | + | let ih = ie(ee) | |
1717 | + | if ((size(ee.payments) != 0)) | |
1691 | 1718 | then throw("No payments required") | |
1692 | 1719 | else { | |
1693 | - | let b = toString( | |
1694 | - | let | |
1695 | - | let aF = | |
1696 | - | let | |
1697 | - | let | |
1698 | - | let | |
1699 | - | let cV = | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let bB = indexOf( | |
1720 | + | let b = toString(ee.caller) | |
1721 | + | let dI = gC(b, cy, gE) | |
1722 | + | let aF = dI._2 | |
1723 | + | let hR = bM(b) | |
1724 | + | let ea = eg(dI._3[bJ]) | |
1725 | + | let gy = bT(dI._3[bI]) | |
1726 | + | let cV = ef(ea, (gy / bj), -1) | |
1727 | + | let hh = ha(b, aF, gy, cy) | |
1728 | + | let hN = split_51C(valueOrElse(getString(hR), ""), "_") | |
1729 | + | let bB = indexOf(hN, aF) | |
1703 | 1730 | if (!(isDefined(bB))) | |
1704 | 1731 | then throw(("Your staked lands don't contain " + aF)) | |
1705 | 1732 | else { | |
1706 | - | let | |
1707 | - | let | |
1708 | - | if (( | |
1709 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1733 | + | let im = lastBlock.timestamp | |
1734 | + | let in = valueOrElse(getInteger(bF, aS(b)), 0) | |
1735 | + | if ((in >= im)) | |
1736 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(in))) | |
1710 | 1737 | else { | |
1711 | - | let | |
1712 | - | if (( | |
1713 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1738 | + | let io = (valueOrElse(getInteger(bG, a(b)), 0) + bf) | |
1739 | + | if ((io > im)) | |
1740 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(io))) | |
1714 | 1741 | else { | |
1715 | - | let | |
1716 | - | let | |
1717 | - | let | |
1742 | + | let hW = bN(b) | |
1743 | + | let hX = valueOrElse(getInteger(hW), 0) | |
1744 | + | let ip = if ((gy > hX)) | |
1718 | 1745 | then 0 | |
1719 | - | else ( | |
1720 | - | let | |
1721 | - | $Tuple2([ScriptTransfer( | |
1722 | - | then StringEntry( | |
1723 | - | else DeleteEntry( | |
1746 | + | else (hX - gy) | |
1747 | + | let il = bR(invoke(bG, "onStakeUnstakeLand", [b], nil)) | |
1748 | + | $Tuple2([ScriptTransfer(ee.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hh._2, makeString(hh._3, ":")), if ((size(hN) > 1)) | |
1749 | + | then StringEntry(hR, makeString_11C(removeByIndex(hN, value(bB)), "_")) | |
1750 | + | else DeleteEntry(hR), IntegerEntry(hW, ip), ih], il) | |
1724 | 1751 | } | |
1725 | 1752 | } | |
1726 | 1753 | } | |
1727 | 1754 | } | |
1728 | 1755 | } | |
1729 | 1756 | ||
1730 | 1757 | ||
1731 | 1758 | ||
1732 | - | @Callable( | |
1759 | + | @Callable(ee) | |
1733 | 1760 | func stakeDuck () = { | |
1734 | - | let | |
1735 | - | if ((size( | |
1761 | + | let ih = ie(ee) | |
1762 | + | if ((size(ee.payments) != 1)) | |
1736 | 1763 | then throw("Exactly one payment required") | |
1737 | 1764 | else { | |
1738 | - | let | |
1739 | - | let av = value( | |
1740 | - | let bp = toString( | |
1741 | - | if (( | |
1765 | + | let ii = value(ee.payments[0]) | |
1766 | + | let av = value(ii.assetId) | |
1767 | + | let bp = toString(ee.caller) | |
1768 | + | if ((ii.amount != 1)) | |
1742 | 1769 | then throw((("NFT " + Q) + " token should be attached as payment")) | |
1743 | 1770 | else { | |
1744 | - | let | |
1745 | - | if (if (( | |
1746 | - | then ( | |
1771 | + | let gJ = value(assetInfo(av)) | |
1772 | + | if (if ((gJ.issuer != bV)) | |
1773 | + | then (gJ.issuer != bW) | |
1747 | 1774 | else false) | |
1748 | 1775 | then throw((("Unknown issuer of " + Q) + " token")) | |
1749 | - | else if (!(contains( | |
1776 | + | else if (!(contains(gJ.name, Q))) | |
1750 | 1777 | then throw((("Only NFT " + Q) + " tokens are accepted")) | |
1751 | 1778 | else { | |
1752 | - | let | |
1753 | - | let | |
1754 | - | if (isDefined(getInteger( | |
1755 | - | then throw((("NFT " + | |
1779 | + | let iq = toBase58String(av) | |
1780 | + | let gK = ax(iq) | |
1781 | + | if (isDefined(getInteger(gK))) | |
1782 | + | then throw((("NFT " + gJ.name) + " is already staked")) | |
1756 | 1783 | else if (isDefined(getString(aN(bp)))) | |
1757 | - | then throw(("You already staked one duck: " + | |
1784 | + | then throw(("You already staked one duck: " + gJ.name)) | |
1758 | 1785 | else { | |
1759 | - | let | |
1760 | - | let | |
1761 | - | let | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | let | |
1766 | - | ([IntegerEntry( | |
1786 | + | let ir = aP(iq) | |
1787 | + | let is = getString(ir) | |
1788 | + | let eN = aO(iq) | |
1789 | + | let it = getString(eN) | |
1790 | + | let gn = aQ(iq) | |
1791 | + | let go = J(valueOrElse(getInteger(r(iq)), 0)) | |
1792 | + | let iu = valueOrElse(getInteger(gn), go) | |
1793 | + | ([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iq), bp), StringEntry(aN(bp), iq)] ++ (if (isDefined(is)) | |
1767 | 1794 | then nil | |
1768 | - | else ([StringEntry( | |
1795 | + | else ([StringEntry(ir, W)] ++ (if (isDefined(it)) | |
1769 | 1796 | then nil | |
1770 | - | else (([StringEntry( | |
1797 | + | else (([StringEntry(eN, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gn, iu)) :+ ih))))) | |
1771 | 1798 | } | |
1772 | 1799 | } | |
1773 | 1800 | } | |
1774 | 1801 | } | |
1775 | 1802 | } | |
1776 | 1803 | ||
1777 | 1804 | ||
1778 | 1805 | ||
1779 | - | @Callable( | |
1780 | - | func unstakeDuck ( | |
1781 | - | let | |
1782 | - | if ((size( | |
1806 | + | @Callable(ee) | |
1807 | + | func unstakeDuck (iq) = { | |
1808 | + | let ih = ie(ee) | |
1809 | + | if ((size(ee.payments) != 0)) | |
1783 | 1810 | then throw("No payments required") | |
1784 | 1811 | else { | |
1785 | - | let av = fromBase58String( | |
1786 | - | let bp = toString( | |
1787 | - | let | |
1788 | - | let | |
1789 | - | if (!(isDefined(getInteger( | |
1790 | - | then throw((("NFT " + | |
1812 | + | let av = fromBase58String(iq) | |
1813 | + | let bp = toString(ee.caller) | |
1814 | + | let gJ = value(assetInfo(av)) | |
1815 | + | let gK = ax(toBase58String(av)) | |
1816 | + | if (!(isDefined(getInteger(gK)))) | |
1817 | + | then throw((("NFT " + gJ.name) + " is not staked")) | |
1791 | 1818 | else if (!(isDefined(getString(aN(bp))))) | |
1792 | - | then throw((("The duck " + | |
1819 | + | then throw((("The duck " + gJ.name) + " is not staked")) | |
1793 | 1820 | else { | |
1794 | - | let | |
1795 | - | if (( | |
1821 | + | let gM = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gJ.name) + " is orphaned")) | |
1822 | + | if ((gM != bp)) | |
1796 | 1823 | then throw("Staked NFT is not yours") | |
1797 | 1824 | else { | |
1798 | - | let | |
1799 | - | let | |
1800 | - | let | |
1801 | - | if (( | |
1802 | - | then throw((("Please heal your duck to " + toString( | |
1803 | - | else [ScriptTransfer( | |
1825 | + | let gn = aQ(iq) | |
1826 | + | let go = J(valueOrElse(getInteger(r(iq)), 0)) | |
1827 | + | let iv = valueOrElse(getInteger(gn), go) | |
1828 | + | if ((go > iv)) | |
1829 | + | then throw((("Please heal your duck to " + toString(go)) + "hp before unstaking")) | |
1830 | + | else [ScriptTransfer(ee.caller, 1, av), DeleteEntry(gK), DeleteEntry(gn), DeleteEntry(aP(iq)), DeleteEntry(aM(iq)), DeleteEntry(aB(Q, iq, bp)), DeleteEntry(aN(bp)), ih] | |
1804 | 1831 | } | |
1805 | 1832 | } | |
1806 | 1833 | } | |
1807 | 1834 | } | |
1808 | 1835 | ||
1809 | 1836 | ||
1810 | 1837 | ||
1811 | - | @Callable( | |
1812 | - | func claimRes ( | |
1813 | - | let | |
1814 | - | if ((size( | |
1838 | + | @Callable(ee) | |
1839 | + | func claimRes (fu,iw) = { | |
1840 | + | let ih = ie(ee) | |
1841 | + | if ((size(ee.payments) != 0)) | |
1815 | 1842 | then throw("No payments required") | |
1816 | 1843 | else { | |
1817 | - | let b = toString( | |
1818 | - | let dd = | |
1844 | + | let b = toString(ee.originCaller) | |
1845 | + | let dd = gO(b, fu, cy, iw) | |
1819 | 1846 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1820 | - | $Tuple2(((((dd._1 ++ | |
1821 | - | } | |
1822 | - | } | |
1823 | - | ||
1824 | - | ||
1825 | - | ||
1826 | - | @Callable( | |
1827 | - | func claimResToWH ( | |
1828 | - | let | |
1829 | - | if ((size( | |
1847 | + | $Tuple2(((((dd._1 ++ hn(p, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._3[aq]) | |
1848 | + | } | |
1849 | + | } | |
1850 | + | ||
1851 | + | ||
1852 | + | ||
1853 | + | @Callable(ee) | |
1854 | + | func claimResToWH (fu,iw) = { | |
1855 | + | let ih = ie(ee) | |
1856 | + | if ((size(ee.payments) != 0)) | |
1830 | 1857 | then throw("No payments required") | |
1831 | 1858 | else { | |
1832 | - | let b = toString( | |
1833 | - | let dd = | |
1834 | - | $Tuple2(((((dd._1 ++ | |
1835 | - | } | |
1836 | - | } | |
1837 | - | ||
1838 | - | ||
1839 | - | ||
1840 | - | @Callable( | |
1841 | - | func flight ( | |
1842 | - | let | |
1843 | - | if ((size( | |
1859 | + | let b = toString(ee.originCaller) | |
1860 | + | let dd = gO(b, fu, cx, iw) | |
1861 | + | $Tuple2(((((dd._1 ++ ht(b, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._5[ah]) | |
1862 | + | } | |
1863 | + | } | |
1864 | + | ||
1865 | + | ||
1866 | + | ||
1867 | + | @Callable(ee) | |
1868 | + | func flight (gc,gd) = { | |
1869 | + | let ih = ie(ee) | |
1870 | + | if ((size(ee.payments) != 0)) | |
1844 | 1871 | then throw("No payments required") | |
1845 | 1872 | else { | |
1846 | - | let aT = toString( | |
1847 | - | let | |
1848 | - | let p = | |
1849 | - | let | |
1850 | - | let | |
1851 | - | if (( | |
1873 | + | let aT = toString(ee.caller) | |
1874 | + | let eJ = gb(aT, gc, gd) | |
1875 | + | let p = eJ._2 | |
1876 | + | let ir = aP(p) | |
1877 | + | let gG = valueOrElse(getString(ir), W) | |
1878 | + | if ((eJ._4 == gG)) | |
1852 | 1879 | then throw("You can't fly to the same location") | |
1853 | 1880 | else { | |
1854 | - | let | |
1855 | - | let | |
1856 | - | let dt = de( | |
1857 | - | $Tuple2(([StringEntry( | |
1858 | - | then | |
1859 | - | else | |
1881 | + | let eN = aO(p) | |
1882 | + | let fy = eM(eN) | |
1883 | + | let dt = de(fy[as], eJ._5) | |
1884 | + | $Tuple2(([StringEntry(ir, if ((eJ._1 > 0)) | |
1885 | + | then eJ._4 | |
1886 | + | else gG), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":")), IntegerEntry(aQ(p), eJ._1), ih] ++ hn(p, if ((eJ._1 > 0)) | |
1860 | 1887 | then y | |
1861 | - | else z)._1), | |
1888 | + | else z)._1), eJ._3) | |
1862 | 1889 | } | |
1863 | 1890 | } | |
1864 | 1891 | } | |
1865 | 1892 | ||
1866 | 1893 | ||
1867 | 1894 | ||
1868 | - | @Callable( | |
1869 | - | func heal ( | |
1870 | - | let | |
1871 | - | if (if (if ((0 > | |
1895 | + | @Callable(ee) | |
1896 | + | func heal (ix,iy,iz) = { | |
1897 | + | let ih = ie(ee) | |
1898 | + | if (if (if ((0 > ix)) | |
1872 | 1899 | then true | |
1873 | - | else (0 > | |
1900 | + | else (0 > iy)) | |
1874 | 1901 | then true | |
1875 | - | else (0 > | |
1902 | + | else (0 > iz)) | |
1876 | 1903 | then throw("Quantity cannot be negative") | |
1877 | 1904 | else { | |
1878 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1879 | - | let | |
1880 | - | let | |
1881 | - | let | |
1882 | - | let | |
1883 | - | if (( | |
1884 | - | then throw((("HP should be < " + toString( | |
1905 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
1906 | + | let iA = [ix, iy, iz] | |
1907 | + | let gn = aQ(p) | |
1908 | + | let go = J(valueOrElse(getInteger(r(p)), 0)) | |
1909 | + | let iB = valueOrElse(getInteger(gn), go) | |
1910 | + | if ((iB >= go)) | |
1911 | + | then throw((("HP should be < " + toString(go)) + " to heal")) | |
1885 | 1912 | else { | |
1886 | - | let | |
1887 | - | let | |
1888 | - | let | |
1913 | + | let eN = aO(p) | |
1914 | + | let fy = eM(eN) | |
1915 | + | let iC = if ((fy[as] == "")) | |
1889 | 1916 | then nil | |
1890 | - | else split( | |
1891 | - | func | |
1917 | + | else split(fy[as], "_") | |
1918 | + | func iD (cL,iE) = { | |
1892 | 1919 | let bS = cL._2 | |
1893 | - | let | |
1894 | - | then parseIntValue( | |
1920 | + | let eA = if ((size(iC) > bS)) | |
1921 | + | then parseIntValue(iC[bS]) | |
1895 | 1922 | else 0 | |
1896 | 1923 | if ((3 > bS)) | |
1897 | 1924 | then { | |
1898 | - | let | |
1899 | - | if (( | |
1900 | - | then throw(((("You have only " + toString( | |
1901 | - | else $Tuple3((cL._1 :+ toString(( | |
1925 | + | let iF = iA[bS] | |
1926 | + | if ((iF > eA)) | |
1927 | + | then throw(((("You have only " + toString(eA)) + " of ") + Z[bS])) | |
1928 | + | else $Tuple3((cL._1 :+ toString((eA - iF))), (bS + 1), (cL._3 + (bY[bS] * iF))) | |
1902 | 1929 | } | |
1903 | - | else $Tuple3((cL._1 :+ toString( | |
1930 | + | else $Tuple3((cL._1 :+ toString(eA)), (bS + 1), cL._3) | |
1904 | 1931 | } | |
1905 | 1932 | ||
1906 | 1933 | let dd = { | |
1907 | 1934 | let cN = ac | |
1908 | 1935 | let cO = size(cN) | |
1909 | 1936 | let cP = $Tuple3(nil, 0, 0) | |
1910 | 1937 | func cQ (cR,cS) = if ((cS >= cO)) | |
1911 | 1938 | then cR | |
1912 | - | else | |
1939 | + | else iD(cR, cN[cS]) | |
1913 | 1940 | ||
1914 | 1941 | func cT (cR,cS) = if ((cS >= cO)) | |
1915 | 1942 | then cR | |
1916 | 1943 | else throw("List size exceeds 50") | |
1917 | 1944 | ||
1918 | 1945 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
1919 | 1946 | } | |
1920 | - | let | |
1921 | - | $Tuple2(([IntegerEntry( | |
1947 | + | let iG = min([go, (iB + dd._3)]) | |
1948 | + | $Tuple2(([IntegerEntry(gn, iG), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dd._1, "_")], ":")), ih] ++ hn(p, (G * ((ix + iy) + iz)))._1), iG) | |
1922 | 1949 | } | |
1923 | 1950 | } | |
1924 | 1951 | } | |
1925 | 1952 | ||
1926 | 1953 | ||
1927 | 1954 | ||
1928 | - | @Callable( | |
1955 | + | @Callable(ee) | |
1929 | 1956 | func healES () = { | |
1930 | - | let | |
1931 | - | if ((size( | |
1957 | + | let ih = ie(ee) | |
1958 | + | if ((size(ee.payments) != 1)) | |
1932 | 1959 | then throw("Exactly one payment required") | |
1933 | 1960 | else { | |
1934 | - | let | |
1935 | - | if (( | |
1961 | + | let ii = value(ee.payments[0]) | |
1962 | + | if ((ii.assetId != bb)) | |
1936 | 1963 | then throw("Allowed USDT payment only!") | |
1937 | 1964 | else { | |
1938 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | if (( | |
1965 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
1966 | + | let gn = aQ(p) | |
1967 | + | let go = J(valueOrElse(getInteger(r(p)), 0)) | |
1968 | + | let iB = valueOrElse(getInteger(gn), go) | |
1969 | + | if ((iB > 0)) | |
1943 | 1970 | then throw("HP should be 0 to call Emergency Service") | |
1944 | 1971 | else { | |
1945 | - | let | |
1946 | - | let | |
1947 | - | let | |
1972 | + | let eN = aO(p) | |
1973 | + | let fy = eM(eN) | |
1974 | + | let iC = if ((fy[as] == "")) | |
1948 | 1975 | then nil | |
1949 | - | else split( | |
1950 | - | let | |
1951 | - | then parseIntValue( | |
1976 | + | else split(fy[as], "_") | |
1977 | + | let iH = if ((size(iC) > 0)) | |
1978 | + | then parseIntValue(iC[0]) | |
1952 | 1979 | else 0 | |
1953 | - | let | |
1954 | - | then parseIntValue( | |
1980 | + | let iI = if ((size(iC) > 1)) | |
1981 | + | then parseIntValue(iC[1]) | |
1955 | 1982 | else 0 | |
1956 | - | let | |
1957 | - | then parseIntValue( | |
1983 | + | let iJ = if ((size(iC) > 2)) | |
1984 | + | then parseIntValue(iC[2]) | |
1958 | 1985 | else 0 | |
1959 | - | if (if (if (( | |
1986 | + | if (if (if ((iH > 0)) | |
1960 | 1987 | then true | |
1961 | - | else ( | |
1988 | + | else (iI > 0)) | |
1962 | 1989 | then true | |
1963 | - | else ( | |
1990 | + | else (iJ > 0)) | |
1964 | 1991 | then throw("You have to use own Medical Kit") | |
1965 | 1992 | else { | |
1966 | - | let | |
1967 | - | let | |
1968 | - | then split(value( | |
1993 | + | let iK = getString(bE, aU()) | |
1994 | + | let iL = if (isDefined(iK)) | |
1995 | + | then split(value(iK), "_") | |
1969 | 1996 | else nil | |
1970 | - | let | |
1971 | - | then parseIntValue( | |
1997 | + | let iM = if ((size(iL) > 0)) | |
1998 | + | then parseIntValue(iL[0]) | |
1972 | 1999 | else 0 | |
1973 | - | if ((0 >= | |
2000 | + | if ((0 >= iM)) | |
1974 | 2001 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1975 | 2002 | else { | |
1976 | - | let | |
1977 | - | let | |
2003 | + | let iG = (iB + bY[0]) | |
2004 | + | let iN = makeString([toString((iM - 1)), removeByIndex(iL, 0)], "_") | |
1978 | 2005 | let aY = split(ac[0], "_") | |
1979 | - | let | |
1980 | - | let | |
1981 | - | if (( | |
1982 | - | then throw(("Payment attached should be " + toString( | |
2006 | + | let iO = aX(aY) | |
2007 | + | let iP = fraction((iO * Y), X, (10 * af)) | |
2008 | + | if ((ii.amount != iP)) | |
2009 | + | then throw(("Payment attached should be " + toString(iP))) | |
1983 | 2010 | else { | |
1984 | - | let dd = bO(invoke(bE, "updateEsStorage", [ | |
1985 | - | $Tuple2(([IntegerEntry( | |
2011 | + | let dd = bO(invoke(bE, "updateEsStorage", [iN], [AttachedPayment(bb, iP)])) | |
2012 | + | $Tuple2(([IntegerEntry(gn, iG), ih] ++ hn(p, A)._1), dd) | |
1986 | 2013 | } | |
1987 | 2014 | } | |
1988 | 2015 | } | |
1989 | 2016 | } | |
1990 | 2017 | } | |
1991 | 2018 | } | |
1992 | 2019 | } | |
1993 | 2020 | ||
1994 | 2021 | ||
1995 | 2022 | ||
1996 | - | @Callable( | |
1997 | - | func updateBackpack (p, | |
2023 | + | @Callable(ee) | |
2024 | + | func updateBackpack (p,iQ) = if ((ee.caller != bE)) | |
1998 | 2025 | then throw("permission denied") | |
1999 | - | else $Tuple2([StringEntry(aO(p), | |
2000 | - | ||
2001 | - | ||
2002 | - | ||
2003 | - | @Callable( | |
2026 | + | else $Tuple2([StringEntry(aO(p), iQ)], iQ) | |
2027 | + | ||
2028 | + | ||
2029 | + | ||
2030 | + | @Callable(ee) | |
2004 | 2031 | func buySLand () = { | |
2005 | - | let | |
2006 | - | if ((size( | |
2032 | + | let ih = ie(ee) | |
2033 | + | if ((size(ee.payments) != 1)) | |
2007 | 2034 | then throw("Exactly one payment required") | |
2008 | 2035 | else { | |
2009 | - | let | |
2010 | - | if (( | |
2036 | + | let ii = value(ee.payments[0]) | |
2037 | + | if ((ii.assetId != bb)) | |
2011 | 2038 | then throw("Allowed USDT payment only!") | |
2012 | - | else if (( | |
2039 | + | else if ((ii.amount != ce)) | |
2013 | 2040 | then throw(("Payment attached should be " + toString(ce))) | |
2014 | 2041 | else { | |
2015 | - | let dd = | |
2016 | - | $Tuple2((((dd._1 :+ ScriptTransfer(bE, | |
2042 | + | let dd = fT(ee.caller, ee.transactionId) | |
2043 | + | $Tuple2((((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) ++ ht(toString(ee.caller), C)._1) :+ ih), dd._2._1) | |
2017 | 2044 | } | |
2018 | 2045 | } | |
2019 | 2046 | } | |
2020 | 2047 | ||
2021 | 2048 | ||
2022 | 2049 | ||
2023 | - | @Callable( | |
2024 | - | func expedition ( | |
2025 | - | let | |
2026 | - | if ((size( | |
2050 | + | @Callable(ee) | |
2051 | + | func expedition (gc,gd) = { | |
2052 | + | let ih = ie(ee) | |
2053 | + | if ((size(ee.payments) != 0)) | |
2027 | 2054 | then throw("No payments required") | |
2028 | 2055 | else { | |
2029 | - | let dd = | |
2030 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2031 | - | $Tuple2(((dd._1 ++ | |
2032 | - | } | |
2033 | - | } | |
2034 | - | ||
2035 | - | ||
2036 | - | ||
2037 | - | @Callable( | |
2056 | + | let dd = gt(ee.caller, ee.transactionId, gc, gd) | |
2057 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
2058 | + | $Tuple2(((dd._1 ++ hn(p, C)._1) :+ ih), $Tuple2(dd._2, dd._3)) | |
2059 | + | } | |
2060 | + | } | |
2061 | + | ||
2062 | + | ||
2063 | + | ||
2064 | + | @Callable(ee) | |
2038 | 2065 | func upgradeInfra (aF) = { | |
2039 | - | let | |
2040 | - | if ((size( | |
2066 | + | let ih = ie(ee) | |
2067 | + | if ((size(ee.payments) != 0)) | |
2041 | 2068 | then throw("No payments required") | |
2042 | 2069 | else { | |
2043 | - | let dd = | |
2044 | - | let p = valueOrErrorMessage(getString(aN(toString( | |
2045 | - | $Tuple2(((dd._1 :+ | |
2046 | - | } | |
2047 | - | } | |
2048 | - | ||
2049 | - | ||
2050 | - | ||
2051 | - | @Callable( | |
2052 | - | func upgradeInfraUsdt (aF) = if (( | |
2070 | + | let dd = hb(true, ee.caller, 0, aF) | |
2071 | + | let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked") | |
2072 | + | $Tuple2(((dd._1 :+ ih) ++ hn(p, fraction(D, dd._3, bi))._1), dd._2) | |
2073 | + | } | |
2074 | + | } | |
2075 | + | ||
2076 | + | ||
2077 | + | ||
2078 | + | @Callable(ee) | |
2079 | + | func upgradeInfraUsdt (aF) = if ((ee.caller != this)) | |
2053 | 2080 | then throw("Permission denied") | |
2054 | 2081 | else { | |
2055 | - | let | |
2056 | - | if ((size( | |
2082 | + | let ih = ie(ee) | |
2083 | + | if ((size(ee.payments) != 1)) | |
2057 | 2084 | then throw("Exactly one payment required") | |
2058 | 2085 | else { | |
2059 | - | let | |
2060 | - | if (( | |
2086 | + | let ii = value(ee.payments[0]) | |
2087 | + | if ((ii.assetId != bb)) | |
2061 | 2088 | then throw("Allowed USDT payment only!") | |
2062 | 2089 | else { | |
2063 | - | let dd = | |
2064 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2090 | + | let dd = hb(false, ee.caller, ii.amount, aF) | |
2091 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2) | |
2065 | 2092 | } | |
2066 | 2093 | } | |
2067 | 2094 | } | |
2068 | 2095 | ||
2069 | 2096 | ||
2070 | 2097 | ||
2071 | - | @Callable( | |
2072 | - | func activateArtifact ( | |
2073 | - | let | |
2074 | - | if ((size( | |
2098 | + | @Callable(ee) | |
2099 | + | func activateArtifact (iR,iS) = { | |
2100 | + | let ih = ie(ee) | |
2101 | + | if ((size(ee.payments) != 0)) | |
2075 | 2102 | then throw("No payments required") | |
2076 | 2103 | else { | |
2077 | - | let b = toString( | |
2104 | + | let b = toString(ee.caller) | |
2078 | 2105 | let dd = { | |
2079 | - | let bc = | |
2106 | + | let bc = iR | |
2080 | 2107 | if (("PRESALE" == bc)) | |
2081 | - | then | |
2108 | + | then hB(b, iS) | |
2082 | 2109 | else if (("ONBOARD" == bc)) | |
2083 | - | then | |
2110 | + | then hu(b) | |
2084 | 2111 | else throw("Unknown artifact") | |
2085 | 2112 | } | |
2086 | - | (dd :+ | |
2087 | - | } | |
2088 | - | } | |
2089 | - | ||
2090 | - | ||
2091 | - | ||
2092 | - | @Callable( | |
2093 | - | func mergeLands ( | |
2094 | - | let | |
2095 | - | if ((size( | |
2113 | + | (dd :+ ih) | |
2114 | + | } | |
2115 | + | } | |
2116 | + | ||
2117 | + | ||
2118 | + | ||
2119 | + | @Callable(ee) | |
2120 | + | func mergeLands (hG) = { | |
2121 | + | let ih = ie(ee) | |
2122 | + | if ((size(ee.payments) != 0)) | |
2096 | 2123 | then throw("No payments required") | |
2097 | 2124 | else { | |
2098 | - | let dd = | |
2099 | - | $Tuple2(((dd._1 :+ | |
2100 | - | } | |
2101 | - | } | |
2102 | - | ||
2103 | - | ||
2104 | - | ||
2105 | - | @Callable( | |
2106 | - | func mergeLandsUsdt ( | |
2107 | - | let | |
2108 | - | if ((size( | |
2125 | + | let dd = ic(true, toString(ee.caller), 0, hG, ee.transactionId) | |
2126 | + | $Tuple2(((dd._1 :+ ih) ++ ht(toString(ee.caller), E)._1), dd._2) | |
2127 | + | } | |
2128 | + | } | |
2129 | + | ||
2130 | + | ||
2131 | + | ||
2132 | + | @Callable(ee) | |
2133 | + | func mergeLandsUsdt (hG) = { | |
2134 | + | let ih = ie(ee) | |
2135 | + | if ((size(ee.payments) != 1)) | |
2109 | 2136 | then throw("Exactly one payment required") | |
2110 | 2137 | else { | |
2111 | - | let | |
2112 | - | if (( | |
2138 | + | let ii = value(ee.payments[0]) | |
2139 | + | if ((ii.assetId != bb)) | |
2113 | 2140 | then throw("Allowed USDT payment only!") | |
2114 | 2141 | else { | |
2115 | - | let dd = | |
2116 | - | $Tuple2(((dd._1 :+ ScriptTransfer(bE, | |
2142 | + | let dd = ic(false, toString(ee.caller), ii.amount, hG, ee.transactionId) | |
2143 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2) | |
2117 | 2144 | } | |
2118 | 2145 | } | |
2119 | 2146 | } | |
2120 | 2147 | ||
2121 | 2148 | ||
2122 | 2149 | ||
2123 | - | @Callable( | |
2124 | - | func cargoExchange ( | |
2125 | - | let | |
2126 | - | if ((size( | |
2150 | + | @Callable(ee) | |
2151 | + | func cargoExchange (iT,aF) = { | |
2152 | + | let ih = ie(ee) | |
2153 | + | if ((size(ee.payments) != 0)) | |
2127 | 2154 | then throw("No payments required") | |
2128 | 2155 | else { | |
2129 | - | let | |
2130 | - | let b = toString( | |
2131 | - | let | |
2132 | - | let | |
2133 | - | if (!(isDefined(getInteger( | |
2134 | - | then throw(( | |
2156 | + | let fx = split_4C(iT, ":") | |
2157 | + | let b = toString(ee.originCaller) | |
2158 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2159 | + | let gK = ax(aF) | |
2160 | + | if (!(isDefined(getInteger(gK)))) | |
2161 | + | then throw((gJ.name + " is not staked")) | |
2135 | 2162 | else { | |
2136 | - | let | |
2137 | - | if (( | |
2163 | + | let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned")) | |
2164 | + | if ((gM != b)) | |
2138 | 2165 | then throw((P + " is not yours")) | |
2139 | 2166 | else { | |
2140 | - | let | |
2141 | - | let | |
2167 | + | let fg = (bT(split(gJ.description, "_")[bI]) / bj) | |
2168 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
2142 | 2169 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2143 | - | let | |
2144 | - | let | |
2145 | - | if (( | |
2146 | - | then throw((("Duck location type is " + | |
2147 | - | else if (( | |
2170 | + | let gG = valueOrElse(getString(aP(p)), W) | |
2171 | + | let gH = split(value(gG), "_") | |
2172 | + | if ((gH[aV] != "L")) | |
2173 | + | then throw((("Duck location type is " + gH[aV]) + ", but should be L")) | |
2174 | + | else if ((gH[aW] != aF)) | |
2148 | 2175 | then throw(("Duck should be on the land " + aF)) | |
2149 | 2176 | else { | |
2150 | - | let | |
2151 | - | let | |
2152 | - | let | |
2153 | - | let | |
2154 | - | let dd = | |
2155 | - | let | |
2156 | - | let | |
2157 | - | let | |
2158 | - | [StringEntry( | |
2177 | + | let ff = aE(aF) | |
2178 | + | let eS = fe(ff, fg, fh) | |
2179 | + | let eN = aO(p) | |
2180 | + | let fy = eM(eN) | |
2181 | + | let dd = fw(fx, eS, fy) | |
2182 | + | let fn = split(eS[ak], "_") | |
2183 | + | let gY = (parseIntValue(fn[am]) + dd._7) | |
2184 | + | let gZ = (parseIntValue(fn[an]) - dd._7) | |
2185 | + | [StringEntry(eN, makeString_2C([fy[ap], dd._4, dd._5, dd._6], ":")), StringEntry(ff, makeString_2C([eS[ag], dd._1, dd._2, dd._3, makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")], ":")), ih] | |
2159 | 2186 | } | |
2160 | 2187 | } | |
2161 | 2188 | } | |
2162 | 2189 | } | |
2163 | 2190 | } | |
2164 | 2191 | ||
2165 | 2192 | ||
2166 | 2193 | ||
2167 | - | @Callable( | |
2168 | - | func saveWarehouse ( | |
2194 | + | @Callable(ee) | |
2195 | + | func saveWarehouse (fj,aF) = if ((ee.caller != bE)) | |
2169 | 2196 | then throw("Access denied") | |
2170 | 2197 | else { | |
2171 | - | let | |
2172 | - | let | |
2173 | - | if ((size( | |
2198 | + | let ff = aE(aF) | |
2199 | + | let fk = split_4C(fj, ":") | |
2200 | + | if ((size(fk) != 5)) | |
2174 | 2201 | then throw("warehouse string should contain 4 ':' separators") | |
2175 | 2202 | else { | |
2176 | - | let | |
2177 | - | let | |
2178 | - | let | |
2179 | - | let | |
2180 | - | let | |
2181 | - | $Tuple2([StringEntry( | |
2203 | + | let iU = split(fk[ak], "_")[al] | |
2204 | + | let gY = eR(fk) | |
2205 | + | let iV = eP(fk[ag]) | |
2206 | + | let gZ = ((iV - parseIntValue(iU)) - gY) | |
2207 | + | let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([iU, toString(gY), toString(gZ), toString(iV)], "_")], ":") | |
2208 | + | $Tuple2([StringEntry(ff, iW)], iW) | |
2182 | 2209 | } | |
2183 | 2210 | } | |
2184 | 2211 | ||
2185 | 2212 | ||
2186 | 2213 | ||
2187 | - | @Callable( | |
2188 | - | func fixWarehouseFormat (aF) = if (( | |
2214 | + | @Callable(ee) | |
2215 | + | func fixWarehouseFormat (aF) = if ((ee.caller != bC)) | |
2189 | 2216 | then throw("Access denied") | |
2190 | 2217 | else { | |
2191 | - | let | |
2192 | - | let | |
2193 | - | let | |
2194 | - | let | |
2195 | - | let | |
2196 | - | let | |
2197 | - | let | |
2198 | - | let | |
2199 | - | let | |
2200 | - | let | |
2201 | - | $Tuple2([StringEntry( | |
2218 | + | let ff = aE(aF) | |
2219 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2220 | + | let fg = (bT(split(gJ.description, "_")[bI]) / bj) | |
2221 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
2222 | + | let fk = fe(ff, fg, fh) | |
2223 | + | let iU = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fk], nil)) | |
2224 | + | let gY = eR(fk) | |
2225 | + | let iV = eP(fk[ag]) | |
2226 | + | let gZ = ((iV - iU) - gY) | |
2227 | + | let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([toString(iU), toString(gY), toString(gZ), toString(iV)], "_")], ":") | |
2228 | + | $Tuple2([StringEntry(ff, iW)], iW) | |
2202 | 2229 | } | |
2203 | 2230 | ||
2204 | 2231 | ||
2205 | 2232 | ||
2206 | - | @Callable( | |
2207 | - | func fixStakedPieces (bp) = if (( | |
2233 | + | @Callable(ee) | |
2234 | + | func fixStakedPieces (bp) = if ((ee.caller != bC)) | |
2208 | 2235 | then throw("Access denied") | |
2209 | 2236 | else { | |
2210 | - | let | |
2237 | + | let hX = if ((bp == "")) | |
2211 | 2238 | then 0 | |
2212 | 2239 | else { | |
2213 | - | let | |
2214 | - | let | |
2215 | - | then split_51C(value( | |
2240 | + | let hS = getString(bD, bM(bp)) | |
2241 | + | let hN = if (isDefined(hS)) | |
2242 | + | then split_51C(value(hS), "_") | |
2216 | 2243 | else nil | |
2217 | - | func | |
2218 | - | let | |
2219 | - | let bU = split( | |
2244 | + | func iX (cL,aF) = { | |
2245 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2246 | + | let bU = split(gJ.description, "_")[bI] | |
2220 | 2247 | (cL + bT(bU)) | |
2221 | 2248 | } | |
2222 | 2249 | ||
2223 | - | let cN = | |
2250 | + | let cN = hN | |
2224 | 2251 | let cO = size(cN) | |
2225 | 2252 | let cP = 0 | |
2226 | 2253 | func cQ (cR,cS) = if ((cS >= cO)) | |
2227 | 2254 | then cR | |
2228 | - | else | |
2255 | + | else iX(cR, cN[cS]) | |
2229 | 2256 | ||
2230 | 2257 | func cT (cR,cS) = if ((cS >= cO)) | |
2231 | 2258 | then cR | |
2232 | 2259 | else throw("List size exceeds 100") | |
2233 | 2260 | ||
2234 | 2261 | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2235 | 2262 | } | |
2236 | - | $Tuple2([IntegerEntry(bN(bp), | |
2263 | + | $Tuple2([IntegerEntry(bN(bp), hX)], hX) | |
2237 | 2264 | } | |
2238 | 2265 | ||
2239 | 2266 | ||
2240 | 2267 | ||
2241 | - | @Callable( | |
2242 | - | func setCustomName (av, | |
2243 | - | let | |
2244 | - | if ((size( | |
2268 | + | @Callable(ee) | |
2269 | + | func setCustomName (av,hP,aA) = { | |
2270 | + | let ih = ie(ee) | |
2271 | + | if ((size(ee.payments) != 1)) | |
2245 | 2272 | then throw("Exactly one payment required") | |
2246 | 2273 | else { | |
2247 | - | let | |
2248 | - | if (( | |
2274 | + | let ii = value(ee.payments[0]) | |
2275 | + | if ((ii.assetId != bb)) | |
2249 | 2276 | then throw("Allowed USDT payment only!") | |
2250 | - | else if (( | |
2277 | + | else if ((ii.amount != ca)) | |
2251 | 2278 | then throw(("Payment should be " + toString(ca))) | |
2252 | - | else if (contains( | |
2253 | - | then throw(("Name should not contain '__': " + | |
2254 | - | else if ((size( | |
2279 | + | else if (contains(hP, "__")) | |
2280 | + | then throw(("Name should not contain '__': " + hP)) | |
2281 | + | else if ((size(hP) > cb)) | |
2255 | 2282 | then throw(("Name too long, maxLength=" + toString(cb))) | |
2256 | 2283 | else { | |
2257 | - | let b = toString( | |
2258 | - | let | |
2284 | + | let b = toString(ee.originCaller) | |
2285 | + | let iY = { | |
2259 | 2286 | let bc = aA | |
2260 | 2287 | if (("ACCOUNT" == bc)) | |
2261 | 2288 | then { | |
2262 | - | let | |
2263 | - | let | |
2264 | - | if (isDefined( | |
2265 | - | then throw(("Name already registered: " + | |
2289 | + | let iZ = cv(hP) | |
2290 | + | let ja = getString(iZ) | |
2291 | + | if (isDefined(ja)) | |
2292 | + | then throw(("Name already registered: " + hP)) | |
2266 | 2293 | else { | |
2267 | - | let | |
2268 | - | let | |
2269 | - | let | |
2270 | - | then [DeleteEntry(cv(value( | |
2294 | + | let jb = aH(b) | |
2295 | + | let jc = getString(jb) | |
2296 | + | let jd = if (isDefined(jc)) | |
2297 | + | then [DeleteEntry(cv(value(jc)))] | |
2271 | 2298 | else nil | |
2272 | - | ((( | |
2299 | + | (((jd :+ StringEntry(jb, hP)) :+ StringEntry(iZ, b)) ++ ht(b, B)._1) | |
2273 | 2300 | } | |
2274 | 2301 | } | |
2275 | 2302 | else if (("LAND" == bc)) | |
2276 | 2303 | then { | |
2277 | - | let | |
2278 | - | let | |
2279 | - | if (!(isDefined(getInteger( | |
2280 | - | then throw(( | |
2304 | + | let gJ = value(assetInfo(fromBase58String(av))) | |
2305 | + | let gK = ax(av) | |
2306 | + | if (!(isDefined(getInteger(gK)))) | |
2307 | + | then throw((gJ.name + " is not staked")) | |
2281 | 2308 | else { | |
2282 | - | let | |
2283 | - | if (( | |
2309 | + | let gM = valueOrErrorMessage(getString(au(av)), (("NFT " + gJ.name) + " is orphaned")) | |
2310 | + | if ((gM != b)) | |
2284 | 2311 | then throw((P + " is not yours")) | |
2285 | 2312 | else { | |
2286 | - | let | |
2287 | - | let | |
2288 | - | if (isDefined( | |
2289 | - | then throw(("Name already registered: " + | |
2313 | + | let iZ = cp(hP) | |
2314 | + | let ja = getString(iZ) | |
2315 | + | if (isDefined(ja)) | |
2316 | + | then throw(("Name already registered: " + hP)) | |
2290 | 2317 | else { | |
2291 | - | let | |
2292 | - | let | |
2293 | - | let | |
2294 | - | then [DeleteEntry(cp(value( | |
2318 | + | let je = aw(av) | |
2319 | + | let jc = getString(je) | |
2320 | + | let jd = if (isDefined(jc)) | |
2321 | + | then [DeleteEntry(cp(value(jc)))] | |
2295 | 2322 | else nil | |
2296 | - | ((( | |
2323 | + | (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ ht(b, B)._1) | |
2297 | 2324 | } | |
2298 | 2325 | } | |
2299 | 2326 | } | |
2300 | 2327 | } | |
2301 | 2328 | else if (("DUCK" == bc)) | |
2302 | 2329 | then { | |
2303 | - | let | |
2304 | - | let | |
2305 | - | if (if (!(isDefined(getInteger( | |
2330 | + | let gJ = value(assetInfo(fromBase58String(av))) | |
2331 | + | let gK = ax(av) | |
2332 | + | if (if (!(isDefined(getInteger(gK)))) | |
2306 | 2333 | then true | |
2307 | 2334 | else !(isDefined(getString(aN(b))))) | |
2308 | - | then throw(( | |
2335 | + | then throw((gJ.name + " is not staked")) | |
2309 | 2336 | else { | |
2310 | - | let | |
2311 | - | if (( | |
2337 | + | let gM = valueOrErrorMessage(getString(aM(av)), (("NFT " + gJ.name) + " is orphaned")) | |
2338 | + | if ((gM != b)) | |
2312 | 2339 | then throw((Q + " is not yours")) | |
2313 | 2340 | else { | |
2314 | - | let | |
2315 | - | let | |
2316 | - | if (isDefined( | |
2317 | - | then throw(("Name already registered: " + | |
2341 | + | let iZ = cu(hP) | |
2342 | + | let ja = getString(iZ) | |
2343 | + | if (isDefined(ja)) | |
2344 | + | then throw(("Name already registered: " + hP)) | |
2318 | 2345 | else { | |
2319 | - | let | |
2320 | - | let | |
2321 | - | let | |
2322 | - | then [DeleteEntry(cu(value( | |
2346 | + | let je = aG(av) | |
2347 | + | let jc = getString(je) | |
2348 | + | let jd = if (isDefined(jc)) | |
2349 | + | then [DeleteEntry(cu(value(jc)))] | |
2323 | 2350 | else nil | |
2324 | - | ((( | |
2351 | + | (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ hn(av, B)._1) | |
2325 | 2352 | } | |
2326 | 2353 | } | |
2327 | 2354 | } | |
2328 | 2355 | } | |
2329 | 2356 | else throw("Unknown entity type") | |
2330 | 2357 | } | |
2331 | - | $Tuple2((( | |
2358 | + | $Tuple2(((iY :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), 0) | |
2332 | 2359 | } | |
2333 | 2360 | } | |
2334 | 2361 | } | |
2335 | 2362 | ||
2336 | 2363 | ||
2337 | 2364 | ||
2338 | - | @Callable( | |
2339 | - | func setReferrals ( | |
2365 | + | @Callable(ee) | |
2366 | + | func setReferrals (jf,jg) = if ((ee.callerPublicKey != bX)) | |
2340 | 2367 | then throw("Permission denied") | |
2341 | 2368 | else { | |
2342 | - | let | |
2343 | - | if ((size( | |
2369 | + | let ih = ie(ee) | |
2370 | + | if ((size(ee.payments) != 0)) | |
2344 | 2371 | then throw("No payments required") | |
2345 | - | else if (!(isDefined(addressFromString( | |
2346 | - | then throw(("Invalid address: " + | |
2347 | - | else if (!(isDefined(addressFromString( | |
2348 | - | then throw(("Invalid address: " + | |
2372 | + | else if (!(isDefined(addressFromString(jf)))) | |
2373 | + | then throw(("Invalid address: " + jf)) | |
2374 | + | else if (!(isDefined(addressFromString(jg)))) | |
2375 | + | then throw(("Invalid address: " + jg)) | |
2349 | 2376 | else { | |
2350 | - | let | |
2351 | - | let | |
2352 | - | let | |
2353 | - | then split_4C(value( | |
2377 | + | let jh = cw() | |
2378 | + | let ji = getString(jh) | |
2379 | + | let jj = if (isDefined(ji)) | |
2380 | + | then split_4C(value(ji), "_") | |
2354 | 2381 | else nil | |
2355 | - | if (containsElement( | |
2356 | - | then throw(( | |
2382 | + | if (containsElement(jj, jg)) | |
2383 | + | then throw((jg + " is not newbie (already has referrals)")) | |
2357 | 2384 | else { | |
2358 | - | let | |
2359 | - | let | |
2360 | - | if (if (isDefined( | |
2361 | - | then isDefined(addressFromString(value( | |
2385 | + | let hv = aI(jg) | |
2386 | + | let hw = getString(hv) | |
2387 | + | if (if (isDefined(hw)) | |
2388 | + | then isDefined(addressFromString(value(hw))) | |
2362 | 2389 | else false) | |
2363 | - | then throw((( | |
2390 | + | then throw(((jg + " already has refBy: ") + value(hw))) | |
2364 | 2391 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | let | |
2368 | - | then split_4C(value( | |
2392 | + | let jk = aL(jf) | |
2393 | + | let jl = getString(jk) | |
2394 | + | let jm = if (isDefined(jl)) | |
2395 | + | then split_4C(value(jl), "_") | |
2369 | 2396 | else nil | |
2370 | - | if (containsElement( | |
2371 | - | then throw(((( | |
2397 | + | if (containsElement(jm, jg)) | |
2398 | + | then throw((((jf + " already contains ") + jg) + " within referrals")) | |
2372 | 2399 | else { | |
2373 | - | let | |
2374 | - | let | |
2375 | - | then value( | |
2376 | - | else makeString_2C(( | |
2377 | - | $Tuple2([StringEntry( | |
2400 | + | let jn = makeString_2C((jm :+ jg), "_") | |
2401 | + | let jo = if (containsElement(jj, jf)) | |
2402 | + | then value(ji) | |
2403 | + | else makeString_2C((jj :+ jf), "_") | |
2404 | + | $Tuple2([StringEntry(hv, jf), StringEntry(jk, jn), StringEntry(jh, jo), ih], 0) | |
2378 | 2405 | } | |
2379 | 2406 | } | |
2380 | 2407 | } | |
2381 | 2408 | } | |
2382 | 2409 | } | |
2383 | 2410 | ||
2384 | 2411 | ||
2385 | 2412 | ||
2386 | - | @Callable( | |
2387 | - | func distributePoints ( | |
2388 | - | let | |
2389 | - | if ((size( | |
2413 | + | @Callable(ee) | |
2414 | + | func distributePoints (jp,jq,jr,js,jt) = { | |
2415 | + | let ih = ie(ee) | |
2416 | + | if ((size(ee.payments) != 0)) | |
2390 | 2417 | then throw("No payments required") | |
2391 | 2418 | else { | |
2392 | - | let b = toString( | |
2419 | + | let b = toString(ee.originCaller) | |
2393 | 2420 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2394 | - | let | |
2395 | - | let | |
2396 | - | let | |
2397 | - | let | |
2398 | - | let | |
2399 | - | let | |
2400 | - | if (( | |
2401 | - | then throw((("There are only " + toString( | |
2421 | + | let ju = w(b) | |
2422 | + | let jv = valueOrElse(getInteger(bD, ju), 0) | |
2423 | + | let jw = s(p) | |
2424 | + | let jx = valueOrElse(getInteger(bD, jw), 0) | |
2425 | + | let jy = (jv + jx) | |
2426 | + | let jz = ((((jp + jq) + jr) + js) + jt) | |
2427 | + | if ((jz > jy)) | |
2428 | + | then throw((("There are only " + toString(jy)) + " free points to distribute")) | |
2402 | 2429 | else { | |
2403 | - | let | |
2404 | - | let | |
2405 | - | let | |
2406 | - | $Tuple2([IntegerEntry( | |
2430 | + | let jA = o(p) | |
2431 | + | let jB = split(valueOrElse(getString(bD, jA), "0_0_0_0_0"), "_") | |
2432 | + | let jC = (jv - jz) | |
2433 | + | $Tuple2([IntegerEntry(ju, if ((0 > jC)) | |
2407 | 2434 | then 0 | |
2408 | - | else | |
2409 | - | then ( | |
2410 | - | else | |
2435 | + | else jC), IntegerEntry(jw, if ((0 > jC)) | |
2436 | + | then (jx + jC) | |
2437 | + | else jx), StringEntry(jA, makeString([toString((parseIntValue(jB[g]) + jp)), toString((parseIntValue(jB[h]) + jq)), toString((parseIntValue(jB[i]) + jr)), toString((parseIntValue(jB[j]) + js)), toString((parseIntValue(jB[k]) + jt))], "_")), ih], 0) | |
2411 | 2438 | } | |
2412 | 2439 | } | |
2413 | 2440 | } | |
2414 | 2441 | ||
2415 | 2442 | ||
2416 | 2443 | ||
2417 | - | @Callable( | |
2418 | - | func splitByGlobalWeightsREADONLY ( | |
2419 | - | ||
2420 | - | ||
2421 | - | ||
2422 | - | @Callable( | |
2423 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2424 | - | let | |
2425 | - | $Tuple2(nil, $Tuple2(cU( | |
2426 | - | } | |
2427 | - | ||
2428 | - | ||
2429 | - | ||
2430 | - | @Callable( | |
2431 | - | func getBackpackREADONLY (p) = $Tuple2(nil, makeString( | |
2432 | - | ||
2433 | - | ||
2434 | - | ||
2435 | - | @Callable( | |
2444 | + | @Callable(ee) | |
2445 | + | func splitByGlobalWeightsREADONLY (fu) = $Tuple2(nil, cU(fu)) | |
2446 | + | ||
2447 | + | ||
2448 | + | ||
2449 | + | @Callable(ee) | |
2450 | + | func splitByGlobalAndLocalWeightsREADONLY (jD,jE,eh) = { | |
2451 | + | let ea = eg(eh) | |
2452 | + | $Tuple2(nil, $Tuple2(cU(jD), cF(jE, ea))) | |
2453 | + | } | |
2454 | + | ||
2455 | + | ||
2456 | + | ||
2457 | + | @Callable(ee) | |
2458 | + | func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eM(aO(p)), ":")) | |
2459 | + | ||
2460 | + | ||
2461 | + | ||
2462 | + | @Callable(ee) | |
2436 | 2463 | func getWarehouseREADONLY (aF) = { | |
2437 | - | let | |
2438 | - | let | |
2439 | - | let | |
2440 | - | $Tuple2(nil, makeString_2C( | |
2441 | - | } | |
2442 | - | ||
2443 | - | ||
2444 | - | ||
2445 | - | @Callable( | |
2446 | - | func saveLastTx () = if (if (( | |
2447 | - | then ( | |
2464 | + | let gJ = value(assetInfo(fromBase58String(aF))) | |
2465 | + | let fg = (bT(split(gJ.description, "_")[bI]) / bj) | |
2466 | + | let fh = valueOrElse(getInteger(ay(aF)), 0) | |
2467 | + | $Tuple2(nil, makeString_2C(fe(aE(aF), fg, fh), ":")) | |
2468 | + | } | |
2469 | + | ||
2470 | + | ||
2471 | + | ||
2472 | + | @Callable(ee) | |
2473 | + | func saveLastTx () = if (if ((ee.caller != bG)) | |
2474 | + | then (ee.caller != bE) | |
2448 | 2475 | else false) | |
2449 | 2476 | then throw("Access denied") | |
2450 | - | else $Tuple2([ | |
2451 | - | ||
2452 | - | ||
2453 | - | ||
2454 | - | @Callable( | |
2455 | - | func updateDuckStats (p, | |
2477 | + | else $Tuple2([ie(ee)], 42) | |
2478 | + | ||
2479 | + | ||
2480 | + | ||
2481 | + | @Callable(ee) | |
2482 | + | func updateDuckStats (p,ho) = if ((ee.caller != bE)) | |
2456 | 2483 | then throw("Access denied") | |
2457 | - | else | |
2458 | - | ||
2459 | - | ||
2460 | - | ||
2461 | - | @Callable( | |
2462 | - | func updateAccStats (b, | |
2484 | + | else hn(p, ho) | |
2485 | + | ||
2486 | + | ||
2487 | + | ||
2488 | + | @Callable(ee) | |
2489 | + | func updateAccStats (b,ho) = if ((ee.caller != bE)) | |
2463 | 2490 | then throw("Access denied") | |
2464 | - | else | |
2465 | - | ||
2466 | - | ||
2467 | - | ||
2468 | - | @Callable( | |
2469 | - | func equipDuck ( | |
2470 | - | let | |
2471 | - | if ((size( | |
2491 | + | else ht(b, ho) | |
2492 | + | ||
2493 | + | ||
2494 | + | ||
2495 | + | @Callable(ee) | |
2496 | + | func equipDuck (jF) = { | |
2497 | + | let ih = ie(ee) | |
2498 | + | if ((size(ee.payments) != 0)) | |
2472 | 2499 | then throw("No payments required") | |
2473 | 2500 | else { | |
2474 | - | let b = toString( | |
2501 | + | let b = toString(ee.originCaller) | |
2475 | 2502 | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2476 | - | let | |
2477 | - | let | |
2478 | - | let | |
2479 | - | let | |
2480 | - | let | |
2481 | - | if ((size( | |
2503 | + | let jG = t(p) | |
2504 | + | let jH = split(valueOrElse(getString(jG), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2505 | + | let eN = aO(p) | |
2506 | + | let fy = eM(eN) | |
2507 | + | let jI = split(jF, "_") | |
2508 | + | if ((size(jI) != l)) | |
2482 | 2509 | then throw("Wrong equipment string") | |
2483 | 2510 | else { | |
2484 | - | let | |
2485 | - | let dh = if (( | |
2511 | + | let jJ = fy[as] | |
2512 | + | let dh = if ((jJ == "")) | |
2486 | 2513 | then nil | |
2487 | - | else split( | |
2488 | - | let | |
2489 | - | let dt = | |
2490 | - | $Tuple2([StringEntry( | |
2514 | + | else split(jJ, "_") | |
2515 | + | let jK = dT(jH, dh, true) | |
2516 | + | let dt = dT(jI, jK, false) | |
2517 | + | $Tuple2([StringEntry(jG, jF), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dt, "_")], ":")), ih], 0) | |
2491 | 2518 | } | |
2492 | 2519 | } | |
2493 | 2520 | } | |
2521 | + | ||
2522 | + | ||
2523 | + | ||
2524 | + | @Callable(ee) | |
2525 | + | func test () = if ((ee.caller != this)) | |
2526 | + | then throw("Access denied") | |
2527 | + | else $Tuple2(nil, du("")) | |
2494 | 2528 | ||
2495 | 2529 |
github/deemru/w8io/169f3d6 1118.97 ms ◑