{"matchId":"56181588","creationMatch":"exact_match","runtimeMatch":"exact_match","verifiedAt":"2026-10-15T20:44:27Z","creationBytecode":{"onchainBytecode":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b6040516114ed90816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816306b7cb9c146111995750806306fdde03146110d5578063095ea7b314611056578063154e1e3f1461101c57806318160ddd14610fe057806323b872dd14610f08578063313ce56714610eed5780633c130d9014610e1657806342966c6814610d1e57806370a0823114610cda578063715018a614610c5d57806379ba509714610bb35780637d2a45dd14610b855780637de1e53614610b575780637f5a7c7b14610b295780638197ac3f14610b0e5780638560e7b314610aef5780638da5cb5b14610abb5780638f0c86fa14610a9757806395d89b411461099f578063a718e20d14610984578063a9059cbb14610953578063af9e723914610940578063d59ba0df1461090e578063db2a45701461030b578063dc4c90d3146102e2578063dd62ed3e1461029b578063dd6b5e8e14610280578063de7832d414610252578063ded99d2b14610238578063e30c3978146102045763f2fde38b1461017c575f80fd5b34610200576020366003190112610200576101956111de565b61019d6113b7565b5f8051602061147883398151915280546001600160a01b0319166001600160a01b039283169081179091555f80516020611418833981519152549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610200575f366003190112610200575f80516020611478833981519152546040516001600160a01b039091168152602090f35b34610200575f3660031901126102005760206040515f8152f35b34610200575f36600319011261020057602060405173596921e47589118be45a60c93e25f90b7df12b788152f35b34610200575f36600319011261020057602060405160018152f35b34610200576040366003190112610200576102b46111de565b6102c56102bf6111f4565b9161128e565b9060018060a01b03165f52602052602060405f2054604051908152f35b34610200575f3660031901126102005760206040516e04444c5dc75cb358380d2e3de08a908152f35b346102005760603660031901126102005760043567ffffffffffffffff81116102005761033c903690600401611228565b9060243567ffffffffffffffff81116102005761035d903690600401611228565b929060443567ffffffffffffffff81116102005761037f903690600401611228565b90916103896113b7565b83151580610903575b806108fa575b806108ef575b806108e3575b156108ab5767ffffffffffffffff841161067a576103cf5f805160206113d883398151915254611256565b601f8111610837575b50835f601f82116001146107af575f916107a4575b508460011b905f198660031b1c1916175f805160206113d8833981519152555b67ffffffffffffffff861161067a576104335f8051602061143883398151915254611256565b601f8111610735575b50855f601f8211600114610699575f9161068e575b508660011b905f198860031b1c1916175f80516020611438833981519152555b67ffffffffffffffff821161067a576104975f8051602061145883398151915254611256565b601f811161060b575b505f95601f83116001146105455782916105279161053595947f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d0995f9161053a575b508460011b905f198660031b1c1916175f80516020611458833981519152555b61051960405198899860608a5260608a01916112c6565b9187830360208901526112c6565b9184830360408601526112c6565b0390a1005b90508501358a6104e2565b5f805160206114588339815191525f9081527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351309790601f198516905b8181106105f35750917f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d098859492610535979661052795106105da575b5050600184811b015f8051602061145883398151915255610502565b8601355f19600387901b60f8161c1916905589806105be565b868301358a5560019099019860209283019201610581565b5f805160206114588339815191525f527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee628435130601f840160051c81019160208510610670575b601f0160051c01905b81811061066557506104a0565b5f8155600101610658565b909150819061064f565b634e487b7160e01b5f52604160045260245ffd5b905081013587610451565b5f805160206114388339815191525f9081527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e42353290192508890601f198216905b81811061071a575010610701575b5050600186811b015f8051602061143883398151915255610471565b8201355f19600389901b60f8161c1916905586806106e5565b8584013585556001909401936020938401938b9350016106d7565b5f805160206114388339815191525f527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e423532901601f880160051c8101916020891061079a575b601f0160051c01905b81811061078f575061043c565b5f8155600101610782565b9091508190610779565b9050850135876103ed565b9050601f198516905f805160206113d88339815191525f52855f80516020611498833981519152925f5b81811061081c575010610803575b5050600184811b015f805160206113d88339815191525561040d565b8601355f19600387901b60f8161c1916905586806107e7565b898401358555600190940193602093840193899350016107d9565b5f805160206113d88339815191525f52601f850160051c5f80516020611498833981519152019060208610610896575b601f0160051c5f8051602061149883398151915201905b81811061088b57506103d8565b5f815560010161087e565b5f805160206114988339815191529150610867565b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b506108008211156103a4565b50602086111561039e565b50851515610398565b506080841115610392565b34610200576040366003190112610200576109276111de565b50610930611219565b506354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057005b346102005760403660031901126102005761097961096f6111de565b60243590336112e6565b602060405160018152f35b34610200575f3660031901126102005760206040515f198152f35b34610200575f366003190112610200576040515f5f80516020611438833981519152546109cb81611256565b8084529060018116908115610a7b5750600114610a19575b50819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b0390f35b5f805160206114388339815191525f9081529091507fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e4235329015b828210610a65575060209150820101826109e3565b6001816020925483858801015201910190610a50565b90506020925060ff191682840152151560051b820101826109e3565b3461020057602036600319011261020057610ab06111de565b5060206040515f8152f35b34610200575f366003190112610200575f80516020611418833981519152546040516001600160a01b039091168152602090f35b34610200575f366003190112610200576354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057610b2761120a565b005b34610200575f3660031901126102005760206040517337bfb8ac7c960e558657871d41ca70e07e7dbfff8152f35b34610200575f3660031901126102005760206040517380396c7131159eb92e7e84839e51c9887a7a95d98152f35b34610200575f366003190112610200576020604051731591ea904bd0ec553a766dfe20efac3d809272fc8152f35b34610200575f366003190112610200575f8051602061147883398151915254336001600160a01b0390911603610c4a575f8051602061147883398151915280546001600160a01b03199081169091555f8051602061141883398151915280543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b63118cdaa760e01b5f523360045260245ffd5b34610200575f36600319011261020057610c756113b7565b5f8051602061147883398151915280546001600160a01b03199081169091555f80516020611418833981519152805491821690555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610200576020366003190112610200576001600160a01b03610cfb6111de565b165f525f805160206113f8833981519152602052602060405f2054604051908152f35b34610200576020366003190112610200576004353315610e0357335f525f805160206113f883398151915260205260405f2054818110610dea5790805f923384525f805160206113f8833981519152602052036040832055807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254037f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b63391434e360e21b5f523360045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b34610200575f366003190112610200576040515f5f8051602061145883398151915254610e4281611256565b8084529060018116908115610a7b5750600114610e8b5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206114588339815191525f9081529091507fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351305b828210610ed7575060209150820101826109e3565b6001816020925483858801015201910190610ec2565b34610200575f36600319011261020057602060405160128152f35b3461020057606036600319011261020057610f216111de565b610f296111f4565b60443590610f368361128e565b335f9081526020919091526040902054925f198410610f5a575b61097993506112e6565b828410610fc5576001600160a01b03811615610fb2573315610f9f5761097993610f838261128e565b60018060a01b0333165f526020528360405f2091039055610f50565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610200575f3660031901126102005760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b34610200575f3660031901126102005760206040517fe139ae077c83a170e27cd05d87fe0b415d536060747dd88ee74acd879eb5ca2d8152f35b346102005760403660031901126102005761106f6111de565b602435903315610fb2576001600160a01b0316908115610f9f576110923361128e565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610200575f366003190112610200576040515f5f805160206113d88339815191525461110181611256565b8084529060018116908115610a7b575060011461114a5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206113d88339815191525f9081529091505f805160206114988339815191525b828210611183575060209150820101826109e3565b600181602092548385880101520191019061116e565b34610200575f3660031901126102005780620249f060209252f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361020057565b602435906001600160a01b038216820361020057565b60043590811515820361020057565b60243590811515820361020057565b9181601f840112156102005782359167ffffffffffffffff8311610200576020838186019501011161020057565b90600182811c92168015611284575b602083101461127057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611265565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0316908115610e03576001600160a01b03169182156113a457815f525f805160206113f883398151915260205260405f205481811061138b57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f805160206113f883398151915284520360405f2055845f525f805160206113f8833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b5f80516020611418833981519152546001600160a01b03163303610c4a5756feaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab40052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab401af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab402237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00086b346b4832b5eb9e9b74a7a2e3ea9d51c350d5e7f9abe0429e7545c4dde9efa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","recompiledBytecode":"0x6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b6040516114ed90816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816306b7cb9c146111995750806306fdde03146110d5578063095ea7b314611056578063154e1e3f1461101c57806318160ddd14610fe057806323b872dd14610f08578063313ce56714610eed5780633c130d9014610e1657806342966c6814610d1e57806370a0823114610cda578063715018a614610c5d57806379ba509714610bb35780637d2a45dd14610b855780637de1e53614610b575780637f5a7c7b14610b295780638197ac3f14610b0e5780638560e7b314610aef5780638da5cb5b14610abb5780638f0c86fa14610a9757806395d89b411461099f578063a718e20d14610984578063a9059cbb14610953578063af9e723914610940578063d59ba0df1461090e578063db2a45701461030b578063dc4c90d3146102e2578063dd62ed3e1461029b578063dd6b5e8e14610280578063de7832d414610252578063ded99d2b14610238578063e30c3978146102045763f2fde38b1461017c575f80fd5b34610200576020366003190112610200576101956111de565b61019d6113b7565b5f8051602061147883398151915280546001600160a01b0319166001600160a01b039283169081179091555f80516020611418833981519152549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610200575f366003190112610200575f80516020611478833981519152546040516001600160a01b039091168152602090f35b34610200575f3660031901126102005760206040515f8152f35b34610200575f36600319011261020057602060405173596921e47589118be45a60c93e25f90b7df12b788152f35b34610200575f36600319011261020057602060405160018152f35b34610200576040366003190112610200576102b46111de565b6102c56102bf6111f4565b9161128e565b9060018060a01b03165f52602052602060405f2054604051908152f35b34610200575f3660031901126102005760206040516e04444c5dc75cb358380d2e3de08a908152f35b346102005760603660031901126102005760043567ffffffffffffffff81116102005761033c903690600401611228565b9060243567ffffffffffffffff81116102005761035d903690600401611228565b929060443567ffffffffffffffff81116102005761037f903690600401611228565b90916103896113b7565b83151580610903575b806108fa575b806108ef575b806108e3575b156108ab5767ffffffffffffffff841161067a576103cf5f805160206113d883398151915254611256565b601f8111610837575b50835f601f82116001146107af575f916107a4575b508460011b905f198660031b1c1916175f805160206113d8833981519152555b67ffffffffffffffff861161067a576104335f8051602061143883398151915254611256565b601f8111610735575b50855f601f8211600114610699575f9161068e575b508660011b905f198860031b1c1916175f80516020611438833981519152555b67ffffffffffffffff821161067a576104975f8051602061145883398151915254611256565b601f811161060b575b505f95601f83116001146105455782916105279161053595947f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d0995f9161053a575b508460011b905f198660031b1c1916175f80516020611458833981519152555b61051960405198899860608a5260608a01916112c6565b9187830360208901526112c6565b9184830360408601526112c6565b0390a1005b90508501358a6104e2565b5f805160206114588339815191525f9081527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351309790601f198516905b8181106105f35750917f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d098859492610535979661052795106105da575b5050600184811b015f8051602061145883398151915255610502565b8601355f19600387901b60f8161c1916905589806105be565b868301358a5560019099019860209283019201610581565b5f805160206114588339815191525f527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee628435130601f840160051c81019160208510610670575b601f0160051c01905b81811061066557506104a0565b5f8155600101610658565b909150819061064f565b634e487b7160e01b5f52604160045260245ffd5b905081013587610451565b5f805160206114388339815191525f9081527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e42353290192508890601f198216905b81811061071a575010610701575b5050600186811b015f8051602061143883398151915255610471565b8201355f19600389901b60f8161c1916905586806106e5565b8584013585556001909401936020938401938b9350016106d7565b5f805160206114388339815191525f527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e423532901601f880160051c8101916020891061079a575b601f0160051c01905b81811061078f575061043c565b5f8155600101610782565b9091508190610779565b9050850135876103ed565b9050601f198516905f805160206113d88339815191525f52855f80516020611498833981519152925f5b81811061081c575010610803575b5050600184811b015f805160206113d88339815191525561040d565b8601355f19600387901b60f8161c1916905586806107e7565b898401358555600190940193602093840193899350016107d9565b5f805160206113d88339815191525f52601f850160051c5f80516020611498833981519152019060208610610896575b601f0160051c5f8051602061149883398151915201905b81811061088b57506103d8565b5f815560010161087e565b5f805160206114988339815191529150610867565b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b506108008211156103a4565b50602086111561039e565b50851515610398565b506080841115610392565b34610200576040366003190112610200576109276111de565b50610930611219565b506354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057005b346102005760403660031901126102005761097961096f6111de565b60243590336112e6565b602060405160018152f35b34610200575f3660031901126102005760206040515f198152f35b34610200575f366003190112610200576040515f5f80516020611438833981519152546109cb81611256565b8084529060018116908115610a7b5750600114610a19575b50819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b0390f35b5f805160206114388339815191525f9081529091507fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e4235329015b828210610a65575060209150820101826109e3565b6001816020925483858801015201910190610a50565b90506020925060ff191682840152151560051b820101826109e3565b3461020057602036600319011261020057610ab06111de565b5060206040515f8152f35b34610200575f366003190112610200575f80516020611418833981519152546040516001600160a01b039091168152602090f35b34610200575f366003190112610200576354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057610b2761120a565b005b34610200575f3660031901126102005760206040517337bfb8ac7c960e558657871d41ca70e07e7dbfff8152f35b34610200575f3660031901126102005760206040517380396c7131159eb92e7e84839e51c9887a7a95d98152f35b34610200575f366003190112610200576020604051731591ea904bd0ec553a766dfe20efac3d809272fc8152f35b34610200575f366003190112610200575f8051602061147883398151915254336001600160a01b0390911603610c4a575f8051602061147883398151915280546001600160a01b03199081169091555f8051602061141883398151915280543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b63118cdaa760e01b5f523360045260245ffd5b34610200575f36600319011261020057610c756113b7565b5f8051602061147883398151915280546001600160a01b03199081169091555f80516020611418833981519152805491821690555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610200576020366003190112610200576001600160a01b03610cfb6111de565b165f525f805160206113f8833981519152602052602060405f2054604051908152f35b34610200576020366003190112610200576004353315610e0357335f525f805160206113f883398151915260205260405f2054818110610dea5790805f923384525f805160206113f8833981519152602052036040832055807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254037f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b63391434e360e21b5f523360045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b34610200575f366003190112610200576040515f5f8051602061145883398151915254610e4281611256565b8084529060018116908115610a7b5750600114610e8b5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206114588339815191525f9081529091507fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351305b828210610ed7575060209150820101826109e3565b6001816020925483858801015201910190610ec2565b34610200575f36600319011261020057602060405160128152f35b3461020057606036600319011261020057610f216111de565b610f296111f4565b60443590610f368361128e565b335f9081526020919091526040902054925f198410610f5a575b61097993506112e6565b828410610fc5576001600160a01b03811615610fb2573315610f9f5761097993610f838261128e565b60018060a01b0333165f526020528360405f2091039055610f50565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610200575f3660031901126102005760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b34610200575f3660031901126102005760206040517fe139ae077c83a170e27cd05d87fe0b415d536060747dd88ee74acd879eb5ca2d8152f35b346102005760403660031901126102005761106f6111de565b602435903315610fb2576001600160a01b0316908115610f9f576110923361128e565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610200575f366003190112610200576040515f5f805160206113d88339815191525461110181611256565b8084529060018116908115610a7b575060011461114a5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206113d88339815191525f9081529091505f805160206114988339815191525b828210611183575060209150820101826109e3565b600181602092548385880101520191019061116e565b34610200575f3660031901126102005780620249f060209252f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361020057565b602435906001600160a01b038216820361020057565b60043590811515820361020057565b60243590811515820361020057565b9181601f840112156102005782359167ffffffffffffffff8311610200576020838186019501011161020057565b90600182811c92168015611284575b602083101461127057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611265565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0316908115610e03576001600160a01b03169182156113a457815f525f805160206113f883398151915260205260405f205481811061138b57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f805160206113f883398151915284520360405f2055845f525f805160206113f8833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b5f80516020611418833981519152546001600160a01b03163303610c4a5756feaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab40052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab401af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab402237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00086b346b4832b5eb9e9b74a7a2e3ea9d51c350d5e7f9abe0429e7545c4dde9efa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","sourceMap":"515:2564:8:-:0;;;;;;;3147:66:5;515:2564:8;;;;;;7894:76:5;;-1:-1:-1;;;;;;;;;;;515:2564:8;;7983:34:5;7979:146;;-1:-1:-1;515:2564:8;;;;;;;;;7979:146:5;-1:-1:-1;;;;;;515:2564:8;-1:-1:-1;;;;;515:2564:8;;;3147:66:5;515:2564:8;;;8085:29:5;;515:2564:8;;8085:29:5;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:5;;-1:-1:-1;7936:23:5;515:2564:8;;;","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","offset":5517}},"transformations":[],"transformationValues":{}},"runtimeBytecode":{"onchainBytecode":"0x6080806040526004361015610012575f80fd5b5f3560e01c90816306b7cb9c146111995750806306fdde03146110d5578063095ea7b314611056578063154e1e3f1461101c57806318160ddd14610fe057806323b872dd14610f08578063313ce56714610eed5780633c130d9014610e1657806342966c6814610d1e57806370a0823114610cda578063715018a614610c5d57806379ba509714610bb35780637d2a45dd14610b855780637de1e53614610b575780637f5a7c7b14610b295780638197ac3f14610b0e5780638560e7b314610aef5780638da5cb5b14610abb5780638f0c86fa14610a9757806395d89b411461099f578063a718e20d14610984578063a9059cbb14610953578063af9e723914610940578063d59ba0df1461090e578063db2a45701461030b578063dc4c90d3146102e2578063dd62ed3e1461029b578063dd6b5e8e14610280578063de7832d414610252578063ded99d2b14610238578063e30c3978146102045763f2fde38b1461017c575f80fd5b34610200576020366003190112610200576101956111de565b61019d6113b7565b5f8051602061147883398151915280546001600160a01b0319166001600160a01b039283169081179091555f80516020611418833981519152549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610200575f366003190112610200575f80516020611478833981519152546040516001600160a01b039091168152602090f35b34610200575f3660031901126102005760206040515f8152f35b34610200575f36600319011261020057602060405173596921e47589118be45a60c93e25f90b7df12b788152f35b34610200575f36600319011261020057602060405160018152f35b34610200576040366003190112610200576102b46111de565b6102c56102bf6111f4565b9161128e565b9060018060a01b03165f52602052602060405f2054604051908152f35b34610200575f3660031901126102005760206040516e04444c5dc75cb358380d2e3de08a908152f35b346102005760603660031901126102005760043567ffffffffffffffff81116102005761033c903690600401611228565b9060243567ffffffffffffffff81116102005761035d903690600401611228565b929060443567ffffffffffffffff81116102005761037f903690600401611228565b90916103896113b7565b83151580610903575b806108fa575b806108ef575b806108e3575b156108ab5767ffffffffffffffff841161067a576103cf5f805160206113d883398151915254611256565b601f8111610837575b50835f601f82116001146107af575f916107a4575b508460011b905f198660031b1c1916175f805160206113d8833981519152555b67ffffffffffffffff861161067a576104335f8051602061143883398151915254611256565b601f8111610735575b50855f601f8211600114610699575f9161068e575b508660011b905f198860031b1c1916175f80516020611438833981519152555b67ffffffffffffffff821161067a576104975f8051602061145883398151915254611256565b601f811161060b575b505f95601f83116001146105455782916105279161053595947f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d0995f9161053a575b508460011b905f198660031b1c1916175f80516020611458833981519152555b61051960405198899860608a5260608a01916112c6565b9187830360208901526112c6565b9184830360408601526112c6565b0390a1005b90508501358a6104e2565b5f805160206114588339815191525f9081527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351309790601f198516905b8181106105f35750917f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d098859492610535979661052795106105da575b5050600184811b015f8051602061145883398151915255610502565b8601355f19600387901b60f8161c1916905589806105be565b868301358a5560019099019860209283019201610581565b5f805160206114588339815191525f527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee628435130601f840160051c81019160208510610670575b601f0160051c01905b81811061066557506104a0565b5f8155600101610658565b909150819061064f565b634e487b7160e01b5f52604160045260245ffd5b905081013587610451565b5f805160206114388339815191525f9081527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e42353290192508890601f198216905b81811061071a575010610701575b5050600186811b015f8051602061143883398151915255610471565b8201355f19600389901b60f8161c1916905586806106e5565b8584013585556001909401936020938401938b9350016106d7565b5f805160206114388339815191525f527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e423532901601f880160051c8101916020891061079a575b601f0160051c01905b81811061078f575061043c565b5f8155600101610782565b9091508190610779565b9050850135876103ed565b9050601f198516905f805160206113d88339815191525f52855f80516020611498833981519152925f5b81811061081c575010610803575b5050600184811b015f805160206113d88339815191525561040d565b8601355f19600387901b60f8161c1916905586806107e7565b898401358555600190940193602093840193899350016107d9565b5f805160206113d88339815191525f52601f850160051c5f80516020611498833981519152019060208610610896575b601f0160051c5f8051602061149883398151915201905b81811061088b57506103d8565b5f815560010161087e565b5f805160206114988339815191529150610867565b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b506108008211156103a4565b50602086111561039e565b50851515610398565b506080841115610392565b34610200576040366003190112610200576109276111de565b50610930611219565b506354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057005b346102005760403660031901126102005761097961096f6111de565b60243590336112e6565b602060405160018152f35b34610200575f3660031901126102005760206040515f198152f35b34610200575f366003190112610200576040515f5f80516020611438833981519152546109cb81611256565b8084529060018116908115610a7b5750600114610a19575b50819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b0390f35b5f805160206114388339815191525f9081529091507fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e4235329015b828210610a65575060209150820101826109e3565b6001816020925483858801015201910190610a50565b90506020925060ff191682840152151560051b820101826109e3565b3461020057602036600319011261020057610ab06111de565b5060206040515f8152f35b34610200575f366003190112610200575f80516020611418833981519152546040516001600160a01b039091168152602090f35b34610200575f366003190112610200576354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057610b2761120a565b005b34610200575f3660031901126102005760206040517337bfb8ac7c960e558657871d41ca70e07e7dbfff8152f35b34610200575f3660031901126102005760206040517380396c7131159eb92e7e84839e51c9887a7a95d98152f35b34610200575f366003190112610200576020604051731591ea904bd0ec553a766dfe20efac3d809272fc8152f35b34610200575f366003190112610200575f8051602061147883398151915254336001600160a01b0390911603610c4a575f8051602061147883398151915280546001600160a01b03199081169091555f8051602061141883398151915280543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b63118cdaa760e01b5f523360045260245ffd5b34610200575f36600319011261020057610c756113b7565b5f8051602061147883398151915280546001600160a01b03199081169091555f80516020611418833981519152805491821690555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610200576020366003190112610200576001600160a01b03610cfb6111de565b165f525f805160206113f8833981519152602052602060405f2054604051908152f35b34610200576020366003190112610200576004353315610e0357335f525f805160206113f883398151915260205260405f2054818110610dea5790805f923384525f805160206113f8833981519152602052036040832055807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254037f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b63391434e360e21b5f523360045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b34610200575f366003190112610200576040515f5f8051602061145883398151915254610e4281611256565b8084529060018116908115610a7b5750600114610e8b5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206114588339815191525f9081529091507fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351305b828210610ed7575060209150820101826109e3565b6001816020925483858801015201910190610ec2565b34610200575f36600319011261020057602060405160128152f35b3461020057606036600319011261020057610f216111de565b610f296111f4565b60443590610f368361128e565b335f9081526020919091526040902054925f198410610f5a575b61097993506112e6565b828410610fc5576001600160a01b03811615610fb2573315610f9f5761097993610f838261128e565b60018060a01b0333165f526020528360405f2091039055610f50565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610200575f3660031901126102005760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b34610200575f3660031901126102005760206040517fe139ae077c83a170e27cd05d87fe0b415d536060747dd88ee74acd879eb5ca2d8152f35b346102005760403660031901126102005761106f6111de565b602435903315610fb2576001600160a01b0316908115610f9f576110923361128e565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610200575f366003190112610200576040515f5f805160206113d88339815191525461110181611256565b8084529060018116908115610a7b575060011461114a5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206113d88339815191525f9081529091505f805160206114988339815191525b828210611183575060209150820101826109e3565b600181602092548385880101520191019061116e565b34610200575f3660031901126102005780620249f060209252f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361020057565b602435906001600160a01b038216820361020057565b60043590811515820361020057565b60243590811515820361020057565b9181601f840112156102005782359167ffffffffffffffff8311610200576020838186019501011161020057565b90600182811c92168015611284575b602083101461127057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611265565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0316908115610e03576001600160a01b03169182156113a457815f525f805160206113f883398151915260205260405f205481811061138b57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f805160206113f883398151915284520360405f2055845f525f805160206113f8833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b5f80516020611418833981519152546001600160a01b03163303610c4a5756feaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab40052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab401af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab402237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00086b346b4832b5eb9e9b74a7a2e3ea9d51c350d5e7f9abe0429e7545c4dde9efa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","recompiledBytecode":"0x6080806040526004361015610012575f80fd5b5f3560e01c90816306b7cb9c146111995750806306fdde03146110d5578063095ea7b314611056578063154e1e3f1461101c57806318160ddd14610fe057806323b872dd14610f08578063313ce56714610eed5780633c130d9014610e1657806342966c6814610d1e57806370a0823114610cda578063715018a614610c5d57806379ba509714610bb35780637d2a45dd14610b855780637de1e53614610b575780637f5a7c7b14610b295780638197ac3f14610b0e5780638560e7b314610aef5780638da5cb5b14610abb5780638f0c86fa14610a9757806395d89b411461099f578063a718e20d14610984578063a9059cbb14610953578063af9e723914610940578063d59ba0df1461090e578063db2a45701461030b578063dc4c90d3146102e2578063dd62ed3e1461029b578063dd6b5e8e14610280578063de7832d414610252578063ded99d2b14610238578063e30c3978146102045763f2fde38b1461017c575f80fd5b34610200576020366003190112610200576101956111de565b61019d6113b7565b5f8051602061147883398151915280546001600160a01b0319166001600160a01b039283169081179091555f80516020611418833981519152549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610200575f366003190112610200575f80516020611478833981519152546040516001600160a01b039091168152602090f35b34610200575f3660031901126102005760206040515f8152f35b34610200575f36600319011261020057602060405173596921e47589118be45a60c93e25f90b7df12b788152f35b34610200575f36600319011261020057602060405160018152f35b34610200576040366003190112610200576102b46111de565b6102c56102bf6111f4565b9161128e565b9060018060a01b03165f52602052602060405f2054604051908152f35b34610200575f3660031901126102005760206040516e04444c5dc75cb358380d2e3de08a908152f35b346102005760603660031901126102005760043567ffffffffffffffff81116102005761033c903690600401611228565b9060243567ffffffffffffffff81116102005761035d903690600401611228565b929060443567ffffffffffffffff81116102005761037f903690600401611228565b90916103896113b7565b83151580610903575b806108fa575b806108ef575b806108e3575b156108ab5767ffffffffffffffff841161067a576103cf5f805160206113d883398151915254611256565b601f8111610837575b50835f601f82116001146107af575f916107a4575b508460011b905f198660031b1c1916175f805160206113d8833981519152555b67ffffffffffffffff861161067a576104335f8051602061143883398151915254611256565b601f8111610735575b50855f601f8211600114610699575f9161068e575b508660011b905f198860031b1c1916175f80516020611438833981519152555b67ffffffffffffffff821161067a576104975f8051602061145883398151915254611256565b601f811161060b575b505f95601f83116001146105455782916105279161053595947f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d0995f9161053a575b508460011b905f198660031b1c1916175f80516020611458833981519152555b61051960405198899860608a5260608a01916112c6565b9187830360208901526112c6565b9184830360408601526112c6565b0390a1005b90508501358a6104e2565b5f805160206114588339815191525f9081527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351309790601f198516905b8181106105f35750917f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d098859492610535979661052795106105da575b5050600184811b015f8051602061145883398151915255610502565b8601355f19600387901b60f8161c1916905589806105be565b868301358a5560019099019860209283019201610581565b5f805160206114588339815191525f527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee628435130601f840160051c81019160208510610670575b601f0160051c01905b81811061066557506104a0565b5f8155600101610658565b909150819061064f565b634e487b7160e01b5f52604160045260245ffd5b905081013587610451565b5f805160206114388339815191525f9081527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e42353290192508890601f198216905b81811061071a575010610701575b5050600186811b015f8051602061143883398151915255610471565b8201355f19600389901b60f8161c1916905586806106e5565b8584013585556001909401936020938401938b9350016106d7565b5f805160206114388339815191525f527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e423532901601f880160051c8101916020891061079a575b601f0160051c01905b81811061078f575061043c565b5f8155600101610782565b9091508190610779565b9050850135876103ed565b9050601f198516905f805160206113d88339815191525f52855f80516020611498833981519152925f5b81811061081c575010610803575b5050600184811b015f805160206113d88339815191525561040d565b8601355f19600387901b60f8161c1916905586806107e7565b898401358555600190940193602093840193899350016107d9565b5f805160206113d88339815191525f52601f850160051c5f80516020611498833981519152019060208610610896575b601f0160051c5f8051602061149883398151915201905b81811061088b57506103d8565b5f815560010161087e565b5f805160206114988339815191529150610867565b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b506108008211156103a4565b50602086111561039e565b50851515610398565b506080841115610392565b34610200576040366003190112610200576109276111de565b50610930611219565b506354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057005b346102005760403660031901126102005761097961096f6111de565b60243590336112e6565b602060405160018152f35b34610200575f3660031901126102005760206040515f198152f35b34610200575f366003190112610200576040515f5f80516020611438833981519152546109cb81611256565b8084529060018116908115610a7b5750600114610a19575b50819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b0390f35b5f805160206114388339815191525f9081529091507fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e4235329015b828210610a65575060209150820101826109e3565b6001816020925483858801015201910190610a50565b90506020925060ff191682840152151560051b820101826109e3565b3461020057602036600319011261020057610ab06111de565b5060206040515f8152f35b34610200575f366003190112610200575f80516020611418833981519152546040516001600160a01b039091168152602090f35b34610200575f366003190112610200576354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057610b2761120a565b005b34610200575f3660031901126102005760206040517337bfb8ac7c960e558657871d41ca70e07e7dbfff8152f35b34610200575f3660031901126102005760206040517380396c7131159eb92e7e84839e51c9887a7a95d98152f35b34610200575f366003190112610200576020604051731591ea904bd0ec553a766dfe20efac3d809272fc8152f35b34610200575f366003190112610200575f8051602061147883398151915254336001600160a01b0390911603610c4a575f8051602061147883398151915280546001600160a01b03199081169091555f8051602061141883398151915280543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b63118cdaa760e01b5f523360045260245ffd5b34610200575f36600319011261020057610c756113b7565b5f8051602061147883398151915280546001600160a01b03199081169091555f80516020611418833981519152805491821690555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610200576020366003190112610200576001600160a01b03610cfb6111de565b165f525f805160206113f8833981519152602052602060405f2054604051908152f35b34610200576020366003190112610200576004353315610e0357335f525f805160206113f883398151915260205260405f2054818110610dea5790805f923384525f805160206113f8833981519152602052036040832055807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254037f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b63391434e360e21b5f523360045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b34610200575f366003190112610200576040515f5f8051602061145883398151915254610e4281611256565b8084529060018116908115610a7b5750600114610e8b5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206114588339815191525f9081529091507fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351305b828210610ed7575060209150820101826109e3565b6001816020925483858801015201910190610ec2565b34610200575f36600319011261020057602060405160128152f35b3461020057606036600319011261020057610f216111de565b610f296111f4565b60443590610f368361128e565b335f9081526020919091526040902054925f198410610f5a575b61097993506112e6565b828410610fc5576001600160a01b03811615610fb2573315610f9f5761097993610f838261128e565b60018060a01b0333165f526020528360405f2091039055610f50565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610200575f3660031901126102005760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b34610200575f3660031901126102005760206040517fe139ae077c83a170e27cd05d87fe0b415d536060747dd88ee74acd879eb5ca2d8152f35b346102005760403660031901126102005761106f6111de565b602435903315610fb2576001600160a01b0316908115610f9f576110923361128e565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610200575f366003190112610200576040515f5f805160206113d88339815191525461110181611256565b8084529060018116908115610a7b575060011461114a5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206113d88339815191525f9081529091505f805160206114988339815191525b828210611183575060209150820101826109e3565b600181602092548385880101520191019061116e565b34610200575f3660031901126102005780620249f060209252f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361020057565b602435906001600160a01b038216820361020057565b60043590811515820361020057565b60243590811515820361020057565b9181601f840112156102005782359167ffffffffffffffff8311610200576020838186019501011161020057565b90600182811c92168015611284575b602083101461127057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611265565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0316908115610e03576001600160a01b03169182156113a457815f525f805160206113f883398151915260205260405f205481811061138b57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f805160206113f883398151915284520360405f2055845f525f805160206113f8833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b5f80516020611418833981519152546001600160a01b03163303610c4a5756feaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab40052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab401af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab402237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00086b346b4832b5eb9e9b74a7a2e3ea9d51c350d5e7f9abe0429e7545c4dde9efa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","sourceMap":"515:2564:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;2324:62:1;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;-1:-1:-1;;;;;;515:2564:8;-1:-1:-1;;;;;515:2564:8;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;2742:43:0;-1:-1:-1;;2742:43:0;515:2564:8;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;-1:-1:-1;;;;;515:2564:8;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1141:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1407:1;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;4789:20:2;515:2564:8;;:::i;:::-;4789:20:2;;:::i;:::-;:29;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;805:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;2324:62:1;;;;:::i;:::-;2154:17:8;;;:41;;;515:2564;2154:62;;;515:2564;2154:85;;;515:2564;2154:112;;;515:2564;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;11853:17:2;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;11853:17:2;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2366:24;515:2564;;;;;;;;2338:8;515:2564;11853:17:2;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;2366:24;;;515:2564;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;2366:24;515:2564;;;;;;;;;;;;;;;2338:8;515:2564;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;2338:8;515:2564;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;;515:2564:8;;;;;;;;;;;;-1:-1:-1;;;515:2564:8;;;;;;;2154:112;2243:23;2262:4;2243:23;;;2154:112;;:85;2220:19;515:2564;2220:19;;;2154:85;;:62;2199:17;;;;2154:62;;:41;2175:20;2192:3;2175:20;;;2154:41;;515:2564;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;;:::i;:::-;;2715:20;;;515:2564;2715:20;515:2564;;2715:20;515:2564;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;4563:5:2;515:2564:8;;:::i;:::-;;;987:10:3;;4563:5:2;:::i;:::-;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;11853:17:2;;515:2564:8;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;-1:-1:-1;;;;;515:2564:8;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;2715:20;;;515:2564;2715:20;515:2564;;2715:20;515:2564;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;884:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;969:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1054:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;987:10:3;-1:-1:-1;;;;;515:2564:8;;;3373:24:0;3369:96;;-1:-1:-1;;;;;;;;;;;515:2564:8;;-1:-1:-1;;;;;;515:2564:8;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;987:10:3;515:2564:8;;;;;;;;-1:-1:-1;;;;;515:2564:8;3996:40:1;-1:-1:-1;;3996:40:1;515:2564:8;3369:96:0;3420:34;;;515:2564:8;3420:34:0;987:10:3;515:2564:8;;;;3420:34:0;515:2564:8;;;;;;-1:-1:-1;;515:2564:8;;;;2324:62:1;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;-1:-1:-1;;;;;;515:2564:8;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;515:2564:8;3996:40:1;-1:-1:-1;;3996:40:1;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;515:2564:8;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;2010:10;9251:21:2;9247:89;;2010:10:8;515:2564;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;7531:19:2;;;7527:115;;2010:10:8;;515:2564;2010:10;;515:2564;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;8003:14:2;515:2564:8;;8003:14:2;515:2564:8;;;;;;8280:25:2;515:2564:8;2010:10;8280:25:2;;515:2564:8;7527:115:2;7577:50;;;515:2564:8;7577:50:2;2010:10:8;515:2564;;;;;;;;7577:50:2;9247:89;9295:30;;;515:2564:8;9295:30:2;515:2564:8;;;;;9295:30:2;515:2564:8;;;;;;-1:-1:-1;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;3826:2:2;515:2564:8;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;:::i;:::-;;;4789:20:2;;;;:::i;:::-;987:10:3;-1:-1:-1;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;11834:36:2;;11830:309;;515:2564:8;6120:5:2;;;;:::i;11830:309::-;11890:24;;;11886:130;;-1:-1:-1;;;;;515:2564:8;;11065:19:2;11061:89;;987:10:3;11163:21:2;11159:90;;6120:5;11258:20;;;;:::i;:::-;515:2564:8;;;;;987:10:3;515:2564:8;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;515:2564:8;;;;;11830:309:2;;11159:90;11207:31;;;515:2564:8;11207:31:2;515:2564:8;;;;;11207:31:2;11061:89;11107:32;;;515:2564:8;11107:32:2;515:2564:8;;;;;11107:32:2;11886:130;11941:60;;;;;515:2564:8;11941:60:2;987:10:3;515:2564:8;;;;;;;;11941:60:2;515:2564:8;;;;;;-1:-1:-1;;515:2564:8;;;;;3999:14:2;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1482:24;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;987:10:3;;11065:19:2;11061:89;;-1:-1:-1;;;;;515:2564:8;;11163:21:2;;11159:90;;11258:20;987:10:3;11258:20:2;:::i;:::-;515:2564:8;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;515:2564:8;;;;;;;11339:31:2;515:2564:8;987:10:3;11339:31:2;;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;1584:7;515:2564;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;:::o;:::-;;;;-1:-1:-1;;;;;515:2564:8;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;515:2564:8;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;515:2564:8;;;;;4789:13:2;515:2564:8;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;;;;-1:-1:-1;;515:2564:8;;;;:::o;6527:300:2:-;-1:-1:-1;;;;;515:2564:8;;6610:18:2;;6606:86;;-1:-1:-1;;;;;515:2564:8;;6705:16:2;;6701:86;;515:2564:8;6626:1:2;515:2564:8;-1:-1:-1;;;;;;;;;;;515:2564:8;;;6626:1:2;515:2564:8;;7531:19:2;;;7527:115;;515:2564:8;8280:25:2;515:2564:8;;;;6626:1:2;515:2564:8;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;6626:1:2;515:2564:8;;;6626:1:2;515:2564:8;-1:-1:-1;;;;;;;;;;;515:2564:8;;;6626:1:2;515:2564:8;;;;;;;;;;;;8280:25:2;6527:300::o;7527:115::-;7577:50;;;;6626:1;7577:50;;515:2564:8;;;;;;6626:1:2;7577:50;6701:86;6744:32;;;6626:1;6744:32;6626:1;6744:32;515:2564:8;;6626:1:2;6744:32;2679:162:1;-1:-1:-1;;;;;;;;;;;515:2564:8;-1:-1:-1;;;;;515:2564:8;987:10:3;2738:23:1;2734:101;;2679:162::o","linkReferences":{},"cborAuxdata":{"1":{"value":"0xa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","offset":5304}},"immutableReferences":{},"transformations":[],"transformationValues":{}},"deployment":{"transactionHash":"0x3c2d07a546466af7fc3677547abe09ff8cfbca04995308a7b4d46a1eac4b5865","blockNumber":"26197756","transactionIndex":"60","deployer":"0xBb145cA83272c3806D4dDc75cA1D5514789cF1C5"},"sources":{"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.20;\n\nimport {OwnableUpgradeable} from \"./OwnableUpgradeable.sol\";\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This extension of the {Ownable} contract includes a two-step mechanism to transfer\n * ownership, where the new owner must call {acceptOwnership} in order to replace the\n * old one. This can help prevent common mistakes, such as transfers of ownership to\n * incorrect accounts, or to contracts that are unable to interact with the\n * permission system.\n *\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\n    /// @custom:storage-location erc7201:openzeppelin.storage.Ownable2Step\n    struct Ownable2StepStorage {\n        address _pendingOwner;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable2Step\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant Ownable2StepStorageLocation = 0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00;\n\n    function _getOwnable2StepStorage() private pure returns (Ownable2StepStorage storage $) {\n        assembly {\n            $.slot := Ownable2StepStorageLocation\n        }\n    }\n\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n    function __Ownable2Step_init() internal onlyInitializing {\n    }\n\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Returns the address of the pending owner.\n     */\n    function pendingOwner() public view virtual returns (address) {\n        Ownable2StepStorage storage $ = _getOwnable2StepStorage();\n        return $._pendingOwner;\n    }\n\n    /**\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n     * Can only be called by the current owner.\n     *\n     * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\n     */\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\n        Ownable2StepStorage storage $ = _getOwnable2StepStorage();\n        $._pendingOwner = newOwner;\n        emit OwnershipTransferStarted(owner(), newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual override {\n        Ownable2StepStorage storage $ = _getOwnable2StepStorage();\n        delete $._pendingOwner;\n        super._transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev The new owner accepts the ownership transfer.\n     */\n    function acceptOwnership() public virtual {\n        address sender = _msgSender();\n        if (pendingOwner() != sender) {\n            revert OwnableUnauthorizedAccount(sender);\n        }\n        _transferOwnership(sender);\n    }\n}\n"},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n    /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n    struct OwnableStorage {\n        address _owner;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n    function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n        assembly {\n            $.slot := OwnableStorageLocation\n        }\n    }\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    function __Ownable_init(address initialOwner) internal onlyInitializing {\n        __Ownable_init_unchained(initialOwner);\n    }\n\n    function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        OwnableStorage storage $ = _getOwnableStorage();\n        return $._owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        OwnableStorage storage $ = _getOwnableStorage();\n        address oldOwner = $._owner;\n        $._owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"../../../lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport {ContextUpgradeable} from \"../../utils/ContextUpgradeable.sol\";\nimport {IERC20Errors} from \"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\";\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20, IERC20Metadata, IERC20Errors {\n    /// @custom:storage-location erc7201:openzeppelin.storage.ERC20\n    struct ERC20Storage {\n        mapping(address account => uint256) _balances;\n\n        mapping(address account => mapping(address spender => uint256)) _allowances;\n\n        uint256 _totalSupply;\n\n        string _name;\n        string _symbol;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ERC20\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant ERC20StorageLocation = 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00;\n\n    function _getERC20Storage() private pure returns (ERC20Storage storage $) {\n        assembly {\n            $.slot := ERC20StorageLocation\n        }\n    }\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * Both values are immutable: they can only be set once during construction.\n     */\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\n        __ERC20_init_unchained(name_, symbol_);\n    }\n\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\n        ERC20Storage storage $ = _getERC20Storage();\n        $._name = name_;\n        $._symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /// @inheritdoc IERC20\n    function totalSupply() public view virtual returns (uint256) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._totalSupply;\n    }\n\n    /// @inheritdoc IERC20\n    function balanceOf(address account) public view virtual returns (uint256) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /// @inheritdoc IERC20\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        ERC20Storage storage $ = _getERC20Storage();\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            $._totalSupply += value;\n        } else {\n            uint256 fromBalance = $._balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                $._balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                $._totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                $._balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation sets the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the `transferFrom` operation can force the flag to\n     * true using the following override:\n     *\n     * ```solidity\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        ERC20Storage storage $ = _getERC20Storage();\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        $._allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance < type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"../../../lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n    function __Context_init() internal onlyInitializing {\n    }\n\n    function __Context_init_unchained() internal onlyInitializing {\n    }\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"../../../lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (interfaces/draft-IERC6093.sol)\n\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"../../../lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n *     function initialize() initializer public {\n *         __ERC20_init(\"MyToken\", \"MTK\");\n *     }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n *     function initializeV2() reinitializer(2) public {\n *         __ERC20Permit_init(\"MyToken\");\n *     }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n *     _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n    /**\n     * @dev Storage of the initializable contract.\n     *\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n     * when using with upgradeable contracts.\n     *\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n     */\n    struct InitializableStorage {\n        /**\n         * @dev Indicates that the contract has been initialized.\n         */\n        uint64 _initialized;\n        /**\n         * @dev Indicates that the contract is in the process of being initialized.\n         */\n        bool _initializing;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n    /**\n     * @dev The contract is already initialized.\n     */\n    error InvalidInitialization();\n\n    /**\n     * @dev The contract is not initializing.\n     */\n    error NotInitializing();\n\n    /**\n     * @dev Triggered when the contract has been initialized or reinitialized.\n     */\n    event Initialized(uint64 version);\n\n    /**\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n     * `onlyInitializing` functions can be used to initialize parent contracts.\n     *\n     * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n     * production.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier initializer() {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        // Cache values to avoid duplicated sloads\n        bool isTopLevelCall = !$._initializing;\n        uint64 initialized = $._initialized;\n\n        // Allowed calls:\n        // - initialSetup: the contract is not in the initializing state and no previous version was\n        //                 initialized\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\n        //                 current contract is just being deployed\n        bool initialSetup = initialized == 0 && isTopLevelCall;\n        bool construction = initialized == 1 && address(this).code.length == 0;\n\n        if (!initialSetup && !construction) {\n            revert InvalidInitialization();\n        }\n        $._initialized = 1;\n        if (isTopLevelCall) {\n            $._initializing = true;\n        }\n        _;\n        if (isTopLevelCall) {\n            $._initializing = false;\n            emit Initialized(1);\n        }\n    }\n\n    /**\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n     * used to initialize parent contracts.\n     *\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n     * are added through upgrades and that require initialization.\n     *\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\n     *\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n     * a contract, executing them in the right order is up to the developer or operator.\n     *\n     * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier reinitializer(uint64 version) {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing || $._initialized >= version) {\n            revert InvalidInitialization();\n        }\n        $._initialized = version;\n        $._initializing = true;\n        _;\n        $._initializing = false;\n        emit Initialized(version);\n    }\n\n    /**\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\n     */\n    modifier onlyInitializing() {\n        _checkInitializing();\n        _;\n    }\n\n    /**\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n     */\n    function _checkInitializing() internal view virtual {\n        if (!_isInitializing()) {\n            revert NotInitializing();\n        }\n    }\n\n    /**\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n     * through proxies.\n     *\n     * Emits an {Initialized} event the first time it is successfully executed.\n     */\n    function _disableInitializers() internal virtual {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing) {\n            revert InvalidInitialization();\n        }\n        if ($._initialized != type(uint64).max) {\n            $._initialized = type(uint64).max;\n            emit Initialized(type(uint64).max);\n        }\n    }\n\n    /**\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\n     */\n    function _getInitializedVersion() internal view returns (uint64) {\n        return _getInitializableStorage()._initialized;\n    }\n\n    /**\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n     */\n    function _isInitializing() internal view returns (bool) {\n        return _getInitializableStorage()._initializing;\n    }\n\n    /**\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\n     *\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\n     */\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\n        return INITIALIZABLE_STORAGE;\n    }\n\n    /**\n     * @dev Returns a pointer to the storage namespace.\n     */\n    // solhint-disable-next-line var-name-mixedcase\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n        bytes32 slot = _initializableStorageSlot();\n        assembly {\n            $.slot := slot\n        }\n    }\n}\n"},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"src/ProtectedToken.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nimport {ERC20Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\nimport {Ownable2StepUpgradeable} from \"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\";\n\n/// @notice Final accounting implementation for the existing CLAUS proxy.\n/// @dev No initializer, mint, pause, blacklist, custom transfer logic or upgrade entrypoint.\n/// ProxyAdmin must be irreversibly disabled before claiming permanence.\ncontract ProtectedToken is ERC20Upgradeable, Ownable2StepUpgradeable {\n    struct Metadata { string name; string symbol; string uri; }\n    bytes32 private constant METADATA_SLOT = 0xaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab400;\n    address public constant poolManager = 0x000000000004444c5dc75cB358380D2e3dE08A90;\n    address public constant hook = 0x37Bfb8AC7C960E558657871D41Ca70E07e7DbfFf;\n    address public constant collection = 0x80396c7131159eB92E7E84839e51C9887A7A95d9;\n    address public constant legacyExit = 0x1591Ea904Bd0eC553A766dFe20eFAC3d809272fC;\n    address public constant positionExit = 0x596921e47589118Be45A60C93e25F90B7df12B78;\n    error RemovedRestriction();\n    event MetadataUpdated(string name,string symbol,string tokenURI);\n\n    constructor() { _disableInitializers(); }\n    function protectionVersion() external pure returns(uint256) { return 1; }\n    function protectionKind() external pure returns(bytes32) { return keccak256(\"CLAUS_TOKEN\"); }\n    function maximumTotalTaxPips() external pure returns(uint24) { return 150_000; }\n    function restrictionPolicyVersion() external pure returns(uint256) { return 0; }\n    function name() public view override returns(string memory) { return _metadata().name; }\n    function symbol() public view override returns(string memory) { return _metadata().symbol; }\n    function tokenURI() external view returns(string memory) { return _metadata().uri; }\n    function burn(uint256 amount) external { _burn(msg.sender,amount); }\n    function updateMetadata(string calldata n,string calldata s,string calldata uri) external onlyOwner {\n        require(bytes(n).length>0 && bytes(n).length<=128 && bytes(s).length>0 && bytes(s).length<=32 && bytes(uri).length<=2048,\"invalid metadata\");\n        Metadata storage m=_metadata(); m.name=n; m.symbol=s; m.uri=uri; emit MetadataUpdated(n,s,uri);\n    }\n    // Historical ABI only. No transfer consults these selectors or their old storage.\n    function isDistributor(address) external pure returns(bool) { return false; }\n    function setDistributor(address,bool) external pure { revert RemovedRestriction(); }\n    function activateFwaTransfers() external pure { revert RemovedRestriction(); }\n    function increaseTransferAllowance(uint256) external pure {}\n    function getTransferAllowance() external pure returns(uint256) { return type(uint256).max; }\n    function fixedPayoutContext(bool) external pure {}\n    function _metadata() private pure returns(Metadata storage m) { bytes32 slot=METADATA_SLOT; assembly {m.slot:=slot} }\n}\n"}},"compilation":{"language":"Solidity","compiler":"solc","compilerVersion":"0.8.26+commit.8a97fa7a","compilerSettings":{"viaIR":true,"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun","remappings":["@openzeppelin/contracts-upgradeable/=../../../lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=../../../lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=../../../lib/v4-periphery/lib/v4-core/","@uniswap/v4-periphery/=../../../lib/v4-periphery/","forge-std/=../../../lib/forge-std/src/","permit2/=../../../lib/v4-periphery/lib/permit2/","solmate/=../../../lib/v4-periphery/lib/v4-core/lib/solmate/"]},"name":"ProtectedToken","fullyQualifiedName":"src/ProtectedToken.sol:ProtectedToken"},"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"name":"ERC20InsufficientAllowance","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientBalance","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidApprover","type":"error","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidReceiver","type":"error","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSender","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSpender","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"name":"InvalidInitialization","type":"error","inputs":[]},{"name":"NotInitializing","type":"error","inputs":[]},{"name":"OwnableInvalidOwner","type":"error","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"name":"OwnableUnauthorizedAccount","type":"error","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"name":"RemovedRestriction","type":"error","inputs":[]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Initialized","type":"event","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"name":"MetadataUpdated","type":"event","inputs":[{"name":"name","type":"string","indexed":false,"internalType":"string"},{"name":"symbol","type":"string","indexed":false,"internalType":"string"},{"name":"tokenURI","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"name":"OwnershipTransferStarted","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"acceptOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"activateFwaTransfers","type":"function","inputs":[],"outputs":[],"stateMutability":"pure"},{"name":"allowance","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"burn","type":"function","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"collection","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"fixedPayoutContext","type":"function","inputs":[{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"name":"getTransferAllowance","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"hook","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"increaseTransferAllowance","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"name":"isDistributor","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"name":"legacyExit","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"maximumTotalTaxPips","type":"function","inputs":[],"outputs":[{"name":"","type":"uint24","internalType":"uint24"}],"stateMutability":"pure"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"pendingOwner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"poolManager","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"positionExit","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"protectionKind","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"name":"protectionVersion","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"restrictionPolicyVersion","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"setDistributor","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"tokenURI","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"updateMetadata","type":"function","inputs":[{"name":"n","type":"string","internalType":"string"},{"name":"s","type":"string","internalType":"string"},{"name":"uri","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"}],"metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"RemovedRestriction","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"string","name":"tokenURI","type":"string"}],"name":"MetadataUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateFwaTransfers","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collection","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"","type":"bool"}],"name":"fixedPayoutContext","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTransferAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"hook","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"increaseTransferAllowance","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDistributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"legacyExit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumTotalTaxPips","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolManager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionExit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionKind","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"protectionVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictionPolicyVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"setDistributor","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"n","type":"string"},{"internalType":"string","name":"s","type":"string"},{"internalType":"string","name":"uri","type":"string"}],"name":"updateMetadata","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"No initializer, mint, pause, blacklist, custom transfer logic or upgrade entrypoint. ProxyAdmin must be irreversibly disabled before claiming permanence.","errors":{"ERC20InsufficientAllowance(address,uint256,uint256)":[{"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers.","params":{"allowance":"Amount of tokens a `spender` is allowed to operate with.","needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner."}}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers.","params":{"balance":"Current balance for the interacting account.","needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred."}}],"ERC20InvalidApprover(address)":[{"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals.","params":{"approver":"Address initiating an approval operation."}}],"ERC20InvalidReceiver(address)":[{"details":"Indicates a failure with the token `receiver`. Used in transfers.","params":{"receiver":"Address to which tokens are being transferred."}}],"ERC20InvalidSender(address)":[{"details":"Indicates a failure with the token `sender`. Used in transfers.","params":{"sender":"Address whose tokens are being transferred."}}],"ERC20InvalidSpender(address)":[{"details":"Indicates a failure with the `spender` to be approved. Used in approvals.","params":{"spender":"Address that may be allowed to operate on tokens without being their owner."}}],"InvalidInitialization()":[{"details":"The contract is already initialized."}],"NotInitializing()":[{"details":"The contract is not initializing."}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}]},"events":{"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."}},"version":1},"userdoc":{"kind":"user","methods":{},"notice":"Final accounting implementation for the existing CLAUS proxy.","version":1}},"settings":{"compilationTarget":{"src/ProtectedToken.sol":"ProtectedToken"},"evmVersion":"cancun","libraries":{},"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"enabled":true,"runs":200},"remappings":[":@openzeppelin/contracts-upgradeable/=../../../lib/openzeppelin-contracts-upgradeable/contracts/",":@openzeppelin/contracts/=../../../lib/openzeppelin-contracts/contracts/",":@uniswap/v4-core/=../../../lib/v4-periphery/lib/v4-core/",":@uniswap/v4-periphery/=../../../lib/v4-periphery/",":forge-std/=../../../lib/forge-std/src/",":permit2/=../../../lib/v4-periphery/lib/permit2/",":solmate/=../../../lib/v4-periphery/lib/v4-core/lib/solmate/"],"viaIR":true},"sources":{"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"keccak256":"0x046f0d6d983477925b41d34b2afdb3c91baa0013ee0d75b8827272d5f7bd91b6","license":"MIT","urls":["bzz-raw://6fbab22f787846d71167e4f8cd20d431dce7e53de32476bbb808d11ca3333a93","dweb:/ipfs/QmVcFs4kzfEgpC9gP1bwo5r8g5QUs7pTBBpj9HBtdJLioQ"]},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"keccak256":"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14","license":"MIT","urls":["bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed","dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b"]},"../../../lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0xd518def45c722a6e803e1e26e625db25e01497f672ca566cca585d234ec903b0","license":"MIT","urls":["bzz-raw://6e7de3fccd96783244790cde282435ce0fd3a44ab4ccb10f17005c743202882f","dweb:/ipfs/QmYSepstTqs5UPJvjeJXkWU5R659yReqrSgSGGh65hkbdK"]},"../../../lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"keccak256":"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d","license":"MIT","urls":["bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455","dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS"]},"../../../lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998","license":"MIT","urls":["bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c","dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL"]},"../../../lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"keccak256":"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05","license":"MIT","urls":["bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08","dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q"]},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2","license":"MIT","urls":["bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303","dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV"]},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f","license":"MIT","urls":["bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e","dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR"]},"src/ProtectedToken.sol":{"keccak256":"0xa203fce6c8507a6775fae384e734fa70f534dab1a134b37841e1854a06fbc0a8","license":"MIT","urls":["bzz-raw://421168898d29284edabc2c52714f4b932ad48da4fb607f39bf4b29b5e5d5392f","dweb:/ipfs/Qmf2UYFhPRGTueyt5kQBH3Ebu6416HrxVj6yt1gDb3HdYX"]}},"version":1},"storageLayout":{"types":null,"storage":[]},"transientStorageLayout":null,"userdoc":{"kind":"user","notice":"Final accounting implementation for the existing CLAUS proxy.","methods":{},"version":1},"devdoc":{"kind":"dev","errors":{"NotInitializing()":[{"details":"The contract is not initializing."}],"InvalidInitialization()":[{"details":"The contract is already initialized."}],"ERC20InvalidSender(address)":[{"params":{"sender":"Address whose tokens are being transferred."},"details":"Indicates a failure with the token `sender`. Used in transfers."}],"ERC20InvalidSpender(address)":[{"params":{"spender":"Address that may be allowed to operate on tokens without being their owner."},"details":"Indicates a failure with the `spender` to be approved. Used in approvals."}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"ERC20InvalidApprover(address)":[{"params":{"approver":"Address initiating an approval operation."},"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals."}],"ERC20InvalidReceiver(address)":[{"params":{"receiver":"Address to which tokens are being transferred."},"details":"Indicates a failure with the token `receiver`. Used in transfers."}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","balance":"Current balance for the interacting account."},"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers."}],"ERC20InsufficientAllowance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner.","allowance":"Amount of tokens a `spender` is allowed to operate with."},"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers."}]},"events":{"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."},"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"details":"No initializer, mint, pause, blacklist, custom transfer logic or upgrade entrypoint. ProxyAdmin must be irreversibly disabled before claiming permanence.","methods":{"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"sourceIds":{"src/ProtectedToken.sol":{"id":8},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"id":6},"../../../lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"id":4},"../../../lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"id":5},"../../../lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"id":3},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"id":1},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"id":7},"../../../lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"id":2},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"id":0}},"additionalInput":null,"stdJsonInput":{"sources":{"src/ProtectedToken.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.26;\n\nimport {ERC20Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\nimport {Ownable2StepUpgradeable} from \"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\";\n\n/// @notice Final accounting implementation for the existing CLAUS proxy.\n/// @dev No initializer, mint, pause, blacklist, custom transfer logic or upgrade entrypoint.\n/// ProxyAdmin must be irreversibly disabled before claiming permanence.\ncontract ProtectedToken is ERC20Upgradeable, Ownable2StepUpgradeable {\n    struct Metadata { string name; string symbol; string uri; }\n    bytes32 private constant METADATA_SLOT = 0xaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab400;\n    address public constant poolManager = 0x000000000004444c5dc75cB358380D2e3dE08A90;\n    address public constant hook = 0x37Bfb8AC7C960E558657871D41Ca70E07e7DbfFf;\n    address public constant collection = 0x80396c7131159eB92E7E84839e51C9887A7A95d9;\n    address public constant legacyExit = 0x1591Ea904Bd0eC553A766dFe20eFAC3d809272fC;\n    address public constant positionExit = 0x596921e47589118Be45A60C93e25F90B7df12B78;\n    error RemovedRestriction();\n    event MetadataUpdated(string name,string symbol,string tokenURI);\n\n    constructor() { _disableInitializers(); }\n    function protectionVersion() external pure returns(uint256) { return 1; }\n    function protectionKind() external pure returns(bytes32) { return keccak256(\"CLAUS_TOKEN\"); }\n    function maximumTotalTaxPips() external pure returns(uint24) { return 150_000; }\n    function restrictionPolicyVersion() external pure returns(uint256) { return 0; }\n    function name() public view override returns(string memory) { return _metadata().name; }\n    function symbol() public view override returns(string memory) { return _metadata().symbol; }\n    function tokenURI() external view returns(string memory) { return _metadata().uri; }\n    function burn(uint256 amount) external { _burn(msg.sender,amount); }\n    function updateMetadata(string calldata n,string calldata s,string calldata uri) external onlyOwner {\n        require(bytes(n).length>0 && bytes(n).length<=128 && bytes(s).length>0 && bytes(s).length<=32 && bytes(uri).length<=2048,\"invalid metadata\");\n        Metadata storage m=_metadata(); m.name=n; m.symbol=s; m.uri=uri; emit MetadataUpdated(n,s,uri);\n    }\n    // Historical ABI only. No transfer consults these selectors or their old storage.\n    function isDistributor(address) external pure returns(bool) { return false; }\n    function setDistributor(address,bool) external pure { revert RemovedRestriction(); }\n    function activateFwaTransfers() external pure { revert RemovedRestriction(); }\n    function increaseTransferAllowance(uint256) external pure {}\n    function getTransferAllowance() external pure returns(uint256) { return type(uint256).max; }\n    function fixedPayoutContext(bool) external pure {}\n    function _metadata() private pure returns(Metadata storage m) { bytes32 slot=METADATA_SLOT; assembly {m.slot:=slot} }\n}\n"},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)\n\npragma solidity >=0.4.16;\n\n/**\n * @dev Interface of the ERC-20 standard as defined in the ERC.\n */\ninterface IERC20 {\n    /**\n     * @dev Emitted when `value` tokens are moved from one account (`from`) to\n     * another (`to`).\n     *\n     * Note that `value` may be zero.\n     */\n    event Transfer(address indexed from, address indexed to, uint256 value);\n\n    /**\n     * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n     * a call to {approve}. `value` is the new allowance.\n     */\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n\n    /**\n     * @dev Returns the value of tokens in existence.\n     */\n    function totalSupply() external view returns (uint256);\n\n    /**\n     * @dev Returns the value of tokens owned by `account`.\n     */\n    function balanceOf(address account) external view returns (uint256);\n\n    /**\n     * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transfer(address to, uint256 value) external returns (bool);\n\n    /**\n     * @dev Returns the remaining number of tokens that `spender` will be\n     * allowed to spend on behalf of `owner` through {transferFrom}. This is\n     * zero by default.\n     *\n     * This value changes when {approve} or {transferFrom} are called.\n     */\n    function allowance(address owner, address spender) external view returns (uint256);\n\n    /**\n     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n     * caller's tokens.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * IMPORTANT: Beware that changing an allowance with this method brings the risk\n     * that someone may use both the old and the new allowance by unfortunate\n     * transaction ordering. One possible solution to mitigate this race\n     * condition is to first reduce the spender's allowance to 0 and set the\n     * desired value afterwards:\n     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n     *\n     * Emits an {Approval} event.\n     */\n    function approve(address spender, uint256 value) external returns (bool);\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to` using the\n     * allowance mechanism. `value` is then deducted from the caller's\n     * allowance.\n     *\n     * Returns a boolean value indicating whether the operation succeeded.\n     *\n     * Emits a {Transfer} event.\n     */\n    function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"../../../lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (interfaces/draft-IERC6093.sol)\n\npragma solidity >=0.8.4;\n\n/**\n * @dev Standard ERC-20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.\n */\ninterface IERC20Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC20InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC20InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     * @param allowance Amount of tokens a `spender` is allowed to operate with.\n     * @param needed Minimum amount required to perform a transfer.\n     */\n    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC20InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n     * @param spender Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC-721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.\n */\ninterface IERC721Errors {\n    /**\n     * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-721.\n     * Used in balance queries.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721InvalidOwner(address owner);\n\n    /**\n     * @dev Indicates a `tokenId` whose `owner` is the zero address.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721NonexistentToken(uint256 tokenId);\n\n    /**\n     * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param tokenId Identifier number of a token.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC721InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC721InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC721InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC-1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.\n */\ninterface IERC1155Errors {\n    /**\n     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     * @param balance Current balance for the interacting account.\n     * @param needed Minimum amount required to perform a transfer.\n     * @param tokenId Identifier number of a token.\n     */\n    error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n    /**\n     * @dev Indicates a failure with the token `sender`. Used in transfers.\n     * @param sender Address whose tokens are being transferred.\n     */\n    error ERC1155InvalidSender(address sender);\n\n    /**\n     * @dev Indicates a failure with the token `receiver`. Used in transfers.\n     * @param receiver Address to which tokens are being transferred.\n     */\n    error ERC1155InvalidReceiver(address receiver);\n\n    /**\n     * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     * @param owner Address of the current owner of a token.\n     */\n    error ERC1155MissingApprovalForAll(address operator, address owner);\n\n    /**\n     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n     * @param approver Address initiating an approval operation.\n     */\n    error ERC1155InvalidApprover(address approver);\n\n    /**\n     * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n     * @param operator Address that may be allowed to operate on tokens without being their owner.\n     */\n    error ERC1155InvalidOperator(address operator);\n\n    /**\n     * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n     * Used in batch transfers.\n     * @param idsLength Length of the array of token identifiers\n     * @param valuesLength Length of the array of token amounts\n     */\n    error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"../../../lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.3.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```solidity\n * contract MyToken is ERC20Upgradeable {\n *     function initialize() initializer public {\n *         __ERC20_init(\"MyToken\", \"MTK\");\n *     }\n * }\n *\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n *     function initializeV2() reinitializer(2) public {\n *         __ERC20Permit_init(\"MyToken\");\n *     }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n *     _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n    /**\n     * @dev Storage of the initializable contract.\n     *\n     * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions\n     * when using with upgradeable contracts.\n     *\n     * @custom:storage-location erc7201:openzeppelin.storage.Initializable\n     */\n    struct InitializableStorage {\n        /**\n         * @dev Indicates that the contract has been initialized.\n         */\n        uint64 _initialized;\n        /**\n         * @dev Indicates that the contract is in the process of being initialized.\n         */\n        bool _initializing;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Initializable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00;\n\n    /**\n     * @dev The contract is already initialized.\n     */\n    error InvalidInitialization();\n\n    /**\n     * @dev The contract is not initializing.\n     */\n    error NotInitializing();\n\n    /**\n     * @dev Triggered when the contract has been initialized or reinitialized.\n     */\n    event Initialized(uint64 version);\n\n    /**\n     * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n     * `onlyInitializing` functions can be used to initialize parent contracts.\n     *\n     * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any\n     * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in\n     * production.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier initializer() {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        // Cache values to avoid duplicated sloads\n        bool isTopLevelCall = !$._initializing;\n        uint64 initialized = $._initialized;\n\n        // Allowed calls:\n        // - initialSetup: the contract is not in the initializing state and no previous version was\n        //                 initialized\n        // - construction: the contract is initialized at version 1 (no reinitialization) and the\n        //                 current contract is just being deployed\n        bool initialSetup = initialized == 0 && isTopLevelCall;\n        bool construction = initialized == 1 && address(this).code.length == 0;\n\n        if (!initialSetup && !construction) {\n            revert InvalidInitialization();\n        }\n        $._initialized = 1;\n        if (isTopLevelCall) {\n            $._initializing = true;\n        }\n        _;\n        if (isTopLevelCall) {\n            $._initializing = false;\n            emit Initialized(1);\n        }\n    }\n\n    /**\n     * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n     * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n     * used to initialize parent contracts.\n     *\n     * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n     * are added through upgrades and that require initialization.\n     *\n     * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n     * cannot be nested. If one is invoked in the context of another, execution will revert.\n     *\n     * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n     * a contract, executing them in the right order is up to the developer or operator.\n     *\n     * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization.\n     *\n     * Emits an {Initialized} event.\n     */\n    modifier reinitializer(uint64 version) {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing || $._initialized >= version) {\n            revert InvalidInitialization();\n        }\n        $._initialized = version;\n        $._initializing = true;\n        _;\n        $._initializing = false;\n        emit Initialized(version);\n    }\n\n    /**\n     * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n     * {initializer} and {reinitializer} modifiers, directly or indirectly.\n     */\n    modifier onlyInitializing() {\n        _checkInitializing();\n        _;\n    }\n\n    /**\n     * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}.\n     */\n    function _checkInitializing() internal view virtual {\n        if (!_isInitializing()) {\n            revert NotInitializing();\n        }\n    }\n\n    /**\n     * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n     * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n     * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n     * through proxies.\n     *\n     * Emits an {Initialized} event the first time it is successfully executed.\n     */\n    function _disableInitializers() internal virtual {\n        // solhint-disable-next-line var-name-mixedcase\n        InitializableStorage storage $ = _getInitializableStorage();\n\n        if ($._initializing) {\n            revert InvalidInitialization();\n        }\n        if ($._initialized != type(uint64).max) {\n            $._initialized = type(uint64).max;\n            emit Initialized(type(uint64).max);\n        }\n    }\n\n    /**\n     * @dev Returns the highest version that has been initialized. See {reinitializer}.\n     */\n    function _getInitializedVersion() internal view returns (uint64) {\n        return _getInitializableStorage()._initialized;\n    }\n\n    /**\n     * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n     */\n    function _isInitializing() internal view returns (bool) {\n        return _getInitializableStorage()._initializing;\n    }\n\n    /**\n     * @dev Pointer to storage slot. Allows integrators to override it with a custom storage location.\n     *\n     * NOTE: Consider following the ERC-7201 formula to derive storage locations.\n     */\n    function _initializableStorageSlot() internal pure virtual returns (bytes32) {\n        return INITIALIZABLE_STORAGE;\n    }\n\n    /**\n     * @dev Returns a pointer to the storage namespace.\n     */\n    // solhint-disable-next-line var-name-mixedcase\n    function _getInitializableStorage() private pure returns (InitializableStorage storage $) {\n        bytes32 slot = _initializableStorageSlot();\n        assembly {\n            $.slot := slot\n        }\n    }\n}\n"},"../../../lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n    function __Context_init() internal onlyInitializing {\n    }\n\n    function __Context_init_unchained() internal onlyInitializing {\n    }\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {ContextUpgradeable} from \"../utils/ContextUpgradeable.sol\";\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n    /// @custom:storage-location erc7201:openzeppelin.storage.Ownable\n    struct OwnableStorage {\n        address _owner;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300;\n\n    function _getOwnableStorage() private pure returns (OwnableStorage storage $) {\n        assembly {\n            $.slot := OwnableStorageLocation\n        }\n    }\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    function __Ownable_init(address initialOwner) internal onlyInitializing {\n        __Ownable_init_unchained(initialOwner);\n    }\n\n    function __Ownable_init_unchained(address initialOwner) internal onlyInitializing {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        OwnableStorage storage $ = _getOwnableStorage();\n        return $._owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        OwnableStorage storage $ = _getOwnableStorage();\n        address oldOwner = $._owner;\n        $._owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity >=0.6.2;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC-20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() external view returns (string memory);\n\n    /**\n     * @dev Returns the symbol of the token.\n     */\n    function symbol() external view returns (string memory);\n\n    /**\n     * @dev Returns the decimals places of the token.\n     */\n    function decimals() external view returns (uint8);\n}\n"},"../../../lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.5.0) (token/ERC20/ERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport {ContextUpgradeable} from \"../../utils/ContextUpgradeable.sol\";\nimport {IERC20Errors} from \"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\";\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * The default value of {decimals} is 18. To change this, you should override\n * this function so it returns a different value.\n *\n * We have followed general OpenZeppelin Contracts guidelines: functions revert\n * instead returning `false` on failure. This behavior is nonetheless\n * conventional and does not conflict with the expectations of ERC-20\n * applications.\n */\nabstract contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20, IERC20Metadata, IERC20Errors {\n    /// @custom:storage-location erc7201:openzeppelin.storage.ERC20\n    struct ERC20Storage {\n        mapping(address account => uint256) _balances;\n\n        mapping(address account => mapping(address spender => uint256)) _allowances;\n\n        uint256 _totalSupply;\n\n        string _name;\n        string _symbol;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ERC20\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant ERC20StorageLocation = 0x52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00;\n\n    function _getERC20Storage() private pure returns (ERC20Storage storage $) {\n        assembly {\n            $.slot := ERC20StorageLocation\n        }\n    }\n\n    /**\n     * @dev Sets the values for {name} and {symbol}.\n     *\n     * Both values are immutable: they can only be set once during construction.\n     */\n    function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing {\n        __ERC20_init_unchained(name_, symbol_);\n    }\n\n    function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing {\n        ERC20Storage storage $ = _getERC20Storage();\n        $._name = name_;\n        $._symbol = symbol_;\n    }\n\n    /**\n     * @dev Returns the name of the token.\n     */\n    function name() public view virtual returns (string memory) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._name;\n    }\n\n    /**\n     * @dev Returns the symbol of the token, usually a shorter version of the\n     * name.\n     */\n    function symbol() public view virtual returns (string memory) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._symbol;\n    }\n\n    /**\n     * @dev Returns the number of decimals used to get its user representation.\n     * For example, if `decimals` equals `2`, a balance of `505` tokens should\n     * be displayed to a user as `5.05` (`505 / 10 ** 2`).\n     *\n     * Tokens usually opt for a value of 18, imitating the relationship between\n     * Ether and Wei. This is the default value returned by this function, unless\n     * it's overridden.\n     *\n     * NOTE: This information is only used for _display_ purposes: it in\n     * no way affects any of the arithmetic of the contract, including\n     * {IERC20-balanceOf} and {IERC20-transfer}.\n     */\n    function decimals() public view virtual returns (uint8) {\n        return 18;\n    }\n\n    /// @inheritdoc IERC20\n    function totalSupply() public view virtual returns (uint256) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._totalSupply;\n    }\n\n    /// @inheritdoc IERC20\n    function balanceOf(address account) public view virtual returns (uint256) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._balances[account];\n    }\n\n    /**\n     * @dev See {IERC20-transfer}.\n     *\n     * Requirements:\n     *\n     * - `to` cannot be the zero address.\n     * - the caller must have a balance of at least `value`.\n     */\n    function transfer(address to, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _transfer(owner, to, value);\n        return true;\n    }\n\n    /// @inheritdoc IERC20\n    function allowance(address owner, address spender) public view virtual returns (uint256) {\n        ERC20Storage storage $ = _getERC20Storage();\n        return $._allowances[owner][spender];\n    }\n\n    /**\n     * @dev See {IERC20-approve}.\n     *\n     * NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n     * `transferFrom`. This is semantically equivalent to an infinite approval.\n     *\n     * Requirements:\n     *\n     * - `spender` cannot be the zero address.\n     */\n    function approve(address spender, uint256 value) public virtual returns (bool) {\n        address owner = _msgSender();\n        _approve(owner, spender, value);\n        return true;\n    }\n\n    /**\n     * @dev See {IERC20-transferFrom}.\n     *\n     * Skips emitting an {Approval} event indicating an allowance update. This is not\n     * required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].\n     *\n     * NOTE: Does not update the allowance if the current allowance\n     * is the maximum `uint256`.\n     *\n     * Requirements:\n     *\n     * - `from` and `to` cannot be the zero address.\n     * - `from` must have a balance of at least `value`.\n     * - the caller must have allowance for ``from``'s tokens of at least\n     * `value`.\n     */\n    function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {\n        address spender = _msgSender();\n        _spendAllowance(from, spender, value);\n        _transfer(from, to, value);\n        return true;\n    }\n\n    /**\n     * @dev Moves a `value` amount of tokens from `from` to `to`.\n     *\n     * This internal function is equivalent to {transfer}, and can be used to\n     * e.g. implement automatic token fees, slashing mechanisms, etc.\n     *\n     * Emits a {Transfer} event.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _transfer(address from, address to, uint256 value) internal {\n        if (from == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        if (to == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(from, to, value);\n    }\n\n    /**\n     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`\n     * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding\n     * this function.\n     *\n     * Emits a {Transfer} event.\n     */\n    function _update(address from, address to, uint256 value) internal virtual {\n        ERC20Storage storage $ = _getERC20Storage();\n        if (from == address(0)) {\n            // Overflow check required: The rest of the code assumes that totalSupply never overflows\n            $._totalSupply += value;\n        } else {\n            uint256 fromBalance = $._balances[from];\n            if (fromBalance < value) {\n                revert ERC20InsufficientBalance(from, fromBalance, value);\n            }\n            unchecked {\n                // Overflow not possible: value <= fromBalance <= totalSupply.\n                $._balances[from] = fromBalance - value;\n            }\n        }\n\n        if (to == address(0)) {\n            unchecked {\n                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.\n                $._totalSupply -= value;\n            }\n        } else {\n            unchecked {\n                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.\n                $._balances[to] += value;\n            }\n        }\n\n        emit Transfer(from, to, value);\n    }\n\n    /**\n     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).\n     * Relies on the `_update` mechanism\n     *\n     * Emits a {Transfer} event with `from` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead.\n     */\n    function _mint(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidReceiver(address(0));\n        }\n        _update(address(0), account, value);\n    }\n\n    /**\n     * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.\n     * Relies on the `_update` mechanism.\n     *\n     * Emits a {Transfer} event with `to` set to the zero address.\n     *\n     * NOTE: This function is not virtual, {_update} should be overridden instead\n     */\n    function _burn(address account, uint256 value) internal {\n        if (account == address(0)) {\n            revert ERC20InvalidSender(address(0));\n        }\n        _update(account, address(0), value);\n    }\n\n    /**\n     * @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.\n     *\n     * This internal function is equivalent to `approve`, and can be used to\n     * e.g. set automatic allowances for certain subsystems, etc.\n     *\n     * Emits an {Approval} event.\n     *\n     * Requirements:\n     *\n     * - `owner` cannot be the zero address.\n     * - `spender` cannot be the zero address.\n     *\n     * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.\n     */\n    function _approve(address owner, address spender, uint256 value) internal {\n        _approve(owner, spender, value, true);\n    }\n\n    /**\n     * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.\n     *\n     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by\n     * `_spendAllowance` during the `transferFrom` operation sets the flag to false. This saves gas by not emitting any\n     * `Approval` event during `transferFrom` operations.\n     *\n     * Anyone who wishes to continue emitting `Approval` events on the `transferFrom` operation can force the flag to\n     * true using the following override:\n     *\n     * ```solidity\n     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {\n     *     super._approve(owner, spender, value, true);\n     * }\n     * ```\n     *\n     * Requirements are the same as {_approve}.\n     */\n    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {\n        ERC20Storage storage $ = _getERC20Storage();\n        if (owner == address(0)) {\n            revert ERC20InvalidApprover(address(0));\n        }\n        if (spender == address(0)) {\n            revert ERC20InvalidSpender(address(0));\n        }\n        $._allowances[owner][spender] = value;\n        if (emitEvent) {\n            emit Approval(owner, spender, value);\n        }\n    }\n\n    /**\n     * @dev Updates `owner`'s allowance for `spender` based on spent `value`.\n     *\n     * Does not update the allowance value in case of infinite allowance.\n     * Revert if not enough allowance is available.\n     *\n     * Does not emit an {Approval} event.\n     */\n    function _spendAllowance(address owner, address spender, uint256 value) internal virtual {\n        uint256 currentAllowance = allowance(owner, spender);\n        if (currentAllowance < type(uint256).max) {\n            if (currentAllowance < value) {\n                revert ERC20InsufficientAllowance(spender, currentAllowance, value);\n            }\n            unchecked {\n                _approve(owner, spender, currentAllowance - value, false);\n            }\n        }\n    }\n}\n"},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.1.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.20;\n\nimport {OwnableUpgradeable} from \"./OwnableUpgradeable.sol\";\nimport {Initializable} from \"@openzeppelin/contracts/proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * This extension of the {Ownable} contract includes a two-step mechanism to transfer\n * ownership, where the new owner must call {acceptOwnership} in order to replace the\n * old one. This can help prevent common mistakes, such as transfers of ownership to\n * incorrect accounts, or to contracts that are unable to interact with the\n * permission system.\n *\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\n    /// @custom:storage-location erc7201:openzeppelin.storage.Ownable2Step\n    struct Ownable2StepStorage {\n        address _pendingOwner;\n    }\n\n    // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.Ownable2Step\")) - 1)) & ~bytes32(uint256(0xff))\n    bytes32 private constant Ownable2StepStorageLocation = 0x237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00;\n\n    function _getOwnable2StepStorage() private pure returns (Ownable2StepStorage storage $) {\n        assembly {\n            $.slot := Ownable2StepStorageLocation\n        }\n    }\n\n    event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n    function __Ownable2Step_init() internal onlyInitializing {\n    }\n\n    function __Ownable2Step_init_unchained() internal onlyInitializing {\n    }\n    /**\n     * @dev Returns the address of the pending owner.\n     */\n    function pendingOwner() public view virtual returns (address) {\n        Ownable2StepStorage storage $ = _getOwnable2StepStorage();\n        return $._pendingOwner;\n    }\n\n    /**\n     * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n     * Can only be called by the current owner.\n     *\n     * Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\n     */\n    function transferOwnership(address newOwner) public virtual override onlyOwner {\n        Ownable2StepStorage storage $ = _getOwnable2StepStorage();\n        $._pendingOwner = newOwner;\n        emit OwnershipTransferStarted(owner(), newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual override {\n        Ownable2StepStorage storage $ = _getOwnable2StepStorage();\n        delete $._pendingOwner;\n        super._transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev The new owner accepts the ownership transfer.\n     */\n    function acceptOwnership() public virtual {\n        address sender = _msgSender();\n        if (pendingOwner() != sender) {\n            revert OwnableUnauthorizedAccount(sender);\n        }\n        _transferOwnership(sender);\n    }\n}\n"}},"language":"Solidity","settings":{"viaIR":true,"metadata":{"bytecodeHash":"ipfs"},"optimizer":{"runs":200,"enabled":true},"evmVersion":"cancun","remappings":["@openzeppelin/contracts-upgradeable/=../../../lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=../../../lib/openzeppelin-contracts/contracts/","@uniswap/v4-core/=../../../lib/v4-periphery/lib/v4-core/","@uniswap/v4-periphery/=../../../lib/v4-periphery/","forge-std/=../../../lib/forge-std/src/","permit2/=../../../lib/v4-periphery/lib/permit2/","solmate/=../../../lib/v4-periphery/lib/v4-core/lib/solmate/"]}},"stdJsonOutput":{"sources":{"src/ProtectedToken.sol":{"id":8},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"id":6},"../../../lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"id":4},"../../../lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol":{"id":5},"../../../lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol":{"id":3},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol":{"id":1},"../../../lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"id":7},"../../../lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"id":2},"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol":{"id":0}},"contracts":{"src/ProtectedToken.sol":{"ProtectedToken":{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"name":"ERC20InsufficientAllowance","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InsufficientBalance","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"name":"ERC20InvalidApprover","type":"error","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidReceiver","type":"error","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSender","type":"error","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"name":"ERC20InvalidSpender","type":"error","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"name":"InvalidInitialization","type":"error","inputs":[]},{"name":"NotInitializing","type":"error","inputs":[]},{"name":"OwnableInvalidOwner","type":"error","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"name":"OwnableUnauthorizedAccount","type":"error","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"name":"RemovedRestriction","type":"error","inputs":[]},{"name":"Approval","type":"event","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"Initialized","type":"event","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"name":"MetadataUpdated","type":"event","inputs":[{"name":"name","type":"string","indexed":false,"internalType":"string"},{"name":"symbol","type":"string","indexed":false,"internalType":"string"},{"name":"tokenURI","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"name":"OwnershipTransferStarted","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"OwnershipTransferred","type":"event","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"name":"Transfer","type":"event","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"name":"acceptOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"activateFwaTransfers","type":"function","inputs":[],"outputs":[],"stateMutability":"pure"},{"name":"allowance","type":"function","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"approve","type":"function","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"balanceOf","type":"function","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"burn","type":"function","inputs":[{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"collection","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"decimals","type":"function","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"name":"fixedPayoutContext","type":"function","inputs":[{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"name":"getTransferAllowance","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"hook","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"increaseTransferAllowance","type":"function","inputs":[{"name":"","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"pure"},{"name":"isDistributor","type":"function","inputs":[{"name":"","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"name":"legacyExit","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"maximumTotalTaxPips","type":"function","inputs":[],"outputs":[{"name":"","type":"uint24","internalType":"uint24"}],"stateMutability":"pure"},{"name":"name","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"owner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"pendingOwner","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"poolManager","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"positionExit","type":"function","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"name":"protectionKind","type":"function","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"name":"protectionVersion","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"renounceOwnership","type":"function","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"name":"restrictionPolicyVersion","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"pure"},{"name":"setDistributor","type":"function","inputs":[{"name":"","type":"address","internalType":"address"},{"name":"","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"pure"},{"name":"symbol","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"tokenURI","type":"function","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"name":"totalSupply","type":"function","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"name":"transfer","type":"function","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferFrom","type":"function","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"name":"transferOwnership","type":"function","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"name":"updateMetadata","type":"function","inputs":[{"name":"n","type":"string","internalType":"string"},{"name":"s","type":"string","internalType":"string"},{"name":"uri","type":"string","internalType":"string"}],"outputs":[],"stateMutability":"nonpayable"}],"metadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RemovedRestriction\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"}],\"name\":\"MetadataUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activateFwaTransfers\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collection\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"fixedPayoutContext\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTransferAllowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hook\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"increaseTransferAllowance\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isDistributor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"legacyExit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumTotalTaxPips\",\"outputs\":[{\"internalType\":\"uint24\",\"name\":\"\",\"type\":\"uint24\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"poolManager\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"positionExit\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protectionKind\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protectionVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"restrictionPolicyVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"setDistributor\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"n\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"s\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"uri\",\"type\":\"string\"}],\"name\":\"updateMetadata\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"No initializer, mint, pause, blacklist, custom transfer logic or upgrade entrypoint. ProxyAdmin must be irreversibly disabled before claiming permanence.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`’s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Final accounting implementation for the existing CLAUS proxy.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/ProtectedToken.sol\":\"ProtectedToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts-upgradeable/=../../../lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=../../../lib/openzeppelin-contracts/contracts/\",\":@uniswap/v4-core/=../../../lib/v4-periphery/lib/v4-core/\",\":@uniswap/v4-periphery/=../../../lib/v4-periphery/\",\":forge-std/=../../../lib/forge-std/src/\",\":permit2/=../../../lib/v4-periphery/lib/permit2/\",\":solmate/=../../../lib/v4-periphery/lib/v4-core/lib/solmate/\"],\"viaIR\":true},\"sources\":{\"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/Ownable2StepUpgradeable.sol\":{\"keccak256\":\"0x046f0d6d983477925b41d34b2afdb3c91baa0013ee0d75b8827272d5f7bd91b6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6fbab22f787846d71167e4f8cd20d431dce7e53de32476bbb808d11ca3333a93\",\"dweb:/ipfs/QmVcFs4kzfEgpC9gP1bwo5r8g5QUs7pTBBpj9HBtdJLioQ\"]},\"../../../lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x85c3b9bac35a90dce9ed9b31532c3739cae432359d8d7ff59cb6712f21c7ed14\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a084d32ad4ad5b1d4494124d7695334dbeff81c2d1846a01ef1215153dd38eed\",\"dweb:/ipfs/QmbzDrfeogDd3n65mADjLuy97oAMgh2CtiUxKKEpM3WB8b\"]},\"../../../lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0xd518def45c722a6e803e1e26e625db25e01497f672ca566cca585d234ec903b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e7de3fccd96783244790cde282435ce0fd3a44ab4ccb10f17005c743202882f\",\"dweb:/ipfs/QmYSepstTqs5UPJvjeJXkWU5R659yReqrSgSGGh65hkbdK\"]},\"../../../lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xad316bdc3ee64a0e29773256245045dc57b92660799ff14f668f7c0da9456a9d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://66463434d266816fca2a3a2734ceee88544e61b7cc3899c50333b46e8e771455\",\"dweb:/ipfs/QmPYCzHjki1HQLvBub3uUqoUKGrwdgR3xP9Zpya14YTdXS\"]},\"../../../lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x1b88b3fb3d85ba5496d7d5f396f83ee1fddcdd6762059ff65992655b67920998\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89393bb3212da1c0889601b9706a07b39419ddc4d2faab9eaf6e7f9152cf6a1c\",\"dweb:/ipfs/QmcCfzzxv1Bkdz1c1yF4gQCeYb6Us5BJANnzTFqawfd1HL\"]},\"../../../lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"../../../lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"../../../lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"src/ProtectedToken.sol\":{\"keccak256\":\"0xa203fce6c8507a6775fae384e734fa70f534dab1a134b37841e1854a06fbc0a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://421168898d29284edabc2c52714f4b932ad48da4fb607f39bf4b29b5e5d5392f\",\"dweb:/ipfs/Qmf2UYFhPRGTueyt5kQBH3Ebu6416HrxVj6yt1gDb3HdYX\"]}},\"version\":1}","userdoc":{"kind":"user","notice":"Final accounting implementation for the existing CLAUS proxy.","methods":{},"version":1},"devdoc":{"kind":"dev","errors":{"NotInitializing()":[{"details":"The contract is not initializing."}],"InvalidInitialization()":[{"details":"The contract is already initialized."}],"ERC20InvalidSender(address)":[{"params":{"sender":"Address whose tokens are being transferred."},"details":"Indicates a failure with the token `sender`. Used in transfers."}],"ERC20InvalidSpender(address)":[{"params":{"spender":"Address that may be allowed to operate on tokens without being their owner."},"details":"Indicates a failure with the `spender` to be approved. Used in approvals."}],"OwnableInvalidOwner(address)":[{"details":"The owner is not a valid owner account. (eg. `address(0)`)"}],"ERC20InvalidApprover(address)":[{"params":{"approver":"Address initiating an approval operation."},"details":"Indicates a failure with the `approver` of a token to be approved. Used in approvals."}],"ERC20InvalidReceiver(address)":[{"params":{"receiver":"Address to which tokens are being transferred."},"details":"Indicates a failure with the token `receiver`. Used in transfers."}],"OwnableUnauthorizedAccount(address)":[{"details":"The caller account is not authorized to perform an operation."}],"ERC20InsufficientBalance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","sender":"Address whose tokens are being transferred.","balance":"Current balance for the interacting account."},"details":"Indicates an error related to the current `balance` of a `sender`. Used in transfers."}],"ERC20InsufficientAllowance(address,uint256,uint256)":[{"params":{"needed":"Minimum amount required to perform a transfer.","spender":"Address that may be allowed to operate on tokens without being their owner.","allowance":"Amount of tokens a `spender` is allowed to operate with."},"details":"Indicates a failure with the `spender`’s `allowance`. Used in transfers."}]},"events":{"Initialized(uint64)":{"details":"Triggered when the contract has been initialized or reinitialized."},"Approval(address,address,uint256)":{"details":"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."},"Transfer(address,address,uint256)":{"details":"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."}},"details":"No initializer, mint, pause, blacklist, custom transfer logic or upgrade entrypoint. ProxyAdmin must be irreversibly disabled before claiming permanence.","methods":{"name()":{"details":"Returns the name of the token."},"owner()":{"details":"Returns the address of the current owner."},"symbol()":{"details":"Returns the symbol of the token, usually a shorter version of the name."},"decimals()":{"details":"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."},"totalSupply()":{"details":"Returns the value of tokens in existence."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"balanceOf(address)":{"details":"Returns the value of tokens owned by `account`."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner."},"approve(address,uint256)":{"details":"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."},"transfer(address,uint256)":{"details":"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."},"allowance(address,address)":{"details":"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner. Setting `newOwner` to the zero address is allowed; this can be used to cancel an initiated ownership transfer."},"transferFrom(address,address,uint256)":{"details":"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."}},"version":1},"storageLayout":{"types":null,"storage":[]},"transientStorageLayout":null,"evm":{"bytecode":{"object":"6080806040523460d0577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c1660c1576002600160401b03196001600160401b03821601605c575b6040516114ed90816100d58239f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f80604d565b63f92ee8a960e01b5f5260045ffd5b5f80fdfe6080806040526004361015610012575f80fd5b5f3560e01c90816306b7cb9c146111995750806306fdde03146110d5578063095ea7b314611056578063154e1e3f1461101c57806318160ddd14610fe057806323b872dd14610f08578063313ce56714610eed5780633c130d9014610e1657806342966c6814610d1e57806370a0823114610cda578063715018a614610c5d57806379ba509714610bb35780637d2a45dd14610b855780637de1e53614610b575780637f5a7c7b14610b295780638197ac3f14610b0e5780638560e7b314610aef5780638da5cb5b14610abb5780638f0c86fa14610a9757806395d89b411461099f578063a718e20d14610984578063a9059cbb14610953578063af9e723914610940578063d59ba0df1461090e578063db2a45701461030b578063dc4c90d3146102e2578063dd62ed3e1461029b578063dd6b5e8e14610280578063de7832d414610252578063ded99d2b14610238578063e30c3978146102045763f2fde38b1461017c575f80fd5b34610200576020366003190112610200576101956111de565b61019d6113b7565b5f8051602061147883398151915280546001600160a01b0319166001600160a01b039283169081179091555f80516020611418833981519152549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610200575f366003190112610200575f80516020611478833981519152546040516001600160a01b039091168152602090f35b34610200575f3660031901126102005760206040515f8152f35b34610200575f36600319011261020057602060405173596921e47589118be45a60c93e25f90b7df12b788152f35b34610200575f36600319011261020057602060405160018152f35b34610200576040366003190112610200576102b46111de565b6102c56102bf6111f4565b9161128e565b9060018060a01b03165f52602052602060405f2054604051908152f35b34610200575f3660031901126102005760206040516e04444c5dc75cb358380d2e3de08a908152f35b346102005760603660031901126102005760043567ffffffffffffffff81116102005761033c903690600401611228565b9060243567ffffffffffffffff81116102005761035d903690600401611228565b929060443567ffffffffffffffff81116102005761037f903690600401611228565b90916103896113b7565b83151580610903575b806108fa575b806108ef575b806108e3575b156108ab5767ffffffffffffffff841161067a576103cf5f805160206113d883398151915254611256565b601f8111610837575b50835f601f82116001146107af575f916107a4575b508460011b905f198660031b1c1916175f805160206113d8833981519152555b67ffffffffffffffff861161067a576104335f8051602061143883398151915254611256565b601f8111610735575b50855f601f8211600114610699575f9161068e575b508660011b905f198860031b1c1916175f80516020611438833981519152555b67ffffffffffffffff821161067a576104975f8051602061145883398151915254611256565b601f811161060b575b505f95601f83116001146105455782916105279161053595947f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d0995f9161053a575b508460011b905f198660031b1c1916175f80516020611458833981519152555b61051960405198899860608a5260608a01916112c6565b9187830360208901526112c6565b9184830360408601526112c6565b0390a1005b90508501358a6104e2565b5f805160206114588339815191525f9081527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351309790601f198516905b8181106105f35750917f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d098859492610535979661052795106105da575b5050600184811b015f8051602061145883398151915255610502565b8601355f19600387901b60f8161c1916905589806105be565b868301358a5560019099019860209283019201610581565b5f805160206114588339815191525f527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee628435130601f840160051c81019160208510610670575b601f0160051c01905b81811061066557506104a0565b5f8155600101610658565b909150819061064f565b634e487b7160e01b5f52604160045260245ffd5b905081013587610451565b5f805160206114388339815191525f9081527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e42353290192508890601f198216905b81811061071a575010610701575b5050600186811b015f8051602061143883398151915255610471565b8201355f19600389901b60f8161c1916905586806106e5565b8584013585556001909401936020938401938b9350016106d7565b5f805160206114388339815191525f527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e423532901601f880160051c8101916020891061079a575b601f0160051c01905b81811061078f575061043c565b5f8155600101610782565b9091508190610779565b9050850135876103ed565b9050601f198516905f805160206113d88339815191525f52855f80516020611498833981519152925f5b81811061081c575010610803575b5050600184811b015f805160206113d88339815191525561040d565b8601355f19600387901b60f8161c1916905586806107e7565b898401358555600190940193602093840193899350016107d9565b5f805160206113d88339815191525f52601f850160051c5f80516020611498833981519152019060208610610896575b601f0160051c5f8051602061149883398151915201905b81811061088b57506103d8565b5f815560010161087e565b5f805160206114988339815191529150610867565b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b506108008211156103a4565b50602086111561039e565b50851515610398565b506080841115610392565b34610200576040366003190112610200576109276111de565b50610930611219565b506354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057005b346102005760403660031901126102005761097961096f6111de565b60243590336112e6565b602060405160018152f35b34610200575f3660031901126102005760206040515f198152f35b34610200575f366003190112610200576040515f5f80516020611438833981519152546109cb81611256565b8084529060018116908115610a7b5750600114610a19575b50819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b0390f35b5f805160206114388339815191525f9081529091507fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e4235329015b828210610a65575060209150820101826109e3565b6001816020925483858801015201910190610a50565b90506020925060ff191682840152151560051b820101826109e3565b3461020057602036600319011261020057610ab06111de565b5060206040515f8152f35b34610200575f366003190112610200575f80516020611418833981519152546040516001600160a01b039091168152602090f35b34610200575f366003190112610200576354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057610b2761120a565b005b34610200575f3660031901126102005760206040517337bfb8ac7c960e558657871d41ca70e07e7dbfff8152f35b34610200575f3660031901126102005760206040517380396c7131159eb92e7e84839e51c9887a7a95d98152f35b34610200575f366003190112610200576020604051731591ea904bd0ec553a766dfe20efac3d809272fc8152f35b34610200575f366003190112610200575f8051602061147883398151915254336001600160a01b0390911603610c4a575f8051602061147883398151915280546001600160a01b03199081169091555f8051602061141883398151915280543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b63118cdaa760e01b5f523360045260245ffd5b34610200575f36600319011261020057610c756113b7565b5f8051602061147883398151915280546001600160a01b03199081169091555f80516020611418833981519152805491821690555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610200576020366003190112610200576001600160a01b03610cfb6111de565b165f525f805160206113f8833981519152602052602060405f2054604051908152f35b34610200576020366003190112610200576004353315610e0357335f525f805160206113f883398151915260205260405f2054818110610dea5790805f923384525f805160206113f8833981519152602052036040832055807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254037f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b63391434e360e21b5f523360045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b34610200575f366003190112610200576040515f5f8051602061145883398151915254610e4281611256565b8084529060018116908115610a7b5750600114610e8b5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206114588339815191525f9081529091507fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351305b828210610ed7575060209150820101826109e3565b6001816020925483858801015201910190610ec2565b34610200575f36600319011261020057602060405160128152f35b3461020057606036600319011261020057610f216111de565b610f296111f4565b60443590610f368361128e565b335f9081526020919091526040902054925f198410610f5a575b61097993506112e6565b828410610fc5576001600160a01b03811615610fb2573315610f9f5761097993610f838261128e565b60018060a01b0333165f526020528360405f2091039055610f50565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610200575f3660031901126102005760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b34610200575f3660031901126102005760206040517fe139ae077c83a170e27cd05d87fe0b415d536060747dd88ee74acd879eb5ca2d8152f35b346102005760403660031901126102005761106f6111de565b602435903315610fb2576001600160a01b0316908115610f9f576110923361128e565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610200575f366003190112610200576040515f5f805160206113d88339815191525461110181611256565b8084529060018116908115610a7b575060011461114a5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206113d88339815191525f9081529091505f805160206114988339815191525b828210611183575060209150820101826109e3565b600181602092548385880101520191019061116e565b34610200575f3660031901126102005780620249f060209252f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361020057565b602435906001600160a01b038216820361020057565b60043590811515820361020057565b60243590811515820361020057565b9181601f840112156102005782359167ffffffffffffffff8311610200576020838186019501011161020057565b90600182811c92168015611284575b602083101461127057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611265565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0316908115610e03576001600160a01b03169182156113a457815f525f805160206113f883398151915260205260405f205481811061138b57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f805160206113f883398151915284520360405f2055845f525f805160206113f8833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b5f80516020611418833981519152546001600160a01b03163303610c4a5756feaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab40052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab401af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab402237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00086b346b4832b5eb9e9b74a7a2e3ea9d51c350d5e7f9abe0429e7545c4dde9efa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","sourceMap":"515:2564:8:-:0;;;;;;;3147:66:5;515:2564:8;;;;;;7894:76:5;;-1:-1:-1;;;;;;;;;;;515:2564:8;;7983:34:5;7979:146;;-1:-1:-1;515:2564:8;;;;;;;;;7979:146:5;-1:-1:-1;;;;;;515:2564:8;-1:-1:-1;;;;;515:2564:8;;;3147:66:5;515:2564:8;;;8085:29:5;;515:2564:8;;8085:29:5;7979:146;;;;7894:76;7936:23;;;-1:-1:-1;7936:23:5;;-1:-1:-1;7936:23:5;515:2564:8;;;","linkReferences":{}},"deployedBytecode":{"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816306b7cb9c146111995750806306fdde03146110d5578063095ea7b314611056578063154e1e3f1461101c57806318160ddd14610fe057806323b872dd14610f08578063313ce56714610eed5780633c130d9014610e1657806342966c6814610d1e57806370a0823114610cda578063715018a614610c5d57806379ba509714610bb35780637d2a45dd14610b855780637de1e53614610b575780637f5a7c7b14610b295780638197ac3f14610b0e5780638560e7b314610aef5780638da5cb5b14610abb5780638f0c86fa14610a9757806395d89b411461099f578063a718e20d14610984578063a9059cbb14610953578063af9e723914610940578063d59ba0df1461090e578063db2a45701461030b578063dc4c90d3146102e2578063dd62ed3e1461029b578063dd6b5e8e14610280578063de7832d414610252578063ded99d2b14610238578063e30c3978146102045763f2fde38b1461017c575f80fd5b34610200576020366003190112610200576101956111de565b61019d6113b7565b5f8051602061147883398151915280546001600160a01b0319166001600160a01b039283169081179091555f80516020611418833981519152549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b5f80fd5b34610200575f366003190112610200575f80516020611478833981519152546040516001600160a01b039091168152602090f35b34610200575f3660031901126102005760206040515f8152f35b34610200575f36600319011261020057602060405173596921e47589118be45a60c93e25f90b7df12b788152f35b34610200575f36600319011261020057602060405160018152f35b34610200576040366003190112610200576102b46111de565b6102c56102bf6111f4565b9161128e565b9060018060a01b03165f52602052602060405f2054604051908152f35b34610200575f3660031901126102005760206040516e04444c5dc75cb358380d2e3de08a908152f35b346102005760603660031901126102005760043567ffffffffffffffff81116102005761033c903690600401611228565b9060243567ffffffffffffffff81116102005761035d903690600401611228565b929060443567ffffffffffffffff81116102005761037f903690600401611228565b90916103896113b7565b83151580610903575b806108fa575b806108ef575b806108e3575b156108ab5767ffffffffffffffff841161067a576103cf5f805160206113d883398151915254611256565b601f8111610837575b50835f601f82116001146107af575f916107a4575b508460011b905f198660031b1c1916175f805160206113d8833981519152555b67ffffffffffffffff861161067a576104335f8051602061143883398151915254611256565b601f8111610735575b50855f601f8211600114610699575f9161068e575b508660011b905f198860031b1c1916175f80516020611438833981519152555b67ffffffffffffffff821161067a576104975f8051602061145883398151915254611256565b601f811161060b575b505f95601f83116001146105455782916105279161053595947f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d0995f9161053a575b508460011b905f198660031b1c1916175f80516020611458833981519152555b61051960405198899860608a5260608a01916112c6565b9187830360208901526112c6565b9184830360408601526112c6565b0390a1005b90508501358a6104e2565b5f805160206114588339815191525f9081527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351309790601f198516905b8181106105f35750917f61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d098859492610535979661052795106105da575b5050600184811b015f8051602061145883398151915255610502565b8601355f19600387901b60f8161c1916905589806105be565b868301358a5560019099019860209283019201610581565b5f805160206114588339815191525f527fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee628435130601f840160051c81019160208510610670575b601f0160051c01905b81811061066557506104a0565b5f8155600101610658565b909150819061064f565b634e487b7160e01b5f52604160045260245ffd5b905081013587610451565b5f805160206114388339815191525f9081527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e42353290192508890601f198216905b81811061071a575010610701575b5050600186811b015f8051602061143883398151915255610471565b8201355f19600389901b60f8161c1916905586806106e5565b8584013585556001909401936020938401938b9350016106d7565b5f805160206114388339815191525f527fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e423532901601f880160051c8101916020891061079a575b601f0160051c01905b81811061078f575061043c565b5f8155600101610782565b9091508190610779565b9050850135876103ed565b9050601f198516905f805160206113d88339815191525f52855f80516020611498833981519152925f5b81811061081c575010610803575b5050600184811b015f805160206113d88339815191525561040d565b8601355f19600387901b60f8161c1916905586806107e7565b898401358555600190940193602093840193899350016107d9565b5f805160206113d88339815191525f52601f850160051c5f80516020611498833981519152019060208610610896575b601f0160051c5f8051602061149883398151915201905b81811061088b57506103d8565b5f815560010161087e565b5f805160206114988339815191529150610867565b60405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d6574616461746160801b6044820152606490fd5b506108008211156103a4565b50602086111561039e565b50851515610398565b506080841115610392565b34610200576040366003190112610200576109276111de565b50610930611219565b506354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057005b346102005760403660031901126102005761097961096f6111de565b60243590336112e6565b602060405160018152f35b34610200575f3660031901126102005760206040515f198152f35b34610200575f366003190112610200576040515f5f80516020611438833981519152546109cb81611256565b8084529060018116908115610a7b5750600114610a19575b50819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b0390f35b5f805160206114388339815191525f9081529091507fb83132009fbdeb8f5dedb67236fb249808043b818fe4786609e272e4235329015b828210610a65575060209150820101826109e3565b6001816020925483858801015201910190610a50565b90506020925060ff191682840152151560051b820101826109e3565b3461020057602036600319011261020057610ab06111de565b5060206040515f8152f35b34610200575f366003190112610200575f80516020611418833981519152546040516001600160a01b039091168152602090f35b34610200575f366003190112610200576354d7e1b960e01b5f5260045ffd5b3461020057602036600319011261020057610b2761120a565b005b34610200575f3660031901126102005760206040517337bfb8ac7c960e558657871d41ca70e07e7dbfff8152f35b34610200575f3660031901126102005760206040517380396c7131159eb92e7e84839e51c9887a7a95d98152f35b34610200575f366003190112610200576020604051731591ea904bd0ec553a766dfe20efac3d809272fc8152f35b34610200575f366003190112610200575f8051602061147883398151915254336001600160a01b0390911603610c4a575f8051602061147883398151915280546001600160a01b03199081169091555f8051602061141883398151915280543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b63118cdaa760e01b5f523360045260245ffd5b34610200575f36600319011261020057610c756113b7565b5f8051602061147883398151915280546001600160a01b03199081169091555f80516020611418833981519152805491821690555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b34610200576020366003190112610200576001600160a01b03610cfb6111de565b165f525f805160206113f8833981519152602052602060405f2054604051908152f35b34610200576020366003190112610200576004353315610e0357335f525f805160206113f883398151915260205260405f2054818110610dea5790805f923384525f805160206113f8833981519152602052036040832055807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254037f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a3005b63391434e360e21b5f523360045260245260445260645ffd5b634b637e8f60e11b5f525f60045260245ffd5b34610200575f366003190112610200576040515f5f8051602061145883398151915254610e4281611256565b8084529060018116908115610a7b5750600114610e8b5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206114588339815191525f9081529091507fb86a83b1f712847698a6e7fc9a77bfbcf99e19fbe68e9c06836b1ee6284351305b828210610ed7575060209150820101826109e3565b6001816020925483858801015201910190610ec2565b34610200575f36600319011261020057602060405160128152f35b3461020057606036600319011261020057610f216111de565b610f296111f4565b60443590610f368361128e565b335f9081526020919091526040902054925f198410610f5a575b61097993506112e6565b828410610fc5576001600160a01b03811615610fb2573315610f9f5761097993610f838261128e565b60018060a01b0333165f526020528360405f2091039055610f50565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8284637dc7a0d960e11b5f523360045260245260445260645ffd5b34610200575f3660031901126102005760207f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254604051908152f35b34610200575f3660031901126102005760206040517fe139ae077c83a170e27cd05d87fe0b415d536060747dd88ee74acd879eb5ca2d8152f35b346102005760403660031901126102005761106f6111de565b602435903315610fb2576001600160a01b0316908115610f9f576110923361128e565b825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610200575f366003190112610200576040515f5f805160206113d88339815191525461110181611256565b8084529060018116908115610a7b575060011461114a5750819003601f01601f191681019067ffffffffffffffff82118183101761067a5760408290528190610a1590826111b4565b5f805160206113d88339815191525f9081529091505f805160206114988339815191525b828210611183575060209150820101826109e3565b600181602092548385880101520191019061116e565b34610200575f3660031901126102005780620249f060209252f35b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361020057565b602435906001600160a01b038216820361020057565b60043590811515820361020057565b60243590811515820361020057565b9181601f840112156102005782359167ffffffffffffffff8311610200576020838186019501011161020057565b90600182811c92168015611284575b602083101461127057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611265565b6001600160a01b03165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020526040902090565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0316908115610e03576001600160a01b03169182156113a457815f525f805160206113f883398151915260205260405f205481811061138b57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f805160206113f883398151915284520360405f2055845f525f805160206113f8833981519152825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b5f80516020611418833981519152546001600160a01b03163303610c4a5756feaf7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab40052c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace009016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab401af7f7287c9c163f7ebe81ce19f70fbce273b445ed7fb836babcf15904daab402237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00086b346b4832b5eb9e9b74a7a2e3ea9d51c350d5e7f9abe0429e7545c4dde9efa26469706673582212204078907f59153e746d4ca61757a4b256b3b656dde66620aec6d65daaa1f2065464736f6c634300081a0033","sourceMap":"515:2564:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;2324:62:1;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;-1:-1:-1;;;;;;515:2564:8;-1:-1:-1;;;;;515:2564:8;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;2742:43:0;-1:-1:-1;;2742:43:0;515:2564:8;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;-1:-1:-1;;;;;515:2564:8;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1141:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1407:1;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;4789:20:2;515:2564:8;;:::i;:::-;4789:20:2;;:::i;:::-;:29;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;805:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;2324:62:1;;;;:::i;:::-;2154:17:8;;;:41;;;515:2564;2154:62;;;515:2564;2154:85;;;515:2564;2154:112;;;515:2564;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;11853:17:2;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;11853:17:2;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;2366:24;515:2564;;;;;;;;2338:8;515:2564;11853:17:2;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;2366:24;;;515:2564;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;2366:24;515:2564;;;;;;;;;;;;;;;2338:8;515:2564;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;2338:8;515:2564;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2338:8;515:2564;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;;515:2564:8;;;;;;;;;;;;-1:-1:-1;;;515:2564:8;;;;;;;2154:112;2243:23;2262:4;2243:23;;;2154:112;;:85;2220:19;515:2564;2220:19;;;2154:85;;:62;2199:17;;;;2154:62;;:41;2175:20;2192:3;2175:20;;;2154:41;;515:2564;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;;:::i;:::-;;2715:20;;;515:2564;2715:20;515:2564;;2715:20;515:2564;;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;4563:5:2;515:2564:8;;:::i;:::-;;;987:10:3;;4563:5:2;:::i;:::-;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;11853:17:2;;515:2564:8;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;-1:-1:-1;;;;;515:2564:8;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;2715:20;;;515:2564;2715:20;515:2564;;2715:20;515:2564;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;884:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;969:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1054:42;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;987:10:3;-1:-1:-1;;;;;515:2564:8;;;3373:24:0;3369:96;;-1:-1:-1;;;;;;;;;;;515:2564:8;;-1:-1:-1;;;;;;515:2564:8;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;987:10:3;515:2564:8;;;;;;;;-1:-1:-1;;;;;515:2564:8;3996:40:1;-1:-1:-1;;3996:40:1;515:2564:8;3369:96:0;3420:34;;;515:2564:8;3420:34:0;987:10:3;515:2564:8;;;;3420:34:0;515:2564:8;;;;;;-1:-1:-1;;515:2564:8;;;;2324:62:1;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;-1:-1:-1;;;;;;515:2564:8;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;515:2564:8;3996:40:1;-1:-1:-1;;3996:40:1;515:2564:8;;;;;;;-1:-1:-1;;515:2564:8;;;;-1:-1:-1;;;;;515:2564:8;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;2010:10;9251:21:2;9247:89;;2010:10:8;515:2564;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;7531:19:2;;;7527:115;;2010:10:8;;515:2564;2010:10;;515:2564;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;;;8003:14:2;515:2564:8;;8003:14:2;515:2564:8;;;;;;8280:25:2;515:2564:8;2010:10;8280:25:2;;515:2564:8;7527:115:2;7577:50;;;515:2564:8;7577:50:2;2010:10:8;515:2564;;;;;;;;7577:50:2;9247:89;9295:30;;;515:2564:8;9295:30:2;515:2564:8;;;;;9295:30:2;515:2564:8;;;;;;-1:-1:-1;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;3826:2:2;515:2564:8;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;:::i;:::-;;;4789:20:2;;;;:::i;:::-;987:10:3;-1:-1:-1;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;11834:36:2;;11830:309;;515:2564:8;6120:5:2;;;;:::i;11830:309::-;11890:24;;;11886:130;;-1:-1:-1;;;;;515:2564:8;;11065:19:2;11061:89;;987:10:3;11163:21:2;11159:90;;6120:5;11258:20;;;;:::i;:::-;515:2564:8;;;;;987:10:3;515:2564:8;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;515:2564:8;;;;;11830:309:2;;11159:90;11207:31;;;515:2564:8;11207:31:2;515:2564:8;;;;;11207:31:2;11061:89;11107:32;;;515:2564:8;11107:32:2;515:2564:8;;;;;11107:32:2;11886:130;11941:60;;;;;515:2564:8;11941:60:2;987:10:3;515:2564:8;;;;;;;;11941:60:2;515:2564:8;;;;;;-1:-1:-1;;515:2564:8;;;;;3999:14:2;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;1482:24;515:2564;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;:::i;:::-;;;987:10:3;;11065:19:2;11061:89;;-1:-1:-1;;;;;515:2564:8;;11163:21:2;;11159:90;;11258:20;987:10:3;11258:20:2;:::i;:::-;515:2564:8;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;515:2564:8;;;;;;;11339:31:2;515:2564:8;987:10:3;11339:31:2;;515:2564:8;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;;;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;-1:-1:-1;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;;;-1:-1:-1;;;;;;;;;;;;515:2564:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;;1584:7;515:2564;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;515:2564:8;;;;:::o;:::-;;;;-1:-1:-1;;;;;515:2564:8;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;515:2564:8;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;515:2564:8;;;;;4789:13:2;515:2564:8;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;515:2564:8;;;;;;;;-1:-1:-1;;515:2564:8;;;;:::o;6527:300:2:-;-1:-1:-1;;;;;515:2564:8;;6610:18:2;;6606:86;;-1:-1:-1;;;;;515:2564:8;;6705:16:2;;6701:86;;515:2564:8;6626:1:2;515:2564:8;-1:-1:-1;;;;;;;;;;;515:2564:8;;;6626:1:2;515:2564:8;;7531:19:2;;;7527:115;;515:2564:8;8280:25:2;515:2564:8;;;;6626:1:2;515:2564:8;-1:-1:-1;;;;;;;;;;;515:2564:8;;;;6626:1:2;515:2564:8;;;6626:1:2;515:2564:8;-1:-1:-1;;;;;;;;;;;515:2564:8;;;6626:1:2;515:2564:8;;;;;;;;;;;;8280:25:2;6527:300::o;7527:115::-;7577:50;;;;6626:1;7577:50;;515:2564:8;;;;;;6626:1:2;7577:50;6701:86;6744:32;;;6626:1;6744:32;6626:1;6744:32;515:2564:8;;6626:1:2;6744:32;2679:162:1;-1:-1:-1;;;;;;;;;;;515:2564:8;-1:-1:-1;;;;;515:2564:8;987:10:3;2738:23:1;2734:101;;2679:162::o","linkReferences":{},"immutableReferences":{}}}}}}},"signatures":{"function":[{"signature":"acceptOwnership()","signatureHash4":"0x79ba5097","signatureHash32":"0x79ba5097e5519a381a52113cdcc59540d13f73fd9d26abc0453484a096cc96f2"},{"signature":"activateFwaTransfers()","signatureHash4":"0x8560e7b3","signatureHash32":"0x8560e7b313a44962eb3e65150608c0412ed649303eace150f60e229ce8921286"},{"signature":"allowance(address,address)","signatureHash4":"0xdd62ed3e","signatureHash32":"0xdd62ed3e90e97b3d417db9c0c7522647811bafca5afc6694f143588d255fdfb4"},{"signature":"approve(address,uint256)","signatureHash4":"0x095ea7b3","signatureHash32":"0x095ea7b334ae44009aa867bfb386f5c3b4b443ac6f0ee573fa91c4608fbadfba"},{"signature":"balanceOf(address)","signatureHash4":"0x70a08231","signatureHash32":"0x70a08231b98ef4ca268c9cc3f6b4590e4bfec28280db06bb5d45e689f2a360be"},{"signature":"burn(uint256)","signatureHash4":"0x42966c68","signatureHash32":"0x42966c689b5afe9b9b3f8a7103b2a19980d59629bfd6a20a60972312ed41d836"},{"signature":"collection()","signatureHash4":"0x7de1e536","signatureHash32":"0x7de1e536159a717666455104327908f5769ef558f3040990290562906d9ad086"},{"signature":"decimals()","signatureHash4":"0x313ce567","signatureHash32":"0x313ce567add4d438edf58b94ff345d7d38c45b17dfc0f947988d7819dca364f9"},{"signature":"fixedPayoutContext(bool)","signatureHash4":"0x8197ac3f","signatureHash32":"0x8197ac3fe05af596da05e1733ed13fbbd9b7ba344415c0a94681257c8c80428f"},{"signature":"getTransferAllowance()","signatureHash4":"0xa718e20d","signatureHash32":"0xa718e20de425d142bd43d27f1b0cfd29ba593e07f6b4872a86595de1afbe24db"},{"signature":"hook()","signatureHash4":"0x7f5a7c7b","signatureHash32":"0x7f5a7c7bdca9de90f9a6519c8d200a03eeda3484497129351fe5e935bcecff7f"},{"signature":"increaseTransferAllowance(uint256)","signatureHash4":"0xaf9e7239","signatureHash32":"0xaf9e7239e21935ef7ce4817cebc167e7b5f5d37a46c1f5b493b480f1d4828a6c"},{"signature":"isDistributor(address)","signatureHash4":"0x8f0c86fa","signatureHash32":"0x8f0c86fad5ffb5d4c49ed08525bcc28c07bda082fa1bce8293e3f41465633060"},{"signature":"legacyExit()","signatureHash4":"0x7d2a45dd","signatureHash32":"0x7d2a45dd6ffe6cb9e6eb56dbd401e9d0e47276ffe897c7daaeb1d2c7d39e3b65"},{"signature":"maximumTotalTaxPips()","signatureHash4":"0x06b7cb9c","signatureHash32":"0x06b7cb9cc07be4f533bc59ce3f4a070402446e8f1eebf96a18662ef8c173c2f4"},{"signature":"name()","signatureHash4":"0x06fdde03","signatureHash32":"0x06fdde0383f15d582d1a74511486c9ddf862a882fb7904b3d9fe9b8b8e58a796"},{"signature":"owner()","signatureHash4":"0x8da5cb5b","signatureHash32":"0x8da5cb5b36e7f68c1d2e56001220cdbdd3ba2616072f718acfda4a06441a807d"},{"signature":"pendingOwner()","signatureHash4":"0xe30c3978","signatureHash32":"0xe30c3978ddd82956a01b5cb08d17f1a2d73e636aeefb7b36f896e41d4c2aab90"},{"signature":"poolManager()","signatureHash4":"0xdc4c90d3","signatureHash32":"0xdc4c90d3c2342c5afe26871a21a4ecf482fcb45ae1ac8294d1dcff7a134352c0"},{"signature":"positionExit()","signatureHash4":"0xde7832d4","signatureHash32":"0xde7832d4032e41a8daf48393e0d61f6a2d6bdf5cd29c085abf63e6d48a480197"},{"signature":"protectionKind()","signatureHash4":"0x154e1e3f","signatureHash32":"0x154e1e3ffc2ab41573983f7cf76b2d37b70f520f55c9d3d6c4938a0af5917346"},{"signature":"protectionVersion()","signatureHash4":"0xdd6b5e8e","signatureHash32":"0xdd6b5e8ec739d694a371f08fd021acb528832837daf7e433ca78bf66e88be8c9"},{"signature":"renounceOwnership()","signatureHash4":"0x715018a6","signatureHash32":"0x715018a616b5f2044428f6fadb7deef4ce9ca76ef60ea57978964ad137bbe7ae"},{"signature":"restrictionPolicyVersion()","signatureHash4":"0xded99d2b","signatureHash32":"0xded99d2bf51cd6c8058e29bf20e24d86f685901edae4f7f1e18f3fa53dd1f863"},{"signature":"setDistributor(address,bool)","signatureHash4":"0xd59ba0df","signatureHash32":"0xd59ba0dfe8d520cf01857b09438103f5b614cb749fbe83b90db5821203ef85d4"},{"signature":"symbol()","signatureHash4":"0x95d89b41","signatureHash32":"0x95d89b41e2f5f391a79ec54e9d87c79d6e777c63e32c28da95b4e9e4a79250ec"},{"signature":"tokenURI()","signatureHash4":"0x3c130d90","signatureHash32":"0x3c130d90a3a3102bb1d43caeb4a43be8c3d9837b9c8f5a1bae2d0b50edd19a88"},{"signature":"totalSupply()","signatureHash4":"0x18160ddd","signatureHash32":"0x18160ddd7f15c72528c2f94fd8dfe3c8d5aa26e2c50c7d81f4bc7bee8d4b7932"},{"signature":"transfer(address,uint256)","signatureHash4":"0xa9059cbb","signatureHash32":"0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b"},{"signature":"transferFrom(address,address,uint256)","signatureHash4":"0x23b872dd","signatureHash32":"0x23b872dd7302113369cda2901243429419bec145408fa8b352b3dd92b66c680b"},{"signature":"transferOwnership(address)","signatureHash4":"0xf2fde38b","signatureHash32":"0xf2fde38b092330466c661fc723d5289b90272a3e580e3187d1d7ef788506c557"},{"signature":"updateMetadata(string,string,string)","signatureHash4":"0xdb2a4570","signatureHash32":"0xdb2a457087339876cec6a56109f7d634b4767baaab1dd3d9f6dd0b72bb25ce9c"}],"event":[{"signature":"Approval(address,address,uint256)","signatureHash4":"0x8c5be1e5","signatureHash32":"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"},{"signature":"Initialized(uint64)","signatureHash4":"0xc7f505b2","signatureHash32":"0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2"},{"signature":"MetadataUpdated(string,string,string)","signatureHash4":"0x61b45807","signatureHash32":"0x61b45807b5528344b8b2c26433a3aabead6c9dc6239e146e7ba7c812fded07d0"},{"signature":"OwnershipTransferred(address,address)","signatureHash4":"0x8be0079c","signatureHash32":"0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0"},{"signature":"OwnershipTransferStarted(address,address)","signatureHash4":"0x38d16b8c","signatureHash32":"0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700"},{"signature":"Transfer(address,address,uint256)","signatureHash4":"0xddf252ad","signatureHash32":"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"}],"error":[{"signature":"ERC20InsufficientAllowance(address,uint256,uint256)","signatureHash4":"0xfb8f41b2","signatureHash32":"0xfb8f41b23e99d2101d86da76cdfa87dd51c82ed07d3cb62cbc473e469dbc75c3"},{"signature":"ERC20InsufficientBalance(address,uint256,uint256)","signatureHash4":"0xe450d38c","signatureHash32":"0xe450d38cd8d9f7d95077d567d60ed49c7254716e6ad08fc9872816c97e0ffec6"},{"signature":"ERC20InvalidApprover(address)","signatureHash4":"0xe602df05","signatureHash32":"0xe602df05cc75712490294c6c104ab7c17f4030363910a7a2626411c6d3118847"},{"signature":"ERC20InvalidReceiver(address)","signatureHash4":"0xec442f05","signatureHash32":"0xec442f055133b72f3b2f9f0bb351c406b178527de2040a7d1feb4e058771f613"},{"signature":"ERC20InvalidSender(address)","signatureHash4":"0x96c6fd1e","signatureHash32":"0x96c6fd1edd0cd6ef7ff0ecc0facdf53148dc0048b57fe58af65755250a7a96bd"},{"signature":"ERC20InvalidSpender(address)","signatureHash4":"0x94280d62","signatureHash32":"0x94280d62c347d8d9f4d59a76ea321452406db88df38e0c9da304f58b57b373a2"},{"signature":"InvalidInitialization()","signatureHash4":"0xf92ee8a9","signatureHash32":"0xf92ee8a957075833165f68c320933b1a1294aafc84ee6e0dd3fb178008f9aaf5"},{"signature":"NotInitializing()","signatureHash4":"0xd7e6bcf8","signatureHash32":"0xd7e6bcf8597daa127dc9f0048d2f08d5ef140a2cb659feabd700beff1f7a8302"},{"signature":"OwnableInvalidOwner(address)","signatureHash4":"0x1e4fbdf7","signatureHash32":"0x1e4fbdf7f3ef8bcaa855599e3abf48b232380f183f08f6f813d9ffa5bd585188"},{"signature":"OwnableUnauthorizedAccount(address)","signatureHash4":"0x118cdaa7","signatureHash32":"0x118cdaa7a341953d1887a2245fd6665d741c67c8c50581daa59e1d03373fa188"},{"signature":"RemovedRestriction()","signatureHash4":"0x54d7e1b9","signatureHash32":"0x54d7e1b97bc0c7001986dc5eccde70676e87c19bdcc09f3c954b0e3aba6efd4e"}]},"proxyResolution":{"isProxy":false,"proxyType":null,"implementations":[]},"match":"exact_match","chainId":"1","address":"0x55D555bd85feD6ecf30fdA9B4c76019B844218A7"}