diff --git a/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.dbg.json b/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.dbg.json index bdd44d0..6340cb2 100644 --- a/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.dbg.json b/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.dbg.json index bdd44d0..6340cb2 100644 --- a/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.dbg.json b/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.dbg.json index bdd44d0..6340cb2 100644 --- a/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json b/backend/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json index d797b83..585408e 100644 --- a/backend/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json b/backend/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json index d797b83..585408e 100644 --- a/backend/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json b/backend/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json index c060b08..d703989 100644 --- a/backend/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json b/backend/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json index bdd44d0..6340cb2 100644 --- a/backend/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/@openzeppelin/contracts/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json b/backend/artifacts/@openzeppelin/contracts/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json index bdd44d0..6340cb2 100644 --- a/backend/artifacts/@openzeppelin/contracts/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +++ b/backend/artifacts/@openzeppelin/contracts/utils/ReentrancyGuard.sol/ReentrancyGuard.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../../../build-info/29c61b08eb590d8fc12c8139671115f4.json" } diff --git a/backend/artifacts/contracts/DLE.sol/DLE.dbg.json b/backend/artifacts/contracts/DLE.sol/DLE.dbg.json index 8ca2940..3a6d5a9 100644 --- a/backend/artifacts/contracts/DLE.sol/DLE.dbg.json +++ b/backend/artifacts/contracts/DLE.sol/DLE.dbg.json @@ -1,4 +1,4 @@ { "_format": "hh-sol-dbg-1", - "buildInfo": "../../build-info/3e12480a731f7a845287f0f150241bb4.json" + "buildInfo": "../../build-info/ae6e57b918547db576362d7ba12641eb.json" } diff --git a/backend/artifacts/contracts/DLE.sol/DLE.json b/backend/artifacts/contracts/DLE.sol/DLE.json index 6f54454..16a8e56 100644 --- a/backend/artifacts/contracts/DLE.sol/DLE.json +++ b/backend/artifacts/contracts/DLE.sol/DLE.json @@ -17,6 +17,11 @@ "name": "symbol", "type": "string" }, + { + "internalType": "string", + "name": "tokenImage", + "type": "string" + }, { "internalType": "string", "name": "location", @@ -32,11 +37,6 @@ "name": "jurisdiction", "type": "uint256" }, - { - "internalType": "uint256", - "name": "oktmo", - "type": "uint256" - }, { "internalType": "string[]", "name": "okvedCodes", @@ -431,6 +431,12 @@ "name": "symbol", "type": "string" }, + { + "indexed": false, + "internalType": "string", + "name": "tokenImage", + "type": "string" + }, { "indexed": false, "internalType": "string", @@ -449,12 +455,6 @@ "name": "jurisdiction", "type": "uint256" }, - { - "indexed": false, - "internalType": "uint256", - "name": "oktmo", - "type": "uint256" - }, { "indexed": false, "internalType": "string[]", @@ -486,6 +486,12 @@ "name": "symbol", "type": "string" }, + { + "indexed": false, + "internalType": "string", + "name": "tokenImage", + "type": "string" + }, { "indexed": false, "internalType": "string", @@ -504,12 +510,6 @@ "name": "jurisdiction", "type": "uint256" }, - { - "indexed": false, - "internalType": "uint256", - "name": "oktmo", - "type": "uint256" - }, { "indexed": false, "internalType": "string[]", @@ -1340,6 +1340,11 @@ "name": "symbol", "type": "string" }, + { + "internalType": "string", + "name": "tokenImage", + "type": "string" + }, { "internalType": "string", "name": "location", @@ -1355,11 +1360,6 @@ "name": "jurisdiction", "type": "uint256" }, - { - "internalType": "uint256", - "name": "oktmo", - "type": "uint256" - }, { "internalType": "uint256", "name": "kpp", @@ -1487,6 +1487,11 @@ "name": "symbol", "type": "string" }, + { + "internalType": "string", + "name": "tokenImage", + "type": "string" + }, { "internalType": "string", "name": "location", @@ -1502,11 +1507,6 @@ "name": "jurisdiction", "type": "uint256" }, - { - "internalType": "uint256", - "name": "oktmo", - "type": "uint256" - }, { "internalType": "string[]", "name": "okvedCodes", @@ -2308,8 +2308,8 @@ "type": "function" } ], - "bytecode": "0x6101608060405234620001f85762007e6f8038038091620000208262000213565b833980820160408212620001f85782516001600160401b0392838211620001f85781906101809182910312620001f8576200005a6200027f565b9082860151858111620001f85784876200007792860101620002f7565b825280830151858111620001f85784876200009592860101620002f7565b60208301526101a0830151858111620001f8578487620000b892860101620002f7565b60408301526101c0830151858111620001f8578487620000db92860101620002f7565b60608301526101e0830151608083015261020083015160a0830152610220830151858111620001f857848762000114928601016200036a565b60c083015261024083015160e0830152610260830151956101009687840152610280840151868111620001f85785826200015192870101620003f5565b9561012096878501526102a0850151818111620001f857868362000178928801016200046c565b9561014096878601526102c0860151918211620001f85782620001a292620001ae9701016200046c565b90830152519062001209565b60405191615d8d938462002082853960805184612dfa015260a05184612eb5015260c05184612dc4015260e05184612e4901525183612e6f015251826118510152518161187d0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b601f01601f1916610160908101906001600160401b038211908210176200023957604052565b620001fd565b604081019081106001600160401b038211176200023957604052565b601f909101601f19168101906001600160401b038211908210176200023957604052565b6040519061018082016001600160401b038111838210176200023957604052565b6040519061014082016001600160401b038111838210176200023957604052565b60405190620002d0826200023f565b565b60005b838110620002e65750506000910152565b8181015183820152602001620002d5565b81601f82011215620001f85780516001600160401b0381116200023957604051926200032e601f8301601f1916602001856200025b565b81845260208284010111620001f8576200034f9160208085019101620002d2565b90565b6001600160401b038111620002395760051b60200190565b9080601f83011215620001f857815190620003858262000352565b926200039560405194856200025b565b828452602092838086019160051b83010192808411620001f857848301915b848310620003c55750505050505090565b82516001600160401b038111620001f8578691620003e984848094890101620002f7565b815201920191620003b4565b81601f82011215620001f8578051916200040f8362000352565b926200041f60405194856200025b565b808452602092838086019260051b820101928311620001f8578301905b8282106200044b575050505090565b81516001600160a01b0381168103620001f85781529083019083016200043c565b81601f82011215620001f857805191620004868362000352565b926200049660405194856200025b565b808452602092838086019260051b820101928311620001f8578301905b828210620004c2575050505090565b81518152908301908301620004b3565b90600182811c9216801562000504575b6020831014620004ee57565b634e487b7160e01b600052602260045260246000fd5b91607f1691620004e2565b8181106200051b575050565b600081556001016200050f565b90601f821162000536575050565b620002d09160036000526020600020906020601f840160051c8301931062000567575b601f0160051c01906200050f565b909150819062000559565b90601f821162000580575050565b620002d09160046000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b90601f8211620005be575050565b620002d09160056000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b90601f8211620005fc575050565b620002d09160066000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b90601f82116200063a575050565b620002d091600d6000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b90601f821162000678575050565b620002d091600e6000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b90601f8211620006b6575050565b620002d091600f6000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b90601f8211620006f4575050565b620002d091600c6000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b9190601f81116200073457505050565b620002d0926000526020600020906020601f840160051c830193106200056757601f0160051c01906200050f565b80519091906001600160401b03811162000239576200078e8162000788600454620004d2565b62000572565b602080601f8311600114620007cd5750819293600092620007c1575b50508160011b916000199060031b1c191617600455565b015190503880620007aa565b6004600052601f198316949091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b926000905b8782106200083c57505083600195961062000822575b505050811b01600455565b015160001960f88460031b161c1916905538808062000817565b8060018596829496860151815501950193019062000801565b80519091906001600160401b038111620002395762000881816200087b600d54620004d2565b6200062c565b602080601f8311600114620008c05750819293600092620008b4575b50508160011b916000199060031b1c191617600d55565b0151905038806200089d565b600d600052601f198316949091907fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5926000905b8782106200092f57505083600195961062000915575b505050811b01600d55565b015160001960f88460031b161c191690553880806200090a565b80600185968294968601518155019501930190620008f4565b80519091906001600160401b038111620002395762000974816200096e600e54620004d2565b6200066a565b602080601f8311600114620009b35750819293600092620009a7575b50508160011b916000199060031b1c191617600e55565b01519050388062000990565b600e600052601f198316949091907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd926000905b87821062000a2257505083600195961062000a08575b505050811b01600e55565b015160001960f88460031b161c19169055388080620009fd565b80600185968294968601518155019501930190620009e7565b80519091906001600160401b038111620002395762000a678162000a61600f54620004d2565b620006a8565b602080601f831160011462000aa6575081929360009262000a9a575b50508160011b916000199060031b1c191617600f55565b01519050388062000a83565b600f600052601f198316949091907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802926000905b87821062000b1557505083600195961062000afb575b505050811b01600f55565b015160001960f88460031b161c1916905538808062000af0565b8060018596829496860151815501950193019062000ada565b81519192916001600160401b038111620002395762000b5a8162000b538454620004d2565b8462000724565b602080601f831160011462000b9957508192939460009262000b8d575b50508160011b916000199060031b1c1916179055565b01519050388062000b77565b90601f1983169562000bb085600052602060002090565b926000905b88821062000bf05750508360019596971062000bd6575b505050811b019055565b015160001960f88460031b161c1916905538808062000bcc565b8060018596829496860151815501950193019062000bb5565b634e487b7160e01b600052601160045260246000fd5b80519068010000000000000000821162000239576012548260125580831062000c91575b50601260005260209081019060008051602062007e0f8339815191526000925b84841062000c72575050505050565b6001838262000c848394518662000b2e565b0192019301929062000c63565b6012600090815260008051602062007e0f8339815191529182019184015b82811062000cbf57505062000c43565b8062000cce60019254620004d2565b8062000cdd575b500162000caf565b601f90818111841462000cf75750508281555b3862000cd5565b8362000d1c9262000d0d85600052602060002090565b920160051c820191016200050f565b6000818152602081208183555562000cf0565b805180516001600160401b038111620002395762000d5a8162000d54600c54620004d2565b620006e6565b6020918290601f831160011462000e1b5762000dfd938361012094620002d0979462000da89460009262000e0f575b50508160011b916000199060031b1c191617600c555b82015162000855565b62000db7604082015162000948565b62000dc6606082015162000a3b565b608081015160105560a081015160115562000de560c082015162000c1f565b60e08101516013556101008101516014550151151590565b60ff8019601554169115151617601555565b01519050388062000d89565b600c600052601f19831691907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79260005b81811062000e9e575084620002d0979462000da89462000dfd9894610120986001951062000e84575b505050811b01600c5562000d9f565b015160001960f88460031b161c1916905538808062000e75565b92938660018192878601518155019501930162000e4c565b600019811462000ec65760010190565b62000c09565b634e487b7160e01b600052603260045260246000fd5b805182101562000ef75760209160051b010190565b62000ecc565b601e546801000000000000000081101562000239576001810180601e5581101562000ef757601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500155565b1562000f5457565b60405162461bcd60e51b815260206004820152601660248201527f417272617973206c656e677468206d69736d61746368000000000000000000006044820152606490fd5b1562000fa157565b60405162461bcd60e51b815260206004820152601360248201527f4e6f20696e697469616c20706172746e657273000000000000000000000000006044820152606490fd5b1562000fee57565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b156200102a57565b60405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606490fd5b90815180825260208080930193019160005b8281106200107e575050505090565b8351855293810193928101926001016200106f565b9092916040820191604081528451809352606081019260208096019060005b818110620010cf575050506200034f93948184039101526200105d565b82516001600160a01b031686529487019491870191600101620010b2565b906020916200110881518092818552858086019101620002d2565b601f01601f1916010190565b96989a999795926200115d906200114e6200113e6200116c959794610140808d528c0190620010ed565b6020978b8203898d0152620010ed565b9089820360408b0152620010ed565b908782036060890152620010ed565b92608086015260a085015283820360c08501528551908183528083019281808460051b8301019801936000915b848310620011d8575050505050506200034f9495620011c99160e084015261010083019060018060a01b03169052565b6101208184039101526200105d565b9091929394988480620011f8600193601f198682030187528d51620010ed565b9b0193019301919493929062001199565b80519260208201938451816200121f926200146f565b81519284519260408101928351936060830190815194608085019889519660a087019788519060c08901519260e08a019b8c51956200125d620002a0565b9e8f91825260208201526040015260608d015260808c015260a08b015260c08a015260e089015261010042818a0152610120988981016200129e9060019052565b620012a99062000d2f565b85015160165560185560005b61016085018051805183101562001321576200130e83809362001307620012fa620012e96200131b98620013159762000ee2565b51600052601d602052604060002090565b805460ff19166001179055565b5162000ee2565b5162000efd565b62000eb6565b620012b5565b505050929597909396919497860195865151986200134861014083019a8b51511462000f4c565b62001357885151151562000f99565b60005b88518051821015620013d65790620013158c620013c96200139e84620013966200138982620013d09962000ee2565b516001600160a01b031690565b935162000ee2565b51620013b56001600160a01b038416151562000fe6565b620013c281151562001022565b82620015e2565b8062001f92565b6200135a565b5050909192939598977ff9e7aa11bcdcbb8ac33b5dba92fca799ef091e54c29270822065501d8edea1a57f11b248463a1620b36a975da8f250009f56fb5dd0e9d5027a90a834d0ee84d6f6996200146a9799519051906200143d6040519283928362001093565b0390a18251935196519751945190519061016060c0850151935194015195604051998a9930978b62001114565b0390a1565b929190926040519062001482826200023f565b60019283835260209081840194603160f81b865287519060018060401b0382116200023957620014bf82620014b9600354620004d2565b62000528565b8398601f831160011462001555578291620014fc95969798999a839260009462001549575b50501b916000199060031b1c19161760035562000762565b6200150782620016b0565b610120526200151683620017c0565b61014052815191012060e052519020610100524660a0526200153762001925565b6080523060c052620002d06001600b55565b015192503880620014e4565b6003600052601f198316999192917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9160005b8c8110620015cc575083620014fc9798999a9b9c10620015b2575b505050811b0160035562000762565b015160001960f88460031b161c19169055388080620015a3565b8183015184559285019291870191870162001588565b91906001600160a01b0383168015620016975760025482810180911162000ec6576002556001600160a01b038416600090815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b0384116200166d57620002d092935062001991565b604051630e58ae9360e11b8152600481018590526001600160d01b036024820152604490fd5b0390fd5b60405163ec442f0560e01b815260006004820152602490fd5b9081516020808210600014620016ce575050906200034f90620018d0565b6001600160401b0382116200023957620016f582620016ef600554620004d2565b620005b0565b80601f831160011462001735575081929360009262001729575b50508160011b916000199060031b1c19161760055560ff90565b0151905038806200170f565b6005600052601f198316949091907f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0926000905b878210620017a75750508360019596106200178d575b505050811b0160055560ff90565b015160001960f88460031b161c191690553880806200177f565b8060018596829496860151815501950193019062001769565b9081516020808210600014620017de575050906200034f90620018d0565b6001600160401b03821162000239576200180582620017ff600654620004d2565b620005ee565b80601f831160011462001845575081929360009262001839575b50508160011b916000199060031b1c19161760065560ff90565b0151905038806200181f565b6006600052601f198316949091907ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f926000905b878210620018b75750508360019596106200189d575b505050811b0160065560ff90565b015160001960f88460031b161c191690553880806200188f565b8060018596829496860151815501950193019062001879565b601f815111620018fe576020815191015160208210620018ee571790565b6000198260200360031b1b161790565b60405163305a27a960e01b81526020600482015290819062001693906024830190620010ed565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117620002395760405251902090565b906200199d8162001ccd565b9165ffffffffffff80431162001a7b57600a5460008162001a48575050620019d990620019d0620002d09560006200204d565b90431662001dc9565b50506001600160a01b0390811690811562001a2b575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75460009283526040909220548116911662001a9a565b62001a4062001a3a8462001ccd565b62001c18565b5050620019ef565b60009291921995838781011162000ec657620002d096620019d994602084600a620019d096522001015460301c6200204d565b6040516306dfcc6560e41b815260306004820152436024820152604490fd5b6001600160a01b0380831693929190811690818514158062001c0e575b62001ac4575b5050505050565b8162001b40575b50508262001adc575b808062001abd565b6001600160a01b0316600090815260096020526040902060008051602062007e4f8339815191529162001b1c9162001b15909162001ccd565b9062001c75565b604080516001600160d01b039384168152919092166020820152a238808062001ad4565b6001600160a01b0316600090815260096020526040902062001b628462001ccd565b9065ffffffffffff9081431162001a7b57805460008162001bcf5750509062001bac9162001ba260008051602062007e4f83398151915294600062002067565b9143169062001ec5565b604080516001600160d01b039384168152919092166020820152a2388062001acb565b6000939291931994848681011162000ec65760008051602062007e4f8339815191529562001bac956020848662001ba296522001015460301c62002067565b5083151562001ab7565b65ffffffffffff80431162001a7b57600a5460008162001c49575050620019d062001c4592600062002067565b9091565b9092600019848181011162000ec65762001c4594602084600a620019d096522001015460301c62002067565b65ffffffffffff9081431162001a7b57805460008162001ca257505062001ba262001c459360006200204d565b9093600019858181011162000ec65762001c45956020848662001ba296522001015460301c6200204d565b6001600160d01b039081811162001ce2571690565b604490604051906306dfcc6560e41b825260d060048301526024820152fd5b60001981019190821162000ec657565b600a54906801000000000000000082101562000239576001820180600a5582101562000ef757600a60005280516020919091015160301b65ffffffffffff191665ffffffffffff919091161760008051602062007e2f83398151915290910155565b9081546801000000000000000081101562000239576001810180845581101562000ef75760009283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b600a54919291801562001e965762001de562001dfe9162001d01565b600a60005260008051602062007e2f8339815191520190565b9081549165ffffffffffff9081841691831680831162001e845786920362001e465762001e3f92509065ffffffffffff82549181199060301b169116179055565b60301c9190565b505062001e7e9062001e6962001e5b620002c1565b65ffffffffffff9092168252565b6001600160d01b038516602082015262001d11565b62001e3f565b604051632520601d60e01b8152600490fd5b5062001ebf9062001eaa62001e5b620002c1565b6001600160d01b038416602082015262001d11565b60009190565b8054929392801562001f685762001ee062001eed9162001d01565b8260005260206000200190565b9182549265ffffffffffff9182851692811680841162001e845787930362001f2f575062001e3f92509065ffffffffffff82549181199060301b169116179055565b91505062001e7e9162001f5362001f45620002c1565b65ffffffffffff9093168352565b6001600160d01b038616602083015262001d73565b509062001ebf9162001f7d62001f45620002c1565b6001600160d01b038516602083015262001d73565b6001600160a01b039081169180821691828403620020085760008481526008602052604080822080546001600160a01b031981168717909155620002d096931694909285907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f8480a48060205220549162001a9a565b60405162461bcd60e51b815260206004820152601360248201527f44656c65676174696f6e2064697361626c6564000000000000000000000000006044820152606490fd5b6001600160d01b039182169082160190811162000ec65790565b6001600160d01b039182169082160390811162000ec6579056fe6080604052600436101561001257600080fd5b60003560e01c8063013cf08b146103de57806306fdde03146103d9578063078f6208146103d4578063095ea7b3146103cf5780630c0512e9146103ca5780630d61b519146103c557806318160ddd146103c0578063204c5d1f146103bb57806322dbefbb1461030c57806322f3e2d4146103b657806323b872dd146103b15780632519ae5c146103ac578063313ce567146103a75780633644e515146103a25780633a46b1a8146102d557806347c661401461039d5780634b145793146103075780634bf5d7e9146103985780634cf2ab32146103935780634cfd16bb1461038e5780634de184f6146103845780634fa76ec9146103895780635221c1f014610384578063548d496f1461037f578063587cde1e1461037a5780635c19a95c146103755780635cf0e8a4146103705780636cbadbfa146103705780636dcf811d1461036b5780636fcfff451461036657806370a08231146103615780637ce288ea1461035c5780637e5a9b47146103575780637ecebe00146103525780637f6dda141461034d57806384b0196e1461034857806385e59ce2146103435780638e539e8c1461033e5780639080936f1461033957806391ddadf41461033457806395d89b411461032f57806398e527d31461032a5780639a49bdde146103255780639ab24eb014610320578063a351f6151461031b578063a9059cbb14610316578063adf7420714610311578063b0b6cc1a1461030c578063b3fe8bcb14610307578063c3cda52014610302578063c8a6d06e146102fd578063c97bfe6b146102f8578063c9a3c0c7146102f3578063c9d27afe146102ee578063d505accf146102e9578063dcf628c0146102e4578063dd62ed3e146102df578063e49a62e9146102da578063eaeded5f146102d5578063eced3dfb146102d0578063f1127ed8146102cb5763f2c26a47146102c657600080fd5b6127d5565b6126af565b612691565b61126b565b612673565b612610565b612578565b6123ce565b612281565b612191565b612140565b6120b8565b611f76565b61132c565b610f20565b611c76565b611c1c565b611ae4565b611a9b565b611a7d565b611a5f565b6119b8565b61198c565b611963565b611931565b6118fa565b611838565b611802565b6117c5565b611797565b61170c565b6116cf565b611662565b61163f565b611621565b6115f9565b6115ba565b611589565b611534565b61156b565b6114ba565b611447565b61135d565b611296565b611248565b61122c565b6110c7565b610f8b565b610f54565b610e3d565b610d0d565b610c17565b610bf9565b610bc4565b610b84565b610aa3565b6109ec565b90600182811c92168015610413575b60208310146103fd57565b634e487b7160e01b600052602260045260246000fd5b91607f16916103f2565b600d546000929161042d826103e3565b80825291600190818116908115610492575060011461044b57505050565b91929350600d600052600080516020615cf8833981519152916000925b84841061047a57505060209250010190565b80546020858501810191909152909301928101610468565b915050602093945060ff929192191683830152151560051b010190565b600e54600092916104bf826103e3565b8082529160019081811690811561049257506001146104dd57505050565b91929350600e600052600080516020615cb8833981519152916000925b84841061050c57505060209250010190565b805460208585018101919091529093019281016104fa565b600f5460009291610534826103e3565b80825291600190818116908115610492575060011461055257505050565b91929350600f600052600080516020615d38833981519152916000925b84841061058157505060209250010190565b8054602085850181019190915290930192810161056f565b90600092918054916105aa836103e3565b91828252600193848116908160001461060c57506001146105cc575b50505050565b90919394506000526020928360002092846000945b8386106105f85750505050010190388080806105c6565b8054858701830152940193859082016105e1565b9294505050602093945060ff191683830152151560051b010190388080806105c6565b634e487b7160e01b600052604160045260246000fd5b61014081019081106001600160401b0382111761066157604052565b61062f565b604081019081106001600160401b0382111761066157604052565b60a081019081106001600160401b0382111761066157604052565b60c081019081106001600160401b0382111761066157604052565b90601f801991011681019081106001600160401b0382111761066157604052565b60405190600082600c54916106ec836103e3565b808352926001908181169081156107625750600114610715575b50610713925003836106b7565b565b600c60009081529150600080516020615c988339815191525b8483106107475750610713935050810160200138610706565b81935090816020925483858a0101520191019091859261072e565b90506020925061071394915060ff191682840152151560051b82010138610706565b60405190600082600d5491610798836103e3565b8083529260019081811690811561076257506001146107be5750610713925003836106b7565b600d60009081529150600080516020615cf88339815191525b8483106107f05750610713935050810160200138610706565b81935090816020925483858a010152019101909185926107d7565b60405190600082600e549161081f836103e3565b8083529260019081811690811561076257506001146108455750610713925003836106b7565b600e60009081529150600080516020615cb88339815191525b8483106108775750610713935050810160200138610706565b81935090816020925483858a0101520191019091859261085e565b60405190600082600f54916108a6836103e3565b8083529260019081811690811561076257506001146108cc5750610713925003836106b7565b600f60009081529150600080516020615d388339815191525b8483106108fe5750610713935050810160200138610706565b81935090816020925483858a010152019101909185926108e5565b9061071361092d9260405193848092610599565b03836106b7565b60005b8381106109475750506000910152565b8181015183820152602001610937565b9060209161097081518092818552858086019101610934565b601f01601f1916010190565b97936109a56109e1989497936101409b97939e9d9c9e8b526101608060208d01528b0190610957565b60408a0197909752606089015215156080880152151560a087015260c08601526001600160a01b031660e0850152838203610100850152610957565b946101208201520152565b34610a8a576020366003190112610a8a57600435600052601b60205260406000208054610a8660405191610a2e83610a278160018801610599565b03846106b7565b600284015460038501546004860154600587015460068801549397929492936001600160a01b031691610a6360078601610919565b93600a6008870154960154966040519a8b9a60ff808660081c169516938c61097c565b0390f35b600080fd5b906020610aa0928181520190610957565b90565b34610a8a57600080600319360112610b81576040519080600354610ac6816103e3565b80855291600191808316908115610b575750600114610afc575b610a8685610af0818703826106b7565b60405191829182610a8f565b9250600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610b3f575050508101602001610af082610a86610ae0565b80546020858701810191909152909301928101610b24565b869550610a8696935060209250610af094915060ff191682840152151560051b8201019293610ae0565b80fd5b34610a8a576000366003190112610a8a576060601654601854601e549060405192835260208301526040820152f35b6001600160a01b03811603610a8a57565b34610a8a576040366003190112610a8a57610bee600435610be481610bb3565b6024359033612b0f565b602060405160018152f35b34610a8a576000366003190112610a8a576020601754604051908152f35b34610a8a576020366003190112610a8a577fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d260043580600052601b60205260076040600020610c6883825414613eb3565b610cd760048201610c89610c84610c80835460ff1690565b1590565b613f3a565b610c9a6018546008850154146140c1565b610cca610ca686614053565b60058601544210801590610d06575b610cbe9061410c565b81610cfe575b50614168565b805460ff19166001179055565b0190610cea610ce583610919565b6148ea565b610cf9604051928392836141aa565b0390a1005b905038610cc4565b5080610cb5565b34610a8a576000366003190112610a8a576020600254604051908152f35b90815180825260208092019182818360051b85019501936000915b848310610d565750505050505090565b9091929394958480610d7083856001950387528a51610957565b9801930193019194939290610d46565b610aa090602081528251610e18610da561014092836020860152610160850190610957565b610def610ddb610dc7602089015193601f1994858983030160408a0152610957565b604089015184888303016060890152610957565b606088015183878303016080880152610957565b90608087015160a086015260a087015160c086015260c0870151908583030160e0860152610d2b565b9360e08101516101009081850152810151906101209182850152015191019015159052565b34610a8a57600080600319360112610b8157610a8690610f14604051610e6281610645565b60609283825283602083015283604083015283808301528060808301528060a08301528360c08301528060e083015261010090808284015261012080930152610ea9611040565b93610eb26106d8565b8552610ebc610784565b6020860152610ec961080b565b6040860152610ed6610892565b90850152601054608085015260115460a0850152610ef261545a565b60c085015260135460e08501526014549084015260155460ff16151590830152565b60405191829182610d80565b34610a8a576020366003190112610a8a576004356000526019602052602060018060a01b0360406000205416604051908152f35b34610a8a576000366003190112610a8a5760ff601f54161580610f7f575b6020906040519015158152f35b5060155460ff16610f72565b34610a8a576060366003190112610a8a57600435610fa881610bb3565b602435610fb481610bb3565b6001600160a01b03821660009081526001602090815260408083203384529091529020604435919054926000198410610ffe575b610ff293506129fd565b60405160018152602090f35b82841061101a5761101583610ff295033383612bc3565b610fe8565b604051637dc7a0d960e11b81523360048201526024810185905260448101849052606490fd5b6040519061071382610645565b6040519061071382610666565b6001600160401b03811161066157601f01601f191660200190565b9291926110818261105a565b9161108f60405193846106b7565b829481845281830111610a8a578281602093846000960137010152565b9080601f83011215610a8a57816020610aa093359101611075565b34610a8a5760a0366003190112610a8a576004356001600160401b038111610a8a576110f79036906004016110ac565b6064359060443561110783610bb3565b6111c26084359161113461112f61112885600052601d602052604060002090565b5460ff1690565b6134f7565b6111486001600160a01b0386161515615277565b61116a611165610c8061112884600052601a602052604060002090565b6152b2565b336000908152602081905260409020611186905b54151561349f565b6040516304fa45bf60e31b602082015260248101919091526001600160a01b03909416604485015283606481015b03601f1981018552846106b7565b601e54926111cf84612f29565b9360005b8181106111fd57610a866111ed338887876024358b613cc4565b6040519081529081906020820190565b8061121761120d61122793611405565b90549060031b1c90565b6112218289613b6b565b526135c6565b6111d3565b34610a8a576000366003190112610a8a57602060405160128152f35b34610a8a576000366003190112610a8a576020611263612dc1565b604051908152f35b34610a8a576040366003190112610a8a57602061126360043561128d81610bb3565b602435906128ec565b34610a8a576020366003190112610a8a5760043580600052601b6020526112c4604060002091825414613eb3565b60646112ef60018060d01b036112e56112e0600a8601546129a6565b613177565b1660165490614040565b049060036002820154910154918282019081831161132757604080519384526020840194909452928201526060810191909152608090f35b6129e7565b34610a8a576020366003190112610a8a57600435600052601a602052602060ff604060002054166040519015158152f35b34610a8a576000366003190112610a8a576113774361310e565b65ffffffffffff806113884361310e565b169116036113dd57610a8660405161139f81610666565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610957565b6040516301bfc1c560e61b8152600490fd5b634e487b7160e01b600052603260045260246000fd5b601e5481101561142a57601e600052600080516020615d188339815191520190600090565b6113ef565b805482101561142a5760005260206000200190600090565b34610a8a576020366003190112610a8a57600435601e54811015610a8a57602090601e600052600080516020615d188339815191520154604051908152f35b90815180825260208080930193019160005b8281106114a6575050505090565b835185529381019392810192600101611498565b34610a8a576000366003190112610a8a5760405180601e54808252826020809301601e600052600080516020615d188339815191529260005b8582821061151e5750505061150a925003836106b7565b610a86604051928284938452830190611486565b85548452600195860195889550930192016114f3565b34610a8a576020366003190112610a8a576020611561600435600052601d60205260ff6040600020541690565b6040519015158152f35b34610a8a576000366003190112610a8a576020601654604051908152f35b34610a8a576020366003190112610a8a57600435600052601d602052602060ff604060002054166040519015158152f35b34610a8a576020366003190112610a8a5760206004356115d981610bb3565b60018060a01b038091166000526008825260406000205416604051908152f35b34610a8a576020366003190112610a8a5761161f60043561161981610bb3565b33615bc7565b005b34610a8a576000366003190112610a8a576020601854604051908152f35b34610a8a576000366003190112610a8a57602060ff601f54166040519015158152f35b34610a8a576020366003190112610a8a5760043561167f81610bb3565b6001600160a01b031660009081526009602052604090205463ffffffff908181116116b05760209160405191168152f35b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b34610a8a576020366003190112610a8a5760206112636004356116f181610bb3565b6001600160a01b031660009081526020819052604090205490565b34610a8a576020366003190112610a8a5760043561172981614637565b1561175b5760207f57df5a6a467271f04b10f7fe9e66d21dcd8ae7eaf079099d48959f24a53b691091604051908152a1005b60405162461bcd60e51b81526020600482015260146024820152734e6f7420616c6c20636861696e7320726561647960601b6044820152606490fd5b34610a8a576020366003190112610a8a5760406117b5600435614053565b8251911515825215156020820152f35b34610a8a576020366003190112610a8a576004356117e281610bb3565b60018060a01b031660005260076020526020604060002054604051908152f35b34610a8a576040366003190112610a8a57610a8661182460243560043561552c565b604051918291602083526020830190611486565b34610a8a576000366003190112610a8a576118cb6118757f0000000000000000000000000000000000000000000000000000000000000000612f5b565b610a866118a17f0000000000000000000000000000000000000000000000000000000000000000613054565b6118d96118ac612f01565b91604051958695600f60f81b875260e0602088015260e0870190610957565b908582036040870152610957565b90466060850152306080850152600060a085015283820360c0850152611486565b34610a8a576020366003190112610a8a57602060646119286001600160d01b036112e56112e06004356129a6565b04604051908152f35b34610a8a576020366003190112610a8a5760206001600160d01b0361195a6112e06004356129a6565b16604051908152f35b34610a8a576020366003190112610a8a5760206119816004356155d1565b60ff60405191168152f35b34610a8a576000366003190112610a8a5760206119a84361310e565b65ffffffffffff60405191168152f35b34610a8a57600080600319360112610b815760405190806004546119db816103e3565b80855291600191808316908115610b575750600114611a0457610a8685610af0818703826106b7565b9250600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410611a47575050508101602001610af082610a86610ae0565b80546020858701810191909152909301928101611a2c565b34610a8a576000366003190112610a8a576020601c54604051908152f35b34610a8a576020366003190112610a8a57602061126360043561469e565b34610a8a576020366003190112610a8a57600435611ab881610bb3565b6001600160a01b031660009081526009602090815260409091206001600160d01b039061195a90613410565b34610a8a576040366003190112610a8a576004356001600160401b03602435818111610a8a5736602382011215610a8a578060040135918211610a8a573660248383010111610a8a57610cf9602492847fc7c129e53e59dadfa16305619e80c7519f1f6912c10915359fd75b56bcecdd7b95600052601b602052611c0e6040600020611b7283825414613eb3565b611bff600a6004830192611b92611b8d610c80865460ff1690565b61424c565b611ba160058201544210613eff565b6006810154611bcb90611bc4906001600160a01b03165b6001600160a01b031690565b331461428b565b0154611bf8611bda82336128ec565b916001600160d01b0390611bf1906112e0906129a6565b169161402a565b10156142c8565b805461ff001916610100179055565b604051948594019084614320565b34610a8a576040366003190112610a8a57610bee600435611c3c81610bb3565b60243590336129fd565b9181601f84011215610a8a578235916001600160401b038311610a8a576020808501948460051b010111610a8a57565b34610a8a576060366003190112610a8a576001600160401b03600435602435828111610a8a57611caa903690600401611c46565b92604435908111610a8a5783611cc584923690600401611c46565b611ccd614007565b611ce184600052601b602052604060002090565b90611cee85835414613eb3565b6004820192611d09611d04610c80865460ff1690565b61434e565b60185494611d1d60088501548714156143aa565b611d2f611d2a8786615694565b614406565b611d3a838214614449565b611dc4876007860197611dbc600a611d518b610919565b6020815191012098015497611dae896040519485936020850197889094939260809260a08301967f45de75acfcd4cbcc5691559486749bf0d5eb65e4b24c59ac2f258ba6bfceaa3484526020840152604083015260608201520152565b03601f1981018352826106b7565b519020612edb565b9760009889945b838610611e8c575050507fda7dba8f94d70cde423cce3a243bebf95d2ec927507b566f67e329dcfe2d06bb877fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d2611e6589611e4c8a610cca8f611e45611e3e8e6112e56112e060018060d01b03926129a6565b6064900490565b11156145a8565b611e58610ce582610919565b60405191829185836141aa565b0390a1601854604080519283526020830191909152819081015b0390a161161f6001600b55565b909192939499868b611ec8611bb8611ec3611ebb611eb5611eae868a8f614486565b3691611075565b896145f4565b938a8a6144c7565b6144d7565b6001600160a01b03821690611ede9082146144e1565b8d88886000925b8310611f21575050505091611f00611f1192611f17946128ec565b90611f0c82151561455c565b61316a565b9a6135c6565b9493929190611dcb565b8394955092611f3d611bb8611ec385611f4495611f49986144c7565b141561451d565b6135c6565b90899291888f8990611ee5565b6064359060ff82168203610a8a57565b6084359060ff82168203610a8a57565b34610a8a5760c0366003190112610a8a57600435611f9381610bb3565b60443590602435611fa2611f56565b83421161202a5761201e61161f94612025926040519060208201927fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf845260018060a01b038816604084015286606084015260808301526080825261200682610681565b61201960a4359360843593519020612edb565b612c6c565b9182612c16565b615bc7565b604051632341d78760e11b815260048101859052602490fd5b6001600160401b0381116106615760051b60200190565b81601f82011215610a8a5780359161207183612043565b9261207f60405194856106b7565b808452602092838086019260051b820101928311610a8a578301905b8282106120a9575050505090565b8135815290830190830161209b565b34610a8a5760c0366003190112610a8a576001600160401b03600435818111610a8a576120e99036906004016110ac565b90604435818111610a8a5736602382011215610a8a57612113903690602481600401359101611075565b608435918211610a8a57610a86926121326111ed93369060040161205a565b916064359160243590613539565b34610a8a576020366003190112610a8a57600435601c54811015610a8a57602090601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110154604051908152f35b34610a8a576080366003190112610a8a576004356001600160401b038111610a8a576121c46111b49136906004016110ac565b604435612241606435916121e861112f61112885600052601d602052604060002090565b61220761220261112883600052601a602052604060002090565b6152f6565b33600090815260208190526040902061221f9061117e565b604051633972e9fb60e21b602082015260248101919091529384906044820190565b601e549261224e84612f29565b9360005b81811061226c57610a866111ed338887876024358b613cc4565b8061121761120d61227c93611405565b612252565b34610a8a576040366003190112610a8a576004356024358015158103610a8a577f78975aaf742630489badd22949b88ac50eaaea576339ee05440b671a33bfb6a9916122cb614007565b611e7f6122e282600052601b602052604060002090565b6122ee83825414613eb3565b6122fd60058201544210613eff565b612311610c84610c80600484015460ff1690565b600b81019061234061233b610c8061112833869060018060a01b0316600052602052604060002090565b613f86565b612351601854600883015414613fc2565b612379610cca612365600a840154336128ec565b336000908152602095909552604090942090565b84156123b95760020161238d82825461316a565b90555b604080519384523360208501529315159383019390935260608201929092529081906080820190565b6003016123c782825461316a565b9055612390565b34610a8a5760e0366003190112610a8a576004356123eb81610bb3565b6024356123f781610bb3565b60443590606435612406611f66565b8142116124f1576001600160a01b0385811660008181526007602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99281019283529283019390935292861660608201526080810187905260a081019190915260c0808201949094529283526124aa92909161249760e0836106b7565b61201960c4359360a43593519020612edb565b6001600160a01b03848116908216036124c7575061161f92612b0f565b6040516325c0072360e11b81526001600160a01b0391821660048201529084166024820152604490fd5b60405163313c898160e11b815260048101839052602490fd5b97949161252f90610aa09c9a97949b9895928a526101608060208c01528a0190610957565b604089019a909a52606088015215156080870152151560a086015260c08501526001600160a01b031660e084015261010083015261012082015280830361014090910152611486565b34610a8a576020366003190112610a8a5760043580600052601b60205260406000206125a78154928314613eb3565b610a86600282015492600383015490600484015460058501546125d3600687015460018060a01b031690565b90600887015492600a880154946125f860096125f160018c01610919565b9a016154dd565b966040519a8b9a60ff808660081c169516938c61250a565b34610a8a576040366003190112610a8a57602061266a60043561263281610bb3565b6024359061263f82610bb3565b60018060a01b03166000526001835260406000209060018060a01b0316600052602052604060002090565b54604051908152f35b34610a8a576020366003190112610a8a576020611561600435614637565b34610a8a576000366003190112610a8a576020601e54604051908152f35b34610a8a576040366003190112610a8a576004356126cc81610bb3565b6024359063ffffffff82168203610a8a57610a869161271c916126ed612bfd565b506126f6612bfd565b506001600160a01b03166000908152600960205260409020612716612bfd565b5061142f565b506040519061272a82610666565b5465ffffffffffff811680835260309190911c60209283019081526040805192835290516001600160d01b031692820192909252918291820190565b9794999895926127ab9061279d6127b99461278f6101009b98958d610120908181520190610957565b8c810360208e015290610957565b908a820360408c0152610957565b9088820360608a0152610957565b97608087015260a086015260c085015260e08401521515910152565b34610a8a57600080600319360112610b8157604051908181600c546127f9816103e3565b808452936001918083169081156128c8575060011461287d575b5050612821925003826106b7565b604051906128328261092d8161041d565b610a8660405161284c81612845816104af565b03826106b7565b60405161285c8161284581610524565b601054601154601354916014549360ff6015541695604051998a998a612766565b9150600c8252600080516020615c988339815191525b8483106128ad575061282193505081016020013880612813565b81935090816020925483858901015201910190918492612893565b9150506020925061282194915060ff191682840152151560051b8201013880612813565b6001600160a01b03166000908152600960205260408120909161290e906129a6565b81549083829160058411612957575b61292893508461343e565b8061293c5750505b6001600160d01b031690565b9161294960209293613140565b92815220015460301c612930565b91926129628161329b565b8103908111611327576129289385875265ffffffffffff808360208a200154169085161060001461299457509161291d565b9291506129a09061315c565b9061291d565b65ffffffffffff6129b64361310e565b16808210156129c95750610aa09061310e565b6044925060405191637669fc0f60e11b835260048301526024820152fd5b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0380821694939291908515612af65782168015612add576001600160a01b03821660009081526020819052604090205495848710612aae5784610713969703612a5f8460018060a01b03166000526000602052604060002090565b556001600160a01b0384166000908152602081815260409182902080548801905590518681527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a36156df565b60405163391434e360e21b81526001600160a01b03841660048201526024810188905260448101869052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b6001600160a01b038082169291908315612baa578216938415612b915780612b877f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594612b7060209560018060a01b03166000526001602052604060002090565b9060018060a01b0316600052602052604060002090565b55604051908152a3565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b906001600160a01b0380831615612baa57811615612b9157612b70612bfa9260018060a01b03166000526001602052604060002090565b55565b60405190612c0a82610666565b60006020838281520152565b6001600160a01b03811660009081526007602052604090208054600181019091559091819003612c44575050565b6040516301d4b62360e61b81526001600160a01b039092166004830152602482015260449150fd5b91610aa09391612c7b93612c84565b90929192612d34565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612d0857926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa15612cfc5780516001600160a01b03811615612cf357918190565b50809160019190565b604051903d90823e3d90fd5b50505060009160039190565b60041115612d1e57565b634e487b7160e01b600052602160045260246000fd5b612d3d81612d14565b80612d46575050565b612d4f81612d14565b60018103612d695760405163f645eedf60e01b8152600490fd5b612d7281612d14565b60028103612d935760405163fce698f760e01b815260048101839052602490fd5b80612d9f600392612d14565b14612da75750565b6040516335e2f38360e21b81526004810191909152602490fd5b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480612eb2575b15612e1c577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152612eac8161069c565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612df3565b604290612ee6612dc1565b906040519161190160f01b8352600283015260228201522090565b604051602081018181106001600160401b038211176106615760405260008152906000368137565b90612f3382612043565b612f4060405191826106b7565b8281528092612f51601f1991612043565b0190602036910137565b60ff8114612f995760ff811690601f8211612f875760405191612f7d83610666565b8252602082015290565b604051632cd44ac360e21b8152600490fd5b50604051600554816000612fac836103e3565b808352926001908181169081156130325750600114612fd3575b50610aa0925003826106b7565b6005600090815291507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8483106130175750610aa0935050810160200138612fc6565b81935090816020925483858901015201910190918492612ffe565b905060209250610aa094915060ff191682840152151560051b82010138612fc6565b60ff81146130765760ff811690601f8211612f875760405191612f7d83610666565b50604051600654816000613089836103e3565b8083529260019081811690811561303257506001146130af5750610aa0925003826106b7565b6006600090815291507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b8483106130f35750610aa0935050810160200138612fc6565b819350908160209254838589010152019101909184926130da565b65ffffffffffff90818111613121571690565b604490604051906306dfcc6560e41b8252603060048301526024820152fd5b60001981019190821161132757565b9190820391821161132757565b906001820180921161132757565b9190820180921161132757565b600a805460008160058111613225575b509290925b8381106131cb57505060009180156000146131a957505050600090565b6131b290613140565b9152600080516020615cd8833981519152015460301c90565b90928082169080831860011c8201809211611327578360005265ffffffffffff8083600080516020615cd8833981519152015416908616106000146132135750925b9061318c565b93915061321f9061315c565b9061320d565b90916132308261329b565b82039182116113275783835265ffffffffffff8083600080516020615cd88339815191520154169086161060001461326b5750905b38613187565b91506132769061315c565b613265565b8115613285570490565b634e487b7160e01b600052601260045260246000fd5b6001811115610aa057600181600160801b8110156133b4575b61335c61335261334861333e61333461332a61336897600488600160401b6133639a10156133a7575b64010000000081101561339a575b6201000081101561338d575b610100811015613381575b6010811015613375575b101561336d575b60030260011c613323818b61327b565b0160011c90565b613323818a61327b565b613323818961327b565b613323818861327b565b613323818761327b565b613323818661327b565b809361327b565b821190565b900390565b60011b613313565b811c9160021b9161330c565b60081c91811b91613302565b60101c9160081b916132f7565b60201c9160101b916132eb565b60401c9160201b916132dd565b50600160401b9050608082901c6132b4565b600a54600090806133d8575050600090565b8060001981011161132757600a7fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a79252015460301c90565b80546000918161342257505050600090565b6000199282848101116113275760209181522001015460301c90565b91905b83821061344e5750505090565b9091928083169080841860011c82018092116113275760008581526020902082015465ffffffffffff908116908416101561348d5750925b9190613441565b9392506134999061315c565b91613486565b156134a657565b60405162461bcd60e51b815260206004820152602360248201527f4d75737420686f6c6420746f6b656e7320746f206372656174652070726f706f6044820152621cd85b60ea1b6064820152608490fd5b156134fe57565b60405162461bcd60e51b815260206004820152601360248201527210da185a5b881b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606490fd5b92909391336000526000602052613556604060002054151561349f565b841561358157610aa09482600052601d60205261357a60ff604060002054166134f7565b3394613cc4565b60405162461bcd60e51b815260206004820152601960248201527f4475726174696f6e206d75737420626520706f736974697665000000000000006044820152606490fd5b60001981146113275760010190565b8181106135e0575050565b600081556001016135d5565b90601f82116135f9575050565b61071391600c600052600080516020615c98833981519152906020601f840160051c83019310613631575b601f0160051c01906135d5565b9091508190613624565b90601f8211613648575050565b61071391600d600052600080516020615cf8833981519152906020601f840160051c8301931061363157601f0160051c01906135d5565b90601f821161368c575050565b61071391600e600052600080516020615cb8833981519152906020601f840160051c8301931061363157601f0160051c01906135d5565b90601f82116136d0575050565b61071391600f600052600080516020615d38833981519152906020601f840160051c8301931061363157601f0160051c01906135d5565b9190601f811161371657505050565b610713926000526020600020906020601f840160051c8301931061363157601f0160051c01906135d5565b9081516001600160401b0381116106615761376681613761600c546103e3565b6135ec565b602080601f83116001146137a25750819293600092613797575b50508160011b916000199060031b1c191617600c55565b015190503880613780565b90601f198316946137c3600c600052600080516020615c9883398151915290565b926000905b8782106138005750508360019596106137e7575b505050811b01600c55565b015160001960f88460031b161c191690553880806137dc565b806001859682949686015181550195019301906137c8565b9081516001600160401b0381116106615761383d81613838600d546103e3565b61363b565b602080601f8311600114613879575081929360009261386e575b50508160011b916000199060031b1c191617600d55565b015190503880613857565b90601f1983169461389a600d600052600080516020615cf883398151915290565b926000905b8782106138d75750508360019596106138be575b505050811b01600d55565b015160001960f88460031b161c191690553880806138b3565b8060018596829496860151815501950193019061389f565b9081516001600160401b038111610661576139148161390f600e546103e3565b61367f565b602080601f83116001146139505750819293600092613945575b50508160011b916000199060031b1c191617600e55565b01519050388061392e565b90601f19831694613971600e600052600080516020615cb883398151915290565b926000905b8782106139ae575050836001959610613995575b505050811b01600e55565b015160001960f88460031b161c1916905538808061398a565b80600185968294968601518155019501930190613976565b9081516001600160401b038111610661576139eb816139e6600f546103e3565b6136c3565b602080601f8311600114613a275750819293600092613a1c575b50508160011b916000199060031b1c191617600f55565b015190503880613a05565b90601f19831694613a48600f600052600080516020615d3883398151915290565b926000905b878210613a85575050836001959610613a6c575b505050811b01600f55565b015160001960f88460031b161c19169055388080613a61565b80600185968294968601518155019501930190613a4d565b91909182516001600160401b03811161066157613ac481613abe84546103e3565b84613707565b602080601f8311600114613b00575081929394600092613af5575b50508160011b916000199060031b1c1916179055565b015190503880613adf565b90601f19831695613b1685600052602060002090565b926000905b888210613b5357505083600195969710613b3a575b505050811b019055565b015160001960f88460031b161c19169055388080613b30565b80600185968294968601518155019501930190613b1b565b805182101561142a5760209160051b010190565b15613b8657565b60405162461bcd60e51b815260206004820152601a60248201527f54617267657420636861696e206e6f7420737570706f727465640000000000006044820152606490fd5b601c54600160401b811015610661576001810180601c5581101561142a57601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110155565b601e54600160401b811015610661576001810180601e5581101561142a57601e600052600080516020615d188339815191520155565b90815491600160401b8310156106615782613c6c9160016107139501815561142f565b90919082549060031b91821b91600019901b1916179055565b9081526001600160a01b039091166020820152606060408201819052610aa092910190610957565b604090610aa0939281528160208201520190611486565b91949060175495613cdc613cd7886135c6565b601755565b613d59613cf388600052601b602052604060002090565b91888355613d2e600194613d0988878701613a9d565b6000600286015560006003860155613d286004860160ff198154169055565b4261316a565b60058401556006830180546001600160a01b0319166001600160a01b03871617905560078301613a9d565b846008820155613d76613d6b4361310e565b65ffffffffffff1690565b80613ea25750819060005b600a820155600960009101925b613e4d575b505050613e37613e47937f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd637f5d1231ca3a274bcd2f510e0d53a889213ebf0315b86ee6bb9d73da08fba7460696947fdb17271edb72bcaba16ce918d885db2e701491c9ff3f713f80caf9d614aa9ff494613e0c8a613bcb565b613e1c6040519283928c84613c85565b0390a160408051888152602081019290925290918291820190565b0390a16040519182918583613cad565b0390a190565b8651811015613e9d5780613e83613e7e611128613e6d613e97958c613b6b565b51600052601d602052604060002090565b613b7f565b611f44613e90828a613b6b565b5185613c49565b81613d8e565b613d93565b613eab90613140565b908291613d81565b15613eba57565b60405162461bcd60e51b815260206004820152601760248201527f50726f706f73616c20646f6573206e6f742065786973740000000000000000006044820152606490fd5b15613f0657565b60405162461bcd60e51b815260206004820152600c60248201526b159bdd1a5b99c8195b99195960a21b6044820152606490fd5b15613f4157565b60405162461bcd60e51b815260206004820152601960248201527f50726f706f73616c20616c7265616479206578656375746564000000000000006044820152606490fd5b15613f8d57565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b15613fc957565b60405162461bcd60e51b815260206004820152601660248201527557726f6e6720636861696e20666f7220766f74696e6760501b6044820152606490fd5b6002600b5414614018576002600b55565b604051633ee5aeb560e01b8152600490fd5b90600a820291808304600a149015171561132757565b8181029291811591840414171561132757565b9081600052601b60205261406e604060002092835414613eb3565b60028201546003830154928382019081831161132757600a01546064906140a5906001600160d01b03906112e5906112e0906129a6565b041115928391826140b7575b50509190565b11905038806140b1565b156140c857565b606460405162461bcd60e51b815260206004820152602060248201527f45786563757465206f6e6c7920696e20676f7665726e616e636520636861696e6044820152fd5b1561411357565b60405162461bcd60e51b815260206004820152602760248201527f566f74696e67206e6f7420656e64656420616e642071756f72756d206e6f74206044820152661c995858da195960ca1b6064820152608490fd5b1561416f57565b60405162461bcd60e51b8152602060048201526013602482015272141c9bdc1bdcd85b081b9bdd081c185cdcd959606a1b6044820152606490fd5b9190825260209160408382015260009282546141c5816103e3565b93846040850152600191828116908160001461422757506001146141ec575b505050505090565b6000908152828120949550935b8585106142135750505060609250010138808080806141e4565b8054858501606001529382019381016141f9565b93505050506060935060ff929192191683830152151560051b010138808080806141e4565b1561425357565b60405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e1958dd5d195960821b6044820152606490fd5b1561429257565b60405162461bcd60e51b815260206004820152600e60248201526d27b7363c9034b734ba34b0ba37b960911b6044820152606490fd5b156142cf57565b60405162461bcd60e51b815260206004820152602360248201527f496e73756666696369656e7420766f74696e6720706f77657220746f2063616e60448201526218d95b60ea1b6064820152608490fd5b91926060938192845260406020850152816040850152848401376000828201840152601f01601f1916010190565b1561435557565b60405162461bcd60e51b815260206004820152602760248201527f50726f706f73616c20616c726561647920657865637574656420696e20746869604482015266399031b430b4b760c91b6064820152608490fd5b156143b157565b60405162461bcd60e51b815260206004820152602760248201527f557365206578656375746550726f706f73616c20696e20676f7665726e616e63604482015266329031b430b4b760c91b6064820152608490fd5b1561440d57565b60405162461bcd60e51b8152602060048201526014602482015273436861696e206e6f7420696e207461726765747360601b6044820152606490fd5b1561445057565b60405162461bcd60e51b815260206004820152600e60248201526d426164207369676e61747572657360901b6044820152606490fd5b919081101561142a5760051b81013590601e1981360301821215610a8a5701908135916001600160401b038311610a8a576020018236038113610a8a579190565b919081101561142a5760051b0190565b35610aa081610bb3565b156144e857565b60405162461bcd60e51b815260206004820152600d60248201526c426164207369676e617475726560981b6044820152606490fd5b1561452457565b60405162461bcd60e51b815260206004820152601060248201526f223ab83634b1b0ba329039b4b3b732b960811b6044820152606490fd5b1561456357565b60405162461bcd60e51b815260206004820152601b60248201527f4e6f20766f74696e6720706f77657220617420736e617073686f7400000000006044820152606490fd5b156145af57565b60405162461bcd60e51b815260206004820152601a60248201527f51756f72756d206e6f74207265616368656420627920736967730000000000006044820152606490fd5b8151610aa092612c7b92604019830161462c5761462592506020820151906060604084015193015160001a90612c84565b9192909190565b505060009160029190565b614650600091808352601b602052604083205414613eb3565b80601e54915b82811061466557505050600190565b6146856146718261469e565b600052601d60205260ff6040600020541690565b1561469857614693906135c6565b614656565b50905090565b601e548110156146c157601e600052600080516020615d18833981519152015490565b60405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840c6d0c2d2dc40d2dcc8caf606b1b6044820152606490fd5b909291926147098161105a565b9161471760405193846106b7565b829482845282820111610a8a576020610713930190610934565b9190604083820312610a8a5782516001600160e01b031981168103610a8a57926020810151906001600160401b038211610a8a57019080601f83011215610a8a578151610aa0926020016146fc565b90816020910312610a8a575190565b9190826040910312610a8a5760208251920151610aa081610bb3565b9080601f83011215610a8a578151610aa0926020016146fc565b9080601f83011215610a8a578151906147dd82612043565b926147eb60405194856106b7565b828452602092838086019160051b83010192808411610a8a57848301915b8483106148195750505050505090565b82516001600160401b038111610a8a57869161483a848480948901016147ab565b815201920191614809565b91909161010081840312610a8a578051916001600160401b0392838111610a8a57846148729184016147ab565b936020830151848111610a8a578161488b9185016147ab565b936040840151818111610a8a57826148a49186016147ab565b936060810151828111610a8a57836148bd9183016147ab565b9360808201519360a08301519360c0840151908111610a8a5760e0916148e49185016147c5565b92015190565b6148fe602091828082518301019101614731565b91906001600160e01b031916630236fce560e51b810361493d5750818161492e9261071394518301019101614845565b9695909594919493929361503f565b63f0f9e6b760e01b8103614966575081816149619261071394518301019101614780565b61513d565b632ab43f7f60e11b810361498f5750818161498a9261071394518301019101614780565b6151dd565b6304fa45bf60e31b81036149c2575081816149b3926107139451830101910161478f565b6001600160a01b03169061533a565b633972e9fb60e21b81036149eb575081816149e69261071394518301019101614780565b6153ea565b63093f734560e31b8103614a1457508181614a0f9261071394518301019101614780565b614a87565b633e78500160e21b8103614a3d57508181614a389261071394518301019101614780565b614c22565b633cdb568760e11b14915061071390505760405162461bcd60e51b81526020600482015260116024820152702ab735b737bbb71037b832b930ba34b7b760791b6044820152606490fd5b80600052601d60205260ff60406000205416614b35576018548114614af057614aeb81614ae2610cca7fbba9d55e9fd1a441b1617724e2fdb76777d15ec77ab2b72ac15952cbe97085db94600052601d602052604060002090565b6111ed81613c13565b0390a1565b60405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642063757272656e7420636861696e00000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f436861696e20616c726561647920737570706f727465640000000000000000006044820152606490fd5b15614b8157565b60405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f76652063757272656e7420636861696e00000000006044820152606490fd5b601e548015614c0c576000198101908082101561142a577f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e34f600091601e83520155601e55565b634e487b7160e01b600052603160045260246000fd5b614c4260ff614c3b83600052601d602052604060002090565b54166134f7565b614c50601854821415614b7a565b614c71614c6782600052601d602052604060002090565b805460ff19169055565b60005b601e5480821015614cee5782614c8c61120d84611405565b14614ca05750614c9b906135c6565b614c74565b91614ce6614aeb92613c6c614ce061120d614cdb7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d598613140565b611405565b91611405565b6111ed614bc6565b5050614aeb7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d5916111ed565b15614d2157565b60405162461bcd60e51b815260206004820152601660248201527553796d626f6c2063616e6e6f7420626520656d70747960501b6044820152606490fd5b15614d6657565b60405162461bcd60e51b815260206004820152601860248201527f4c6f636174696f6e2063616e6e6f7420626520656d70747900000000000000006044820152606490fd5b15614db257565b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b210353ab934b9b234b1ba34b7b760611b6044820152606490fd5b15614df557565b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964204f4b544d4f60981b6044820152606490fd5b15614e3157565b60405162461bcd60e51b815260206004820152600b60248201526a0496e76616c6964204b50560ac1b6044820152606490fd5b805190600160401b82116106615760125482601255808310614edc575b5060126000526020908101907fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34446000925b848410614ec0575050505050565b60018382614ed083945186613a9d565b01920193019290614eb2565b600060128152837fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344492830192015b828110614f18575050614e81565b80614f25600192546103e3565b80614f32575b5001614f0a565b601f908181118414614f4a5750508281555b38614f2b565b83614f6c92614f5e85600052602060002090565b920160051c820191016135d5565b60008181526020812081835555614f44565b989796949592614fc190614fb3614fa3614fcf9597948d610100908181520190610957565b6020978d89818403910152610957565b908b820360408d0152610957565b9089820360608b0152610957565b93608088015260a087015285830360c08701528151908184528084019381808460051b8301019401946000915b84831061501157505050505060e09150930152565b9091929394848061502e600193601f198682030187528a51610957565b980193019301919594939290614ffc565b9490959193969296855115615101577f62d6efdb8dbca656ac38d327c1d66a4ccaeabc91c464fe5e7352b604858f5f4697614aeb9561508089511515614d1a565b61508c81511515614d5f565b615097831515614dab565b6150a2841515614dee565b6150ad861515614e2a565b6150b688613741565b6150bf89613818565b6150c8816138ef565b6150d1826139c6565b6150da83601055565b6150e384601155565b6150ec85614e64565b6150f586601355565b60405198899889614f7e565b60405162461bcd60e51b81526020600482015260146024820152734e616d652063616e6e6f7420626520656d70747960601b6044820152606490fd5b801515806151d2575b1561518d5760168054908290556040805191825260208201929092527fd0198ea88bf9c4ad5317b68e697944e524541fcb494d854f095b1cd88a097ab69181908101614aeb565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c69642071756f72756d2070657263656e74616765000000000000006044820152606490fd5b506064811115615146565b80600052601d6020526151f760ff604060002054166134f7565b601854908181146152425760188190556040805192835260208301919091527f979103c7afbf0138fe781172504ceb318ff78f9a420de8cabac8141f0121b521919081908101614aeb565b60405162461bcd60e51b815260206004820152600d60248201526c14d85b594818da185a5b881251609a1b6044820152606490fd5b1561527e57565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b156152b957565b60405162461bcd60e51b81526020600482015260156024820152744d6f64756c6520616c72656164792065786973747360581b6044820152606490fd5b156152fd57565b60405162461bcd60e51b8152602060048201526015602482015274135bd91d5b1948191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606490fd5b7ff14475b19484bf096265507cc0c41cd3bf1994992088806830686e2d7272271991906153716001600160a01b0383161515615277565b80600052601a60205261538c60ff60406000205416156152b2565b600081815260196020526040902080546001600160a01b0319166001600160a01b038416179055601a602090815260406000819020805460ff1916600117905580519283526001600160a01b03909316908201529081908101614aeb565b60207f4c7c76abe482a2c36ea52f1b999474c69f8b4afeeac5635f8aea2526864ba8539180600052601a825261542760ff604060002054166152f6565b600081815260198352604080822080546001600160a01b0319169055601a845290819020805460ff1916905551908152a1565b6012549061546782612043565b916040615476815194856106b7565b8184528360208091019160126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444906000935b8585106154ba57505050505050565b600184819284516154cf81612845818a610599565b8152019301940193916154ab565b9060405191828154918282526020928383019160005283600020936000905b82821061551257505050610713925003836106b7565b8554845260019586019588955093810193909101906154fc565b601c90815492838210156155c557810191828211611327578383116155bd575b8183038381116113275761555f90612f29565b93825b84811061557157505050505090565b8181101561142a576155b89083600052807f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101546112216155b2878461314f565b89613b6b565b615562565b83925061554c565b50505050610aa0612f01565b6155e581600052601b602052604060002090565b6155f182825414613eb3565b600481015460ff8160081c1661568c5760ff1661568557615613600592614053565b9290910154421091821592828061567e575b6156755782918261565c575b5050615655578161564c575b5061564757600090565b600290565b9050153861563d565b5050600190565b8492509061566d575b503880615631565b905038615665565b50505050600590565b5081615625565b5050600390565b505050600490565b9060005b6009830180548210156156d6576156b082849261142f565b90549060031b1c146156ce576156c76009916135c6565b9050615698565b505050600190565b50505050600090565b6001600160a01b0390811692918190841561576b575b16908115615723575b61071393600052600860205280604060002054169160005260406000205416906157b0565b61572c83615938565b936157364361310e565b6001600160d01b039586806157496133c6565b1691169003958611611327576107139561576291615a22565b505093506156fe565b905061577683615938565b906157804361310e565b6001600160d01b039283806157936133c6565b169116019283116113275783926157a991615a22565b50506156f5565b6001600160a01b038083169392919081169081851415806158f9575b6157d8575b5050505050565b8161585d575b5050826157ed575b80806157d1565b6001600160a01b031660009081526009602052604090207fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249161583a916158349091615938565b90615902565b604080516001600160d01b039384168152919092166020820152a23880806157e6565b6001600160a01b0316600090815260096020526040902061587d84615938565b6158864361310e565b6001600160d01b0391828061589a86613410565b169116900392828411611327577fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724936158ef926158d692615b0b565b6040805192851683529316602082015291829190820190565b0390a238806157de565b508315156157cc565b9061590c4361310e565b6001600160d01b0391828061592086613410565b169116019182116113275761593492615b0b565b9091565b6001600160d01b039081811161594c571690565b604490604051906306dfcc6560e41b825260d060048301526024820152fd5b600a5490600160401b821015610661576001820180600a5582101561142a57600a600052805160209091015160301b65ffffffffffff191665ffffffffffff9190911617600080516020615cd883398151915290910155565b8054600160401b811015610661576159e19160018201815561142f565b615a0c57815160209092015160301b65ffffffffffff191665ffffffffffff92909216919091179055565b634e487b7160e01b600052600060045260246000fd5b600a549192918015615ae157615a3a615a5291613140565b600a600052600080516020615cd88339815191520190565b9081549165ffffffffffff90818416918316808311615acf57869203615a9757615a9092509065ffffffffffff82549181199060301b169116179055565b60301c9190565b5050615aca90615ab6615aa861104d565b65ffffffffffff9092168252565b6001600160d01b038516602082015261596b565b615a90565b604051632520601d60e01b8152600490fd5b50615b0590615af1615aa861104d565b6001600160d01b038416602082015261596b565b60009190565b80549293928015615ba257615b22615b2f91613140565b8260005260206000200190565b9182549265ffffffffffff91828516928116808411615acf57879303615b6e5750615a9092509065ffffffffffff82549181199060301b169116179055565b915050615aca91615b8e615b8061104d565b65ffffffffffff9093168352565b6001600160d01b03861660208301526159c4565b5090615b0591615bb3615b8061104d565b6001600160d01b03851660208301526159c4565b6001600160a01b03808316929181811690848203615c5c57600082815260086020526040902080546001600160a01b031981166001600160a01b038716179091556107139593169392615c569285907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f600080a46001600160a01b031660009081526020819052604090205490565b916157b0565b60405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1a5bdb88191a5cd8589b1959606a1b6044820152606490fdfedf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fdc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb550bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3508d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802a26469706673582212205eddae3f70083f1206f843d74c1dd42c83bc9cd2672ae776335ecdaef553d72464736f6c63430008140033bb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724", - "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8063013cf08b146103de57806306fdde03146103d9578063078f6208146103d4578063095ea7b3146103cf5780630c0512e9146103ca5780630d61b519146103c557806318160ddd146103c0578063204c5d1f146103bb57806322dbefbb1461030c57806322f3e2d4146103b657806323b872dd146103b15780632519ae5c146103ac578063313ce567146103a75780633644e515146103a25780633a46b1a8146102d557806347c661401461039d5780634b145793146103075780634bf5d7e9146103985780634cf2ab32146103935780634cfd16bb1461038e5780634de184f6146103845780634fa76ec9146103895780635221c1f014610384578063548d496f1461037f578063587cde1e1461037a5780635c19a95c146103755780635cf0e8a4146103705780636cbadbfa146103705780636dcf811d1461036b5780636fcfff451461036657806370a08231146103615780637ce288ea1461035c5780637e5a9b47146103575780637ecebe00146103525780637f6dda141461034d57806384b0196e1461034857806385e59ce2146103435780638e539e8c1461033e5780639080936f1461033957806391ddadf41461033457806395d89b411461032f57806398e527d31461032a5780639a49bdde146103255780639ab24eb014610320578063a351f6151461031b578063a9059cbb14610316578063adf7420714610311578063b0b6cc1a1461030c578063b3fe8bcb14610307578063c3cda52014610302578063c8a6d06e146102fd578063c97bfe6b146102f8578063c9a3c0c7146102f3578063c9d27afe146102ee578063d505accf146102e9578063dcf628c0146102e4578063dd62ed3e146102df578063e49a62e9146102da578063eaeded5f146102d5578063eced3dfb146102d0578063f1127ed8146102cb5763f2c26a47146102c657600080fd5b6127d5565b6126af565b612691565b61126b565b612673565b612610565b612578565b6123ce565b612281565b612191565b612140565b6120b8565b611f76565b61132c565b610f20565b611c76565b611c1c565b611ae4565b611a9b565b611a7d565b611a5f565b6119b8565b61198c565b611963565b611931565b6118fa565b611838565b611802565b6117c5565b611797565b61170c565b6116cf565b611662565b61163f565b611621565b6115f9565b6115ba565b611589565b611534565b61156b565b6114ba565b611447565b61135d565b611296565b611248565b61122c565b6110c7565b610f8b565b610f54565b610e3d565b610d0d565b610c17565b610bf9565b610bc4565b610b84565b610aa3565b6109ec565b90600182811c92168015610413575b60208310146103fd57565b634e487b7160e01b600052602260045260246000fd5b91607f16916103f2565b600d546000929161042d826103e3565b80825291600190818116908115610492575060011461044b57505050565b91929350600d600052600080516020615cf8833981519152916000925b84841061047a57505060209250010190565b80546020858501810191909152909301928101610468565b915050602093945060ff929192191683830152151560051b010190565b600e54600092916104bf826103e3565b8082529160019081811690811561049257506001146104dd57505050565b91929350600e600052600080516020615cb8833981519152916000925b84841061050c57505060209250010190565b805460208585018101919091529093019281016104fa565b600f5460009291610534826103e3565b80825291600190818116908115610492575060011461055257505050565b91929350600f600052600080516020615d38833981519152916000925b84841061058157505060209250010190565b8054602085850181019190915290930192810161056f565b90600092918054916105aa836103e3565b91828252600193848116908160001461060c57506001146105cc575b50505050565b90919394506000526020928360002092846000945b8386106105f85750505050010190388080806105c6565b8054858701830152940193859082016105e1565b9294505050602093945060ff191683830152151560051b010190388080806105c6565b634e487b7160e01b600052604160045260246000fd5b61014081019081106001600160401b0382111761066157604052565b61062f565b604081019081106001600160401b0382111761066157604052565b60a081019081106001600160401b0382111761066157604052565b60c081019081106001600160401b0382111761066157604052565b90601f801991011681019081106001600160401b0382111761066157604052565b60405190600082600c54916106ec836103e3565b808352926001908181169081156107625750600114610715575b50610713925003836106b7565b565b600c60009081529150600080516020615c988339815191525b8483106107475750610713935050810160200138610706565b81935090816020925483858a0101520191019091859261072e565b90506020925061071394915060ff191682840152151560051b82010138610706565b60405190600082600d5491610798836103e3565b8083529260019081811690811561076257506001146107be5750610713925003836106b7565b600d60009081529150600080516020615cf88339815191525b8483106107f05750610713935050810160200138610706565b81935090816020925483858a010152019101909185926107d7565b60405190600082600e549161081f836103e3565b8083529260019081811690811561076257506001146108455750610713925003836106b7565b600e60009081529150600080516020615cb88339815191525b8483106108775750610713935050810160200138610706565b81935090816020925483858a0101520191019091859261085e565b60405190600082600f54916108a6836103e3565b8083529260019081811690811561076257506001146108cc5750610713925003836106b7565b600f60009081529150600080516020615d388339815191525b8483106108fe5750610713935050810160200138610706565b81935090816020925483858a010152019101909185926108e5565b9061071361092d9260405193848092610599565b03836106b7565b60005b8381106109475750506000910152565b8181015183820152602001610937565b9060209161097081518092818552858086019101610934565b601f01601f1916010190565b97936109a56109e1989497936101409b97939e9d9c9e8b526101608060208d01528b0190610957565b60408a0197909752606089015215156080880152151560a087015260c08601526001600160a01b031660e0850152838203610100850152610957565b946101208201520152565b34610a8a576020366003190112610a8a57600435600052601b60205260406000208054610a8660405191610a2e83610a278160018801610599565b03846106b7565b600284015460038501546004860154600587015460068801549397929492936001600160a01b031691610a6360078601610919565b93600a6008870154960154966040519a8b9a60ff808660081c169516938c61097c565b0390f35b600080fd5b906020610aa0928181520190610957565b90565b34610a8a57600080600319360112610b81576040519080600354610ac6816103e3565b80855291600191808316908115610b575750600114610afc575b610a8685610af0818703826106b7565b60405191829182610a8f565b9250600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610b3f575050508101602001610af082610a86610ae0565b80546020858701810191909152909301928101610b24565b869550610a8696935060209250610af094915060ff191682840152151560051b8201019293610ae0565b80fd5b34610a8a576000366003190112610a8a576060601654601854601e549060405192835260208301526040820152f35b6001600160a01b03811603610a8a57565b34610a8a576040366003190112610a8a57610bee600435610be481610bb3565b6024359033612b0f565b602060405160018152f35b34610a8a576000366003190112610a8a576020601754604051908152f35b34610a8a576020366003190112610a8a577fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d260043580600052601b60205260076040600020610c6883825414613eb3565b610cd760048201610c89610c84610c80835460ff1690565b1590565b613f3a565b610c9a6018546008850154146140c1565b610cca610ca686614053565b60058601544210801590610d06575b610cbe9061410c565b81610cfe575b50614168565b805460ff19166001179055565b0190610cea610ce583610919565b6148ea565b610cf9604051928392836141aa565b0390a1005b905038610cc4565b5080610cb5565b34610a8a576000366003190112610a8a576020600254604051908152f35b90815180825260208092019182818360051b85019501936000915b848310610d565750505050505090565b9091929394958480610d7083856001950387528a51610957565b9801930193019194939290610d46565b610aa090602081528251610e18610da561014092836020860152610160850190610957565b610def610ddb610dc7602089015193601f1994858983030160408a0152610957565b604089015184888303016060890152610957565b606088015183878303016080880152610957565b90608087015160a086015260a087015160c086015260c0870151908583030160e0860152610d2b565b9360e08101516101009081850152810151906101209182850152015191019015159052565b34610a8a57600080600319360112610b8157610a8690610f14604051610e6281610645565b60609283825283602083015283604083015283808301528060808301528060a08301528360c08301528060e083015261010090808284015261012080930152610ea9611040565b93610eb26106d8565b8552610ebc610784565b6020860152610ec961080b565b6040860152610ed6610892565b90850152601054608085015260115460a0850152610ef261545a565b60c085015260135460e08501526014549084015260155460ff16151590830152565b60405191829182610d80565b34610a8a576020366003190112610a8a576004356000526019602052602060018060a01b0360406000205416604051908152f35b34610a8a576000366003190112610a8a5760ff601f54161580610f7f575b6020906040519015158152f35b5060155460ff16610f72565b34610a8a576060366003190112610a8a57600435610fa881610bb3565b602435610fb481610bb3565b6001600160a01b03821660009081526001602090815260408083203384529091529020604435919054926000198410610ffe575b610ff293506129fd565b60405160018152602090f35b82841061101a5761101583610ff295033383612bc3565b610fe8565b604051637dc7a0d960e11b81523360048201526024810185905260448101849052606490fd5b6040519061071382610645565b6040519061071382610666565b6001600160401b03811161066157601f01601f191660200190565b9291926110818261105a565b9161108f60405193846106b7565b829481845281830111610a8a578281602093846000960137010152565b9080601f83011215610a8a57816020610aa093359101611075565b34610a8a5760a0366003190112610a8a576004356001600160401b038111610a8a576110f79036906004016110ac565b6064359060443561110783610bb3565b6111c26084359161113461112f61112885600052601d602052604060002090565b5460ff1690565b6134f7565b6111486001600160a01b0386161515615277565b61116a611165610c8061112884600052601a602052604060002090565b6152b2565b336000908152602081905260409020611186905b54151561349f565b6040516304fa45bf60e31b602082015260248101919091526001600160a01b03909416604485015283606481015b03601f1981018552846106b7565b601e54926111cf84612f29565b9360005b8181106111fd57610a866111ed338887876024358b613cc4565b6040519081529081906020820190565b8061121761120d61122793611405565b90549060031b1c90565b6112218289613b6b565b526135c6565b6111d3565b34610a8a576000366003190112610a8a57602060405160128152f35b34610a8a576000366003190112610a8a576020611263612dc1565b604051908152f35b34610a8a576040366003190112610a8a57602061126360043561128d81610bb3565b602435906128ec565b34610a8a576020366003190112610a8a5760043580600052601b6020526112c4604060002091825414613eb3565b60646112ef60018060d01b036112e56112e0600a8601546129a6565b613177565b1660165490614040565b049060036002820154910154918282019081831161132757604080519384526020840194909452928201526060810191909152608090f35b6129e7565b34610a8a576020366003190112610a8a57600435600052601a602052602060ff604060002054166040519015158152f35b34610a8a576000366003190112610a8a576113774361310e565b65ffffffffffff806113884361310e565b169116036113dd57610a8660405161139f81610666565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610957565b6040516301bfc1c560e61b8152600490fd5b634e487b7160e01b600052603260045260246000fd5b601e5481101561142a57601e600052600080516020615d188339815191520190600090565b6113ef565b805482101561142a5760005260206000200190600090565b34610a8a576020366003190112610a8a57600435601e54811015610a8a57602090601e600052600080516020615d188339815191520154604051908152f35b90815180825260208080930193019160005b8281106114a6575050505090565b835185529381019392810192600101611498565b34610a8a576000366003190112610a8a5760405180601e54808252826020809301601e600052600080516020615d188339815191529260005b8582821061151e5750505061150a925003836106b7565b610a86604051928284938452830190611486565b85548452600195860195889550930192016114f3565b34610a8a576020366003190112610a8a576020611561600435600052601d60205260ff6040600020541690565b6040519015158152f35b34610a8a576000366003190112610a8a576020601654604051908152f35b34610a8a576020366003190112610a8a57600435600052601d602052602060ff604060002054166040519015158152f35b34610a8a576020366003190112610a8a5760206004356115d981610bb3565b60018060a01b038091166000526008825260406000205416604051908152f35b34610a8a576020366003190112610a8a5761161f60043561161981610bb3565b33615bc7565b005b34610a8a576000366003190112610a8a576020601854604051908152f35b34610a8a576000366003190112610a8a57602060ff601f54166040519015158152f35b34610a8a576020366003190112610a8a5760043561167f81610bb3565b6001600160a01b031660009081526009602052604090205463ffffffff908181116116b05760209160405191168152f35b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b34610a8a576020366003190112610a8a5760206112636004356116f181610bb3565b6001600160a01b031660009081526020819052604090205490565b34610a8a576020366003190112610a8a5760043561172981614637565b1561175b5760207f57df5a6a467271f04b10f7fe9e66d21dcd8ae7eaf079099d48959f24a53b691091604051908152a1005b60405162461bcd60e51b81526020600482015260146024820152734e6f7420616c6c20636861696e7320726561647960601b6044820152606490fd5b34610a8a576020366003190112610a8a5760406117b5600435614053565b8251911515825215156020820152f35b34610a8a576020366003190112610a8a576004356117e281610bb3565b60018060a01b031660005260076020526020604060002054604051908152f35b34610a8a576040366003190112610a8a57610a8661182460243560043561552c565b604051918291602083526020830190611486565b34610a8a576000366003190112610a8a576118cb6118757f0000000000000000000000000000000000000000000000000000000000000000612f5b565b610a866118a17f0000000000000000000000000000000000000000000000000000000000000000613054565b6118d96118ac612f01565b91604051958695600f60f81b875260e0602088015260e0870190610957565b908582036040870152610957565b90466060850152306080850152600060a085015283820360c0850152611486565b34610a8a576020366003190112610a8a57602060646119286001600160d01b036112e56112e06004356129a6565b04604051908152f35b34610a8a576020366003190112610a8a5760206001600160d01b0361195a6112e06004356129a6565b16604051908152f35b34610a8a576020366003190112610a8a5760206119816004356155d1565b60ff60405191168152f35b34610a8a576000366003190112610a8a5760206119a84361310e565b65ffffffffffff60405191168152f35b34610a8a57600080600319360112610b815760405190806004546119db816103e3565b80855291600191808316908115610b575750600114611a0457610a8685610af0818703826106b7565b9250600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410611a47575050508101602001610af082610a86610ae0565b80546020858701810191909152909301928101611a2c565b34610a8a576000366003190112610a8a576020601c54604051908152f35b34610a8a576020366003190112610a8a57602061126360043561469e565b34610a8a576020366003190112610a8a57600435611ab881610bb3565b6001600160a01b031660009081526009602090815260409091206001600160d01b039061195a90613410565b34610a8a576040366003190112610a8a576004356001600160401b03602435818111610a8a5736602382011215610a8a578060040135918211610a8a573660248383010111610a8a57610cf9602492847fc7c129e53e59dadfa16305619e80c7519f1f6912c10915359fd75b56bcecdd7b95600052601b602052611c0e6040600020611b7283825414613eb3565b611bff600a6004830192611b92611b8d610c80865460ff1690565b61424c565b611ba160058201544210613eff565b6006810154611bcb90611bc4906001600160a01b03165b6001600160a01b031690565b331461428b565b0154611bf8611bda82336128ec565b916001600160d01b0390611bf1906112e0906129a6565b169161402a565b10156142c8565b805461ff001916610100179055565b604051948594019084614320565b34610a8a576040366003190112610a8a57610bee600435611c3c81610bb3565b60243590336129fd565b9181601f84011215610a8a578235916001600160401b038311610a8a576020808501948460051b010111610a8a57565b34610a8a576060366003190112610a8a576001600160401b03600435602435828111610a8a57611caa903690600401611c46565b92604435908111610a8a5783611cc584923690600401611c46565b611ccd614007565b611ce184600052601b602052604060002090565b90611cee85835414613eb3565b6004820192611d09611d04610c80865460ff1690565b61434e565b60185494611d1d60088501548714156143aa565b611d2f611d2a8786615694565b614406565b611d3a838214614449565b611dc4876007860197611dbc600a611d518b610919565b6020815191012098015497611dae896040519485936020850197889094939260809260a08301967f45de75acfcd4cbcc5691559486749bf0d5eb65e4b24c59ac2f258ba6bfceaa3484526020840152604083015260608201520152565b03601f1981018352826106b7565b519020612edb565b9760009889945b838610611e8c575050507fda7dba8f94d70cde423cce3a243bebf95d2ec927507b566f67e329dcfe2d06bb877fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d2611e6589611e4c8a610cca8f611e45611e3e8e6112e56112e060018060d01b03926129a6565b6064900490565b11156145a8565b611e58610ce582610919565b60405191829185836141aa565b0390a1601854604080519283526020830191909152819081015b0390a161161f6001600b55565b909192939499868b611ec8611bb8611ec3611ebb611eb5611eae868a8f614486565b3691611075565b896145f4565b938a8a6144c7565b6144d7565b6001600160a01b03821690611ede9082146144e1565b8d88886000925b8310611f21575050505091611f00611f1192611f17946128ec565b90611f0c82151561455c565b61316a565b9a6135c6565b9493929190611dcb565b8394955092611f3d611bb8611ec385611f4495611f49986144c7565b141561451d565b6135c6565b90899291888f8990611ee5565b6064359060ff82168203610a8a57565b6084359060ff82168203610a8a57565b34610a8a5760c0366003190112610a8a57600435611f9381610bb3565b60443590602435611fa2611f56565b83421161202a5761201e61161f94612025926040519060208201927fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf845260018060a01b038816604084015286606084015260808301526080825261200682610681565b61201960a4359360843593519020612edb565b612c6c565b9182612c16565b615bc7565b604051632341d78760e11b815260048101859052602490fd5b6001600160401b0381116106615760051b60200190565b81601f82011215610a8a5780359161207183612043565b9261207f60405194856106b7565b808452602092838086019260051b820101928311610a8a578301905b8282106120a9575050505090565b8135815290830190830161209b565b34610a8a5760c0366003190112610a8a576001600160401b03600435818111610a8a576120e99036906004016110ac565b90604435818111610a8a5736602382011215610a8a57612113903690602481600401359101611075565b608435918211610a8a57610a86926121326111ed93369060040161205a565b916064359160243590613539565b34610a8a576020366003190112610a8a57600435601c54811015610a8a57602090601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110154604051908152f35b34610a8a576080366003190112610a8a576004356001600160401b038111610a8a576121c46111b49136906004016110ac565b604435612241606435916121e861112f61112885600052601d602052604060002090565b61220761220261112883600052601a602052604060002090565b6152f6565b33600090815260208190526040902061221f9061117e565b604051633972e9fb60e21b602082015260248101919091529384906044820190565b601e549261224e84612f29565b9360005b81811061226c57610a866111ed338887876024358b613cc4565b8061121761120d61227c93611405565b612252565b34610a8a576040366003190112610a8a576004356024358015158103610a8a577f78975aaf742630489badd22949b88ac50eaaea576339ee05440b671a33bfb6a9916122cb614007565b611e7f6122e282600052601b602052604060002090565b6122ee83825414613eb3565b6122fd60058201544210613eff565b612311610c84610c80600484015460ff1690565b600b81019061234061233b610c8061112833869060018060a01b0316600052602052604060002090565b613f86565b612351601854600883015414613fc2565b612379610cca612365600a840154336128ec565b336000908152602095909552604090942090565b84156123b95760020161238d82825461316a565b90555b604080519384523360208501529315159383019390935260608201929092529081906080820190565b6003016123c782825461316a565b9055612390565b34610a8a5760e0366003190112610a8a576004356123eb81610bb3565b6024356123f781610bb3565b60443590606435612406611f66565b8142116124f1576001600160a01b0385811660008181526007602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99281019283529283019390935292861660608201526080810187905260a081019190915260c0808201949094529283526124aa92909161249760e0836106b7565b61201960c4359360a43593519020612edb565b6001600160a01b03848116908216036124c7575061161f92612b0f565b6040516325c0072360e11b81526001600160a01b0391821660048201529084166024820152604490fd5b60405163313c898160e11b815260048101839052602490fd5b97949161252f90610aa09c9a97949b9895928a526101608060208c01528a0190610957565b604089019a909a52606088015215156080870152151560a086015260c08501526001600160a01b031660e084015261010083015261012082015280830361014090910152611486565b34610a8a576020366003190112610a8a5760043580600052601b60205260406000206125a78154928314613eb3565b610a86600282015492600383015490600484015460058501546125d3600687015460018060a01b031690565b90600887015492600a880154946125f860096125f160018c01610919565b9a016154dd565b966040519a8b9a60ff808660081c169516938c61250a565b34610a8a576040366003190112610a8a57602061266a60043561263281610bb3565b6024359061263f82610bb3565b60018060a01b03166000526001835260406000209060018060a01b0316600052602052604060002090565b54604051908152f35b34610a8a576020366003190112610a8a576020611561600435614637565b34610a8a576000366003190112610a8a576020601e54604051908152f35b34610a8a576040366003190112610a8a576004356126cc81610bb3565b6024359063ffffffff82168203610a8a57610a869161271c916126ed612bfd565b506126f6612bfd565b506001600160a01b03166000908152600960205260409020612716612bfd565b5061142f565b506040519061272a82610666565b5465ffffffffffff811680835260309190911c60209283019081526040805192835290516001600160d01b031692820192909252918291820190565b9794999895926127ab9061279d6127b99461278f6101009b98958d610120908181520190610957565b8c810360208e015290610957565b908a820360408c0152610957565b9088820360608a0152610957565b97608087015260a086015260c085015260e08401521515910152565b34610a8a57600080600319360112610b8157604051908181600c546127f9816103e3565b808452936001918083169081156128c8575060011461287d575b5050612821925003826106b7565b604051906128328261092d8161041d565b610a8660405161284c81612845816104af565b03826106b7565b60405161285c8161284581610524565b601054601154601354916014549360ff6015541695604051998a998a612766565b9150600c8252600080516020615c988339815191525b8483106128ad575061282193505081016020013880612813565b81935090816020925483858901015201910190918492612893565b9150506020925061282194915060ff191682840152151560051b8201013880612813565b6001600160a01b03166000908152600960205260408120909161290e906129a6565b81549083829160058411612957575b61292893508461343e565b8061293c5750505b6001600160d01b031690565b9161294960209293613140565b92815220015460301c612930565b91926129628161329b565b8103908111611327576129289385875265ffffffffffff808360208a200154169085161060001461299457509161291d565b9291506129a09061315c565b9061291d565b65ffffffffffff6129b64361310e565b16808210156129c95750610aa09061310e565b6044925060405191637669fc0f60e11b835260048301526024820152fd5b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0380821694939291908515612af65782168015612add576001600160a01b03821660009081526020819052604090205495848710612aae5784610713969703612a5f8460018060a01b03166000526000602052604060002090565b556001600160a01b0384166000908152602081815260409182902080548801905590518681527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a36156df565b60405163391434e360e21b81526001600160a01b03841660048201526024810188905260448101869052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b6001600160a01b038082169291908315612baa578216938415612b915780612b877f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594612b7060209560018060a01b03166000526001602052604060002090565b9060018060a01b0316600052602052604060002090565b55604051908152a3565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b906001600160a01b0380831615612baa57811615612b9157612b70612bfa9260018060a01b03166000526001602052604060002090565b55565b60405190612c0a82610666565b60006020838281520152565b6001600160a01b03811660009081526007602052604090208054600181019091559091819003612c44575050565b6040516301d4b62360e61b81526001600160a01b039092166004830152602482015260449150fd5b91610aa09391612c7b93612c84565b90929192612d34565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612d0857926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa15612cfc5780516001600160a01b03811615612cf357918190565b50809160019190565b604051903d90823e3d90fd5b50505060009160039190565b60041115612d1e57565b634e487b7160e01b600052602160045260246000fd5b612d3d81612d14565b80612d46575050565b612d4f81612d14565b60018103612d695760405163f645eedf60e01b8152600490fd5b612d7281612d14565b60028103612d935760405163fce698f760e01b815260048101839052602490fd5b80612d9f600392612d14565b14612da75750565b6040516335e2f38360e21b81526004810191909152602490fd5b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480612eb2575b15612e1c577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152612eac8161069c565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612df3565b604290612ee6612dc1565b906040519161190160f01b8352600283015260228201522090565b604051602081018181106001600160401b038211176106615760405260008152906000368137565b90612f3382612043565b612f4060405191826106b7565b8281528092612f51601f1991612043565b0190602036910137565b60ff8114612f995760ff811690601f8211612f875760405191612f7d83610666565b8252602082015290565b604051632cd44ac360e21b8152600490fd5b50604051600554816000612fac836103e3565b808352926001908181169081156130325750600114612fd3575b50610aa0925003826106b7565b6005600090815291507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8483106130175750610aa0935050810160200138612fc6565b81935090816020925483858901015201910190918492612ffe565b905060209250610aa094915060ff191682840152151560051b82010138612fc6565b60ff81146130765760ff811690601f8211612f875760405191612f7d83610666565b50604051600654816000613089836103e3565b8083529260019081811690811561303257506001146130af5750610aa0925003826106b7565b6006600090815291507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b8483106130f35750610aa0935050810160200138612fc6565b819350908160209254838589010152019101909184926130da565b65ffffffffffff90818111613121571690565b604490604051906306dfcc6560e41b8252603060048301526024820152fd5b60001981019190821161132757565b9190820391821161132757565b906001820180921161132757565b9190820180921161132757565b600a805460008160058111613225575b509290925b8381106131cb57505060009180156000146131a957505050600090565b6131b290613140565b9152600080516020615cd8833981519152015460301c90565b90928082169080831860011c8201809211611327578360005265ffffffffffff8083600080516020615cd8833981519152015416908616106000146132135750925b9061318c565b93915061321f9061315c565b9061320d565b90916132308261329b565b82039182116113275783835265ffffffffffff8083600080516020615cd88339815191520154169086161060001461326b5750905b38613187565b91506132769061315c565b613265565b8115613285570490565b634e487b7160e01b600052601260045260246000fd5b6001811115610aa057600181600160801b8110156133b4575b61335c61335261334861333e61333461332a61336897600488600160401b6133639a10156133a7575b64010000000081101561339a575b6201000081101561338d575b610100811015613381575b6010811015613375575b101561336d575b60030260011c613323818b61327b565b0160011c90565b613323818a61327b565b613323818961327b565b613323818861327b565b613323818761327b565b613323818661327b565b809361327b565b821190565b900390565b60011b613313565b811c9160021b9161330c565b60081c91811b91613302565b60101c9160081b916132f7565b60201c9160101b916132eb565b60401c9160201b916132dd565b50600160401b9050608082901c6132b4565b600a54600090806133d8575050600090565b8060001981011161132757600a7fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a79252015460301c90565b80546000918161342257505050600090565b6000199282848101116113275760209181522001015460301c90565b91905b83821061344e5750505090565b9091928083169080841860011c82018092116113275760008581526020902082015465ffffffffffff908116908416101561348d5750925b9190613441565b9392506134999061315c565b91613486565b156134a657565b60405162461bcd60e51b815260206004820152602360248201527f4d75737420686f6c6420746f6b656e7320746f206372656174652070726f706f6044820152621cd85b60ea1b6064820152608490fd5b156134fe57565b60405162461bcd60e51b815260206004820152601360248201527210da185a5b881b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606490fd5b92909391336000526000602052613556604060002054151561349f565b841561358157610aa09482600052601d60205261357a60ff604060002054166134f7565b3394613cc4565b60405162461bcd60e51b815260206004820152601960248201527f4475726174696f6e206d75737420626520706f736974697665000000000000006044820152606490fd5b60001981146113275760010190565b8181106135e0575050565b600081556001016135d5565b90601f82116135f9575050565b61071391600c600052600080516020615c98833981519152906020601f840160051c83019310613631575b601f0160051c01906135d5565b9091508190613624565b90601f8211613648575050565b61071391600d600052600080516020615cf8833981519152906020601f840160051c8301931061363157601f0160051c01906135d5565b90601f821161368c575050565b61071391600e600052600080516020615cb8833981519152906020601f840160051c8301931061363157601f0160051c01906135d5565b90601f82116136d0575050565b61071391600f600052600080516020615d38833981519152906020601f840160051c8301931061363157601f0160051c01906135d5565b9190601f811161371657505050565b610713926000526020600020906020601f840160051c8301931061363157601f0160051c01906135d5565b9081516001600160401b0381116106615761376681613761600c546103e3565b6135ec565b602080601f83116001146137a25750819293600092613797575b50508160011b916000199060031b1c191617600c55565b015190503880613780565b90601f198316946137c3600c600052600080516020615c9883398151915290565b926000905b8782106138005750508360019596106137e7575b505050811b01600c55565b015160001960f88460031b161c191690553880806137dc565b806001859682949686015181550195019301906137c8565b9081516001600160401b0381116106615761383d81613838600d546103e3565b61363b565b602080601f8311600114613879575081929360009261386e575b50508160011b916000199060031b1c191617600d55565b015190503880613857565b90601f1983169461389a600d600052600080516020615cf883398151915290565b926000905b8782106138d75750508360019596106138be575b505050811b01600d55565b015160001960f88460031b161c191690553880806138b3565b8060018596829496860151815501950193019061389f565b9081516001600160401b038111610661576139148161390f600e546103e3565b61367f565b602080601f83116001146139505750819293600092613945575b50508160011b916000199060031b1c191617600e55565b01519050388061392e565b90601f19831694613971600e600052600080516020615cb883398151915290565b926000905b8782106139ae575050836001959610613995575b505050811b01600e55565b015160001960f88460031b161c1916905538808061398a565b80600185968294968601518155019501930190613976565b9081516001600160401b038111610661576139eb816139e6600f546103e3565b6136c3565b602080601f8311600114613a275750819293600092613a1c575b50508160011b916000199060031b1c191617600f55565b015190503880613a05565b90601f19831694613a48600f600052600080516020615d3883398151915290565b926000905b878210613a85575050836001959610613a6c575b505050811b01600f55565b015160001960f88460031b161c19169055388080613a61565b80600185968294968601518155019501930190613a4d565b91909182516001600160401b03811161066157613ac481613abe84546103e3565b84613707565b602080601f8311600114613b00575081929394600092613af5575b50508160011b916000199060031b1c1916179055565b015190503880613adf565b90601f19831695613b1685600052602060002090565b926000905b888210613b5357505083600195969710613b3a575b505050811b019055565b015160001960f88460031b161c19169055388080613b30565b80600185968294968601518155019501930190613b1b565b805182101561142a5760209160051b010190565b15613b8657565b60405162461bcd60e51b815260206004820152601a60248201527f54617267657420636861696e206e6f7420737570706f727465640000000000006044820152606490fd5b601c54600160401b811015610661576001810180601c5581101561142a57601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110155565b601e54600160401b811015610661576001810180601e5581101561142a57601e600052600080516020615d188339815191520155565b90815491600160401b8310156106615782613c6c9160016107139501815561142f565b90919082549060031b91821b91600019901b1916179055565b9081526001600160a01b039091166020820152606060408201819052610aa092910190610957565b604090610aa0939281528160208201520190611486565b91949060175495613cdc613cd7886135c6565b601755565b613d59613cf388600052601b602052604060002090565b91888355613d2e600194613d0988878701613a9d565b6000600286015560006003860155613d286004860160ff198154169055565b4261316a565b60058401556006830180546001600160a01b0319166001600160a01b03871617905560078301613a9d565b846008820155613d76613d6b4361310e565b65ffffffffffff1690565b80613ea25750819060005b600a820155600960009101925b613e4d575b505050613e37613e47937f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd637f5d1231ca3a274bcd2f510e0d53a889213ebf0315b86ee6bb9d73da08fba7460696947fdb17271edb72bcaba16ce918d885db2e701491c9ff3f713f80caf9d614aa9ff494613e0c8a613bcb565b613e1c6040519283928c84613c85565b0390a160408051888152602081019290925290918291820190565b0390a16040519182918583613cad565b0390a190565b8651811015613e9d5780613e83613e7e611128613e6d613e97958c613b6b565b51600052601d602052604060002090565b613b7f565b611f44613e90828a613b6b565b5185613c49565b81613d8e565b613d93565b613eab90613140565b908291613d81565b15613eba57565b60405162461bcd60e51b815260206004820152601760248201527f50726f706f73616c20646f6573206e6f742065786973740000000000000000006044820152606490fd5b15613f0657565b60405162461bcd60e51b815260206004820152600c60248201526b159bdd1a5b99c8195b99195960a21b6044820152606490fd5b15613f4157565b60405162461bcd60e51b815260206004820152601960248201527f50726f706f73616c20616c7265616479206578656375746564000000000000006044820152606490fd5b15613f8d57565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b15613fc957565b60405162461bcd60e51b815260206004820152601660248201527557726f6e6720636861696e20666f7220766f74696e6760501b6044820152606490fd5b6002600b5414614018576002600b55565b604051633ee5aeb560e01b8152600490fd5b90600a820291808304600a149015171561132757565b8181029291811591840414171561132757565b9081600052601b60205261406e604060002092835414613eb3565b60028201546003830154928382019081831161132757600a01546064906140a5906001600160d01b03906112e5906112e0906129a6565b041115928391826140b7575b50509190565b11905038806140b1565b156140c857565b606460405162461bcd60e51b815260206004820152602060248201527f45786563757465206f6e6c7920696e20676f7665726e616e636520636861696e6044820152fd5b1561411357565b60405162461bcd60e51b815260206004820152602760248201527f566f74696e67206e6f7420656e64656420616e642071756f72756d206e6f74206044820152661c995858da195960ca1b6064820152608490fd5b1561416f57565b60405162461bcd60e51b8152602060048201526013602482015272141c9bdc1bdcd85b081b9bdd081c185cdcd959606a1b6044820152606490fd5b9190825260209160408382015260009282546141c5816103e3565b93846040850152600191828116908160001461422757506001146141ec575b505050505090565b6000908152828120949550935b8585106142135750505060609250010138808080806141e4565b8054858501606001529382019381016141f9565b93505050506060935060ff929192191683830152151560051b010138808080806141e4565b1561425357565b60405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e1958dd5d195960821b6044820152606490fd5b1561429257565b60405162461bcd60e51b815260206004820152600e60248201526d27b7363c9034b734ba34b0ba37b960911b6044820152606490fd5b156142cf57565b60405162461bcd60e51b815260206004820152602360248201527f496e73756666696369656e7420766f74696e6720706f77657220746f2063616e60448201526218d95b60ea1b6064820152608490fd5b91926060938192845260406020850152816040850152848401376000828201840152601f01601f1916010190565b1561435557565b60405162461bcd60e51b815260206004820152602760248201527f50726f706f73616c20616c726561647920657865637574656420696e20746869604482015266399031b430b4b760c91b6064820152608490fd5b156143b157565b60405162461bcd60e51b815260206004820152602760248201527f557365206578656375746550726f706f73616c20696e20676f7665726e616e63604482015266329031b430b4b760c91b6064820152608490fd5b1561440d57565b60405162461bcd60e51b8152602060048201526014602482015273436861696e206e6f7420696e207461726765747360601b6044820152606490fd5b1561445057565b60405162461bcd60e51b815260206004820152600e60248201526d426164207369676e61747572657360901b6044820152606490fd5b919081101561142a5760051b81013590601e1981360301821215610a8a5701908135916001600160401b038311610a8a576020018236038113610a8a579190565b919081101561142a5760051b0190565b35610aa081610bb3565b156144e857565b60405162461bcd60e51b815260206004820152600d60248201526c426164207369676e617475726560981b6044820152606490fd5b1561452457565b60405162461bcd60e51b815260206004820152601060248201526f223ab83634b1b0ba329039b4b3b732b960811b6044820152606490fd5b1561456357565b60405162461bcd60e51b815260206004820152601b60248201527f4e6f20766f74696e6720706f77657220617420736e617073686f7400000000006044820152606490fd5b156145af57565b60405162461bcd60e51b815260206004820152601a60248201527f51756f72756d206e6f74207265616368656420627920736967730000000000006044820152606490fd5b8151610aa092612c7b92604019830161462c5761462592506020820151906060604084015193015160001a90612c84565b9192909190565b505060009160029190565b614650600091808352601b602052604083205414613eb3565b80601e54915b82811061466557505050600190565b6146856146718261469e565b600052601d60205260ff6040600020541690565b1561469857614693906135c6565b614656565b50905090565b601e548110156146c157601e600052600080516020615d18833981519152015490565b60405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840c6d0c2d2dc40d2dcc8caf606b1b6044820152606490fd5b909291926147098161105a565b9161471760405193846106b7565b829482845282820111610a8a576020610713930190610934565b9190604083820312610a8a5782516001600160e01b031981168103610a8a57926020810151906001600160401b038211610a8a57019080601f83011215610a8a578151610aa0926020016146fc565b90816020910312610a8a575190565b9190826040910312610a8a5760208251920151610aa081610bb3565b9080601f83011215610a8a578151610aa0926020016146fc565b9080601f83011215610a8a578151906147dd82612043565b926147eb60405194856106b7565b828452602092838086019160051b83010192808411610a8a57848301915b8483106148195750505050505090565b82516001600160401b038111610a8a57869161483a848480948901016147ab565b815201920191614809565b91909161010081840312610a8a578051916001600160401b0392838111610a8a57846148729184016147ab565b936020830151848111610a8a578161488b9185016147ab565b936040840151818111610a8a57826148a49186016147ab565b936060810151828111610a8a57836148bd9183016147ab565b9360808201519360a08301519360c0840151908111610a8a5760e0916148e49185016147c5565b92015190565b6148fe602091828082518301019101614731565b91906001600160e01b031916630236fce560e51b810361493d5750818161492e9261071394518301019101614845565b9695909594919493929361503f565b63f0f9e6b760e01b8103614966575081816149619261071394518301019101614780565b61513d565b632ab43f7f60e11b810361498f5750818161498a9261071394518301019101614780565b6151dd565b6304fa45bf60e31b81036149c2575081816149b3926107139451830101910161478f565b6001600160a01b03169061533a565b633972e9fb60e21b81036149eb575081816149e69261071394518301019101614780565b6153ea565b63093f734560e31b8103614a1457508181614a0f9261071394518301019101614780565b614a87565b633e78500160e21b8103614a3d57508181614a389261071394518301019101614780565b614c22565b633cdb568760e11b14915061071390505760405162461bcd60e51b81526020600482015260116024820152702ab735b737bbb71037b832b930ba34b7b760791b6044820152606490fd5b80600052601d60205260ff60406000205416614b35576018548114614af057614aeb81614ae2610cca7fbba9d55e9fd1a441b1617724e2fdb76777d15ec77ab2b72ac15952cbe97085db94600052601d602052604060002090565b6111ed81613c13565b0390a1565b60405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642063757272656e7420636861696e00000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f436861696e20616c726561647920737570706f727465640000000000000000006044820152606490fd5b15614b8157565b60405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f76652063757272656e7420636861696e00000000006044820152606490fd5b601e548015614c0c576000198101908082101561142a577f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e34f600091601e83520155601e55565b634e487b7160e01b600052603160045260246000fd5b614c4260ff614c3b83600052601d602052604060002090565b54166134f7565b614c50601854821415614b7a565b614c71614c6782600052601d602052604060002090565b805460ff19169055565b60005b601e5480821015614cee5782614c8c61120d84611405565b14614ca05750614c9b906135c6565b614c74565b91614ce6614aeb92613c6c614ce061120d614cdb7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d598613140565b611405565b91611405565b6111ed614bc6565b5050614aeb7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d5916111ed565b15614d2157565b60405162461bcd60e51b815260206004820152601660248201527553796d626f6c2063616e6e6f7420626520656d70747960501b6044820152606490fd5b15614d6657565b60405162461bcd60e51b815260206004820152601860248201527f4c6f636174696f6e2063616e6e6f7420626520656d70747900000000000000006044820152606490fd5b15614db257565b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b210353ab934b9b234b1ba34b7b760611b6044820152606490fd5b15614df557565b60405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964204f4b544d4f60981b6044820152606490fd5b15614e3157565b60405162461bcd60e51b815260206004820152600b60248201526a0496e76616c6964204b50560ac1b6044820152606490fd5b805190600160401b82116106615760125482601255808310614edc575b5060126000526020908101907fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34446000925b848410614ec0575050505050565b60018382614ed083945186613a9d565b01920193019290614eb2565b600060128152837fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344492830192015b828110614f18575050614e81565b80614f25600192546103e3565b80614f32575b5001614f0a565b601f908181118414614f4a5750508281555b38614f2b565b83614f6c92614f5e85600052602060002090565b920160051c820191016135d5565b60008181526020812081835555614f44565b989796949592614fc190614fb3614fa3614fcf9597948d610100908181520190610957565b6020978d89818403910152610957565b908b820360408d0152610957565b9089820360608b0152610957565b93608088015260a087015285830360c08701528151908184528084019381808460051b8301019401946000915b84831061501157505050505060e09150930152565b9091929394848061502e600193601f198682030187528a51610957565b980193019301919594939290614ffc565b9490959193969296855115615101577f62d6efdb8dbca656ac38d327c1d66a4ccaeabc91c464fe5e7352b604858f5f4697614aeb9561508089511515614d1a565b61508c81511515614d5f565b615097831515614dab565b6150a2841515614dee565b6150ad861515614e2a565b6150b688613741565b6150bf89613818565b6150c8816138ef565b6150d1826139c6565b6150da83601055565b6150e384601155565b6150ec85614e64565b6150f586601355565b60405198899889614f7e565b60405162461bcd60e51b81526020600482015260146024820152734e616d652063616e6e6f7420626520656d70747960601b6044820152606490fd5b801515806151d2575b1561518d5760168054908290556040805191825260208201929092527fd0198ea88bf9c4ad5317b68e697944e524541fcb494d854f095b1cd88a097ab69181908101614aeb565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c69642071756f72756d2070657263656e74616765000000000000006044820152606490fd5b506064811115615146565b80600052601d6020526151f760ff604060002054166134f7565b601854908181146152425760188190556040805192835260208301919091527f979103c7afbf0138fe781172504ceb318ff78f9a420de8cabac8141f0121b521919081908101614aeb565b60405162461bcd60e51b815260206004820152600d60248201526c14d85b594818da185a5b881251609a1b6044820152606490fd5b1561527e57565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b156152b957565b60405162461bcd60e51b81526020600482015260156024820152744d6f64756c6520616c72656164792065786973747360581b6044820152606490fd5b156152fd57565b60405162461bcd60e51b8152602060048201526015602482015274135bd91d5b1948191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606490fd5b7ff14475b19484bf096265507cc0c41cd3bf1994992088806830686e2d7272271991906153716001600160a01b0383161515615277565b80600052601a60205261538c60ff60406000205416156152b2565b600081815260196020526040902080546001600160a01b0319166001600160a01b038416179055601a602090815260406000819020805460ff1916600117905580519283526001600160a01b03909316908201529081908101614aeb565b60207f4c7c76abe482a2c36ea52f1b999474c69f8b4afeeac5635f8aea2526864ba8539180600052601a825261542760ff604060002054166152f6565b600081815260198352604080822080546001600160a01b0319169055601a845290819020805460ff1916905551908152a1565b6012549061546782612043565b916040615476815194856106b7565b8184528360208091019160126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444906000935b8585106154ba57505050505050565b600184819284516154cf81612845818a610599565b8152019301940193916154ab565b9060405191828154918282526020928383019160005283600020936000905b82821061551257505050610713925003836106b7565b8554845260019586019588955093810193909101906154fc565b601c90815492838210156155c557810191828211611327578383116155bd575b8183038381116113275761555f90612f29565b93825b84811061557157505050505090565b8181101561142a576155b89083600052807f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101546112216155b2878461314f565b89613b6b565b615562565b83925061554c565b50505050610aa0612f01565b6155e581600052601b602052604060002090565b6155f182825414613eb3565b600481015460ff8160081c1661568c5760ff1661568557615613600592614053565b9290910154421091821592828061567e575b6156755782918261565c575b5050615655578161564c575b5061564757600090565b600290565b9050153861563d565b5050600190565b8492509061566d575b503880615631565b905038615665565b50505050600590565b5081615625565b5050600390565b505050600490565b9060005b6009830180548210156156d6576156b082849261142f565b90549060031b1c146156ce576156c76009916135c6565b9050615698565b505050600190565b50505050600090565b6001600160a01b0390811692918190841561576b575b16908115615723575b61071393600052600860205280604060002054169160005260406000205416906157b0565b61572c83615938565b936157364361310e565b6001600160d01b039586806157496133c6565b1691169003958611611327576107139561576291615a22565b505093506156fe565b905061577683615938565b906157804361310e565b6001600160d01b039283806157936133c6565b169116019283116113275783926157a991615a22565b50506156f5565b6001600160a01b038083169392919081169081851415806158f9575b6157d8575b5050505050565b8161585d575b5050826157ed575b80806157d1565b6001600160a01b031660009081526009602052604090207fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7249161583a916158349091615938565b90615902565b604080516001600160d01b039384168152919092166020820152a23880806157e6565b6001600160a01b0316600090815260096020526040902061587d84615938565b6158864361310e565b6001600160d01b0391828061589a86613410565b169116900392828411611327577fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724936158ef926158d692615b0b565b6040805192851683529316602082015291829190820190565b0390a238806157de565b508315156157cc565b9061590c4361310e565b6001600160d01b0391828061592086613410565b169116019182116113275761593492615b0b565b9091565b6001600160d01b039081811161594c571690565b604490604051906306dfcc6560e41b825260d060048301526024820152fd5b600a5490600160401b821015610661576001820180600a5582101561142a57600a600052805160209091015160301b65ffffffffffff191665ffffffffffff9190911617600080516020615cd883398151915290910155565b8054600160401b811015610661576159e19160018201815561142f565b615a0c57815160209092015160301b65ffffffffffff191665ffffffffffff92909216919091179055565b634e487b7160e01b600052600060045260246000fd5b600a549192918015615ae157615a3a615a5291613140565b600a600052600080516020615cd88339815191520190565b9081549165ffffffffffff90818416918316808311615acf57869203615a9757615a9092509065ffffffffffff82549181199060301b169116179055565b60301c9190565b5050615aca90615ab6615aa861104d565b65ffffffffffff9092168252565b6001600160d01b038516602082015261596b565b615a90565b604051632520601d60e01b8152600490fd5b50615b0590615af1615aa861104d565b6001600160d01b038416602082015261596b565b60009190565b80549293928015615ba257615b22615b2f91613140565b8260005260206000200190565b9182549265ffffffffffff91828516928116808411615acf57879303615b6e5750615a9092509065ffffffffffff82549181199060301b169116179055565b915050615aca91615b8e615b8061104d565b65ffffffffffff9093168352565b6001600160d01b03861660208301526159c4565b5090615b0591615bb3615b8061104d565b6001600160d01b03851660208301526159c4565b6001600160a01b03808316929181811690848203615c5c57600082815260086020526040902080546001600160a01b031981166001600160a01b038716179091556107139593169392615c569285907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f600080a46001600160a01b031660009081526020819052604090205490565b916157b0565b60405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1a5bdb88191a5cd8589b1959606a1b6044820152606490fdfedf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fdc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb550bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3508d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802a26469706673582212205eddae3f70083f1206f843d74c1dd42c83bc9cd2672ae776335ecdaef553d72464736f6c63430008140033", + "bytecode": "0x61016080604052346200021057620081e6803803809162000020826200022b565b833980820160408212620002105782516001600160401b039283821162000210578190610180918291031262000210576200005a62000297565b90828601518581116200021057848762000077928601016200030f565b8252808301518581116200021057848762000095928601016200030f565b60208301526101a083015185811162000210578487620000b8928601016200030f565b60408301526101c083015185811162000210578487620000db928601016200030f565b60608301526101e083015185811162000210578487620000fe928601016200030f565b608083015261020083015160a0830152610220830151858111620002105784876200012c9286010162000382565b60c083015261024083015160e08301526102608301519561010096878401526102808401518681116200021057858262000169928701016200040d565b9561012096878501526102a085015181811162000210578683620001909288010162000484565b9561014096878601526102c0860151918211620002105782620001ba92620001c697010162000484565b90830152519062001369565b60405191615fa49384620021e2853960805184612f00015260a05184612fbb015260c05184612eca015260e05184612f4f01525183612f75015251826119d401525181611a000152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b601f01601f1916610160908101906001600160401b038211908210176200025157604052565b62000215565b604081019081106001600160401b038211176200025157604052565b601f909101601f19168101906001600160401b038211908210176200025157604052565b6040519061018082016001600160401b038111838210176200025157604052565b6040519061014082016001600160401b038111838210176200025157604052565b60405190620002e88262000257565b565b60005b838110620002fe5750506000910152565b8181015183820152602001620002ed565b81601f82011215620002105780516001600160401b03811162000251576040519262000346601f8301601f19166020018562000273565b818452602082840101116200021057620003679160208085019101620002ea565b90565b6001600160401b038111620002515760051b60200190565b9080601f8301121562000210578151906200039d826200036a565b92620003ad604051948562000273565b828452602092838086019160051b830101928084116200021057848301915b848310620003dd5750505050505090565b82516001600160401b0381116200021057869162000401848480948901016200030f565b815201920191620003cc565b81601f82011215620002105780519162000427836200036a565b9262000437604051948562000273565b808452602092838086019260051b82010192831162000210578301905b82821062000463575050505090565b81516001600160a01b03811681036200021057815290830190830162000454565b81601f8201121562000210578051916200049e836200036a565b92620004ae604051948562000273565b808452602092838086019260051b82010192831162000210578301905b828210620004da575050505090565b81518152908301908301620004cb565b90600182811c921680156200051c575b60208310146200050657565b634e487b7160e01b600052602260045260246000fd5b91607f1691620004fa565b81811062000533575050565b6000815560010162000527565b90601f82116200054e575050565b620002e89160036000526020600020906020601f840160051c830193106200057f575b601f0160051c019062000527565b909150819062000571565b90601f821162000598575050565b620002e89160046000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b90601f8211620005d6575050565b620002e89160056000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b90601f821162000614575050565b620002e89160066000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b90601f821162000652575050565b620002e891600d6000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b90601f821162000690575050565b620002e891600e6000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b90601f8211620006ce575050565b620002e891600f6000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b90601f82116200070c575050565b620002e89160106000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b90601f82116200074a575050565b620002e891600c6000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b9190601f81116200078a57505050565b620002e8926000526020600020906020601f840160051c830193106200057f57601f0160051c019062000527565b80519091906001600160401b0381116200025157620007e481620007de600454620004ea565b6200058a565b602080601f831160011462000823575081929360009262000817575b50508160011b916000199060031b1c191617600455565b01519050388062000800565b6004600052601f198316949091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b926000905b8782106200089257505083600195961062000878575b505050811b01600455565b015160001960f88460031b161c191690553880806200086d565b8060018596829496860151815501950193019062000857565b80519091906001600160401b0381116200025157620008d781620008d1600d54620004ea565b62000644565b602080601f83116001146200091657508192936000926200090a575b50508160011b916000199060031b1c191617600d55565b015190503880620008f3565b600d600052601f198316949091907fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5926000905b878210620009855750508360019596106200096b575b505050811b01600d55565b015160001960f88460031b161c1916905538808062000960565b806001859682949686015181550195019301906200094a565b80519091906001600160401b0381116200025157620009ca81620009c4600e54620004ea565b62000682565b602080601f831160011462000a095750819293600092620009fd575b50508160011b916000199060031b1c191617600e55565b015190503880620009e6565b600e600052601f198316949091907fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd926000905b87821062000a7857505083600195961062000a5e575b505050811b01600e55565b015160001960f88460031b161c1916905538808062000a53565b8060018596829496860151815501950193019062000a3d565b80519091906001600160401b038111620002515762000abd8162000ab7600f54620004ea565b620006c0565b602080601f831160011462000afc575081929360009262000af0575b50508160011b916000199060031b1c191617600f55565b01519050388062000ad9565b600f600052601f198316949091907f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802926000905b87821062000b6b57505083600195961062000b51575b505050811b01600f55565b015160001960f88460031b161c1916905538808062000b46565b8060018596829496860151815501950193019062000b30565b80519091906001600160401b038111620002515762000bb08162000baa601054620004ea565b620006fe565b602080601f831160011462000bef575081929360009262000be3575b50508160011b916000199060031b1c191617601055565b01519050388062000bcc565b6010600052601f198316949091907f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672926000905b87821062000c5e57505083600195961062000c44575b505050811b01601055565b015160001960f88460031b161c1916905538808062000c39565b8060018596829496860151815501950193019062000c23565b81519192916001600160401b038111620002515762000ca38162000c9c8454620004ea565b846200077a565b602080601f831160011462000ce257508192939460009262000cd6575b50508160011b916000199060031b1c1916179055565b01519050388062000cc0565b90601f1983169562000cf985600052602060002090565b926000905b88821062000d395750508360019596971062000d1f575b505050811b019055565b015160001960f88460031b161c1916905538808062000d15565b8060018596829496860151815501950193019062000cfe565b634e487b7160e01b600052601160045260246000fd5b80519068010000000000000000821162000251576012548260125580831062000dda575b506012600052602090810190600080516020620081868339815191526000925b84841062000dbb575050505050565b6001838262000dcd8394518662000c77565b0192019301929062000dac565b60126000908152600080516020620081868339815191529182019184015b82811062000e0857505062000d8c565b8062000e1760019254620004ea565b8062000e26575b500162000df8565b601f90818111841462000e405750508281555b3862000e1e565b8362000e659262000e5685600052602060002090565b920160051c8201910162000527565b6000818152602081208183555562000e39565b805180516001600160401b038111620002515762000ea38162000e9d600c54620004ea565b6200073c565b6020918290601f831160011462000f6b5762000f4d938361012094620002e8979462000ef19460009262000f5f575b50508160011b916000199060031b1c191617600c555b820151620008ab565b62000f0060408201516200099e565b62000f0f606082015162000a91565b62000f1e608082015162000b84565b60a081015160115562000f3560c082015162000d68565b60e08101516013556101008101516014550151151590565b60ff8019601554169115151617601555565b01519050388062000ed2565b600c600052601f19831691907fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c79260005b81811062000fee575084620002e8979462000ef19462000f4d9894610120986001951062000fd4575b505050811b01600c5562000ee8565b015160001960f88460031b161c1916905538808062000fc5565b92938660018192878601518155019501930162000f9c565b6000198114620010165760010190565b62000d52565b634e487b7160e01b600052603260045260246000fd5b8051821015620010475760209160051b010190565b6200101c565b601e546801000000000000000081101562000251576001810180601e558110156200104757601e6000527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500155565b15620010a457565b60405162461bcd60e51b815260206004820152601660248201527f417272617973206c656e677468206d69736d61746368000000000000000000006044820152606490fd5b15620010f157565b60405162461bcd60e51b815260206004820152601360248201527f4e6f20696e697469616c20706172746e657273000000000000000000000000006044820152606490fd5b156200113e57565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b156200117a57565b60405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606490fd5b90815180825260208080930193019160005b828110620011ce575050505090565b835185529381019392810192600101620011bf565b9092916040820191604081528451809352606081019260208096019060005b8181106200121f57505050620003679394818403910152620011ad565b82516001600160a01b03168652948701949187019160010162001202565b906020916200125881518092818552858086019101620002ea565b601f01601f1916010190565b96989a999795949193620012b3620012d194620012a462001293620012c2958c6101408091528d01906200123d565b6020988c8a8184039101526200123d565b908a820360408c01526200123d565b9088820360608a01526200123d565b9086820360808801526200123d565b9160a085015283820360c08501528551908183528083019281808460051b8301019801936000915b8483106200133857505050505050620003679495620013299160e084015261010083019060018060a01b03169052565b610120818403910152620011ad565b909192939498848062001358600193601f198682030187528d516200123d565b9b01930193019194939290620012f9565b80519260208201938451816200137f92620015cf565b81519284519260408101928351936060830190815194608085019889519660a087019788519060c08901519260e08a019b8c5195620013bd620002b8565b9e8f91825260208201526040015260608d015260808c015260a08b015260c08a015260e089015261010042818a015261012098898101620013fe9060019052565b620014099062000e78565b85015160165560185560005b61016085018051805183101562001481576200146e838093620014676200145a620014496200147b98620014759762001032565b51600052601d602052604060002090565b805460ff19166001179055565b5162001032565b516200104d565b62001006565b62001415565b50505092959790939691949786019586515198620014a861014083019a8b5151146200109c565b620014b78851511515620010e9565b60005b88518051821015620015365790620014758c62001529620014fe84620014f6620014e982620015309962001032565b516001600160a01b031690565b935162001032565b51620015156001600160a01b038416151562001136565b6200152281151562001172565b8262001742565b80620020f2565b620014ba565b5050909192939598977ff9e7aa11bcdcbb8ac33b5dba92fca799ef091e54c29270822065501d8edea1a57ff645c4ac6d381b3689a73b8bd9550eca41a0e669b1d2eb076029d6ddc3653c3199620015ca9799519051906200159d60405192839283620011e3565b0390a18251935196519751945190519061016060c0850151935194015195604051998a9930978b62001264565b0390a1565b9291909260405190620015e28262000257565b60019283835260209081840194603160f81b865287519060018060401b03821162000251576200161f8262001619600354620004ea565b62000540565b8398601f8311600114620016b55782916200165c95969798999a8392600094620016a9575b50501b916000199060031b1c191617600355620007b8565b620016678262001810565b61012052620016768362001920565b61014052815191012060e052519020610100524660a0526200169762001a85565b6080523060c052620002e86001600b55565b01519250388062001644565b6003600052601f198316999192917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b9160005b8c81106200172c5750836200165c9798999a9b9c1062001712575b505050811b01600355620007b8565b015160001960f88460031b161c1916905538808062001703565b81830151845592850192918701918701620016e8565b91906001600160a01b0383168015620017f75760025482810180911162001016576002556001600160a01b038416600090815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a3600254926001600160d01b038411620017cd57620002e892935062001af1565b604051630e58ae9360e11b8152600481018590526001600160d01b036024820152604490fd5b0390fd5b60405163ec442f0560e01b815260006004820152602490fd5b90815160208082106000146200182e57505090620003679062001a30565b6001600160401b038211620002515762001855826200184f600554620004ea565b620005c8565b80601f831160011462001895575081929360009262001889575b50508160011b916000199060031b1c19161760055560ff90565b0151905038806200186f565b6005600052601f198316949091907f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0926000905b87821062001907575050836001959610620018ed575b505050811b0160055560ff90565b015160001960f88460031b161c19169055388080620018df565b80600185968294968601518155019501930190620018c9565b90815160208082106000146200193e57505090620003679062001a30565b6001600160401b038211620002515762001965826200195f600654620004ea565b62000606565b80601f8311600114620019a5575081929360009262001999575b50508160011b916000199060031b1c19161760065560ff90565b0151905038806200197f565b6006600052601f198316949091907ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f926000905b87821062001a17575050836001959610620019fd575b505050811b0160065560ff90565b015160001960f88460031b161c19169055388080620019ef565b80600185968294968601518155019501930190620019d9565b601f81511162001a5e57602081519101516020821062001a4e571790565b6000198260200360031b1b161790565b60405163305a27a960e01b815260206004820152908190620017f39060248301906200123d565b60e051610100516040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117620002515760405251902090565b9062001afd8162001e2d565b9165ffffffffffff80431162001bdb57600a5460008162001ba857505062001b399062001b30620002e8956000620021ad565b90431662001f29565b50506001600160a01b0390811690811562001b8b575b60086020527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c75460009283526040909220548116911662001bfa565b62001ba062001b9a8462001e2d565b62001d78565b505062001b4f565b6000929192199583878101116200101657620002e89662001b3994602084600a62001b3096522001015460301c620021ad565b6040516306dfcc6560e41b815260306004820152436024820152604490fd5b6001600160a01b0380831693929190811690818514158062001d6e575b62001c24575b5050505050565b8162001ca0575b50508262001c3c575b808062001c1d565b6001600160a01b03166000908152600960205260409020600080516020620081c68339815191529162001c7c9162001c75909162001e2d565b9062001dd5565b604080516001600160d01b039384168152919092166020820152a238808062001c34565b6001600160a01b0316600090815260096020526040902062001cc28462001e2d565b9065ffffffffffff9081431162001bdb57805460008162001d2f5750509062001d0c9162001d02600080516020620081c6833981519152946000620021c7565b9143169062002025565b604080516001600160d01b039384168152919092166020820152a2388062001c2b565b600093929193199484868101116200101657600080516020620081c68339815191529562001d0c956020848662001d0296522001015460301c620021c7565b5083151562001c17565b65ffffffffffff80431162001bdb57600a5460008162001da957505062001b3062001da5926000620021c7565b9091565b90926000198481810111620010165762001da594602084600a62001b3096522001015460301c620021c7565b65ffffffffffff9081431162001bdb57805460008162001e0257505062001d0262001da5936000620021ad565b90936000198581810111620010165762001da5956020848662001d0296522001015460301c620021ad565b6001600160d01b039081811162001e42571690565b604490604051906306dfcc6560e41b825260d060048301526024820152fd5b6000198101919082116200101657565b600a54906801000000000000000082101562000251576001820180600a558210156200104757600a60005280516020919091015160301b65ffffffffffff191665ffffffffffff9190911617600080516020620081a683398151915290910155565b90815468010000000000000000811015620002515760018101808455811015620010475760009283526020928390208251929093015160301b65ffffffffffff191665ffffffffffff9290921691909117910155565b600a54919291801562001ff65762001f4562001f5e9162001e61565b600a600052600080516020620081a68339815191520190565b9081549165ffffffffffff9081841691831680831162001fe45786920362001fa65762001f9f92509065ffffffffffff82549181199060301b169116179055565b60301c9190565b505062001fde9062001fc962001fbb620002d9565b65ffffffffffff9092168252565b6001600160d01b038516602082015262001e71565b62001f9f565b604051632520601d60e01b8152600490fd5b506200201f906200200a62001fbb620002d9565b6001600160d01b038416602082015262001e71565b60009190565b80549293928015620020c857620020406200204d9162001e61565b8260005260206000200190565b9182549265ffffffffffff9182851692811680841162001fe4578793036200208f575062001f9f92509065ffffffffffff82549181199060301b169116179055565b91505062001fde91620020b3620020a5620002d9565b65ffffffffffff9093168352565b6001600160d01b038616602083015262001ed3565b50906200201f91620020dd620020a5620002d9565b6001600160d01b038516602083015262001ed3565b6001600160a01b039081169180821691828403620021685760008481526008602052604080822080546001600160a01b031981168717909155620002e896931694909285907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f8480a48060205220549162001bfa565b60405162461bcd60e51b815260206004820152601360248201527f44656c65676174696f6e2064697361626c6564000000000000000000000000006044820152606490fd5b6001600160d01b0391821690821601908111620010165790565b6001600160d01b039182169082160390811162001016579056fe6080604052600436101561001257600080fd5b60003560e01c8063013cf08b146103de57806306fdde03146103d9578063078f6208146103d4578063095ea7b3146103cf5780630c0512e9146103ca5780630d61b519146103c557806318160ddd146103c0578063204c5d1f146103bb57806322dbefbb1461030c57806322f3e2d4146103b657806323b872dd146103b15780632519ae5c146103ac578063313ce567146103a75780633644e515146103a25780633a46b1a8146102d557806347c661401461039d5780634b145793146103075780634bf5d7e9146103985780634cf2ab32146103935780634cfd16bb1461038e5780634de184f6146103845780634fa76ec9146103895780635221c1f014610384578063548d496f1461037f578063587cde1e1461037a5780635c19a95c146103755780635cf0e8a4146103705780636cbadbfa146103705780636dcf811d1461036b5780636fcfff451461036657806370a08231146103615780637ce288ea1461035c5780637e5a9b47146103575780637ecebe00146103525780637f6dda141461034d57806384b0196e1461034857806385e59ce2146103435780638e539e8c1461033e5780639080936f1461033957806391ddadf41461033457806395d89b411461032f57806398e527d31461032a5780639a49bdde146103255780639ab24eb014610320578063a351f6151461031b578063a9059cbb14610316578063adf7420714610311578063b0b6cc1a1461030c578063b3fe8bcb14610307578063c3cda52014610302578063c8a6d06e146102fd578063c97bfe6b146102f8578063c9a3c0c7146102f3578063c9d27afe146102ee578063d505accf146102e9578063dcf628c0146102e4578063dd62ed3e146102df578063e49a62e9146102da578063eaeded5f146102d5578063eced3dfb146102d0578063f1127ed8146102cb5763f2c26a47146102c657600080fd5b612965565b612832565b612814565b6113ee565b6127f6565b612793565b6126fb565b612551565b612404565b612314565b6122c3565b61223b565b6120f9565b6114af565b6110a3565b611df9565b611d9f565b611c67565b611c1e565b611c00565b611be2565b611b3b565b611b0f565b611ae6565b611ab4565b611a7d565b6119bb565b611985565b611948565b61191a565b61188f565b611852565b6117e5565b6117c2565b6117a4565b61177c565b61173d565b61170c565b6116b7565b6116ee565b61163d565b6115ca565b6114e0565b611419565b6113cb565b6113af565b61124a565b61110e565b6110d7565b610fbb565b610e7e565b610d88565b610d6a565b610d35565b610cf5565b610c14565b610b5d565b90600182811c92168015610413575b60208310146103fd57565b634e487b7160e01b600052602260045260246000fd5b91607f16916103f2565b600c546000929161042d826103e3565b80825291600190818116908115610492575060011461044b57505050565b91929350600c600052600080516020615e8f833981519152916000925b84841061047a57505060209250010190565b80546020858501810191909152909301928101610468565b915050602093945060ff929192191683830152151560051b010190565b600d54600092916104bf826103e3565b8082529160019081811690811561049257506001146104dd57505050565b91929350600d600052600080516020615eef833981519152916000925b84841061050c57505060209250010190565b805460208585018101919091529093019281016104fa565b600e5460009291610534826103e3565b80825291600190818116908115610492575060011461055257505050565b91929350600e600052600080516020615eaf833981519152916000925b84841061058157505060209250010190565b8054602085850181019190915290930192810161056f565b600f54600092916105a9826103e3565b8082529160019081811690811561049257506001146105c757505050565b91929350600f600052600080516020615f4f833981519152916000925b8484106105f657505060209250010190565b805460208585018101919091529093019281016105e4565b6010546000929161061e826103e3565b80825291600190818116908115610492575060011461063c57505050565b919293506010600052600080516020615f2f833981519152916000925b84841061066b57505060209250010190565b80546020858501810191909152909301928101610659565b9060009291805491610694836103e3565b9182825260019384811690816000146106f657506001146106b6575b50505050565b90919394506000526020928360002092846000945b8386106106e25750505050010190388080806106b0565b8054858701830152940193859082016106cb565b9294505050602093945060ff191683830152151560051b010190388080806106b0565b634e487b7160e01b600052604160045260246000fd5b61014081019081106001600160401b0382111761074b57604052565b610719565b604081019081106001600160401b0382111761074b57604052565b60a081019081106001600160401b0382111761074b57604052565b60c081019081106001600160401b0382111761074b57604052565b90601f801991011681019081106001600160401b0382111761074b57604052565b60405190600082600c54916107d6836103e3565b8083529260019081811690811561084c57506001146107ff575b506107fd925003836107a1565b565b600c60009081529150600080516020615e8f8339815191525b84831061083157506107fd9350508101602001386107f0565b81935090816020925483858a01015201910190918592610818565b9050602092506107fd94915060ff191682840152151560051b820101386107f0565b60405190600082600d5491610882836103e3565b8083529260019081811690811561084c57506001146108a857506107fd925003836107a1565b600d60009081529150600080516020615eef8339815191525b8483106108da57506107fd9350508101602001386107f0565b81935090816020925483858a010152019101909185926108c1565b60405190600082600e5491610909836103e3565b8083529260019081811690811561084c575060011461092f57506107fd925003836107a1565b600e60009081529150600080516020615eaf8339815191525b84831061096157506107fd9350508101602001386107f0565b81935090816020925483858a01015201910190918592610948565b60405190600082600f5491610990836103e3565b8083529260019081811690811561084c57506001146109b657506107fd925003836107a1565b600f60009081529150600080516020615f4f8339815191525b8483106109e857506107fd9350508101602001386107f0565b81935090816020925483858a010152019101909185926109cf565b6040519060008260105491610a17836103e3565b8083529260019081811690811561084c5750600114610a3d57506107fd925003836107a1565b601060009081529150600080516020615f2f8339815191525b848310610a6f57506107fd9350508101602001386107f0565b81935090816020925483858a01015201910190918592610a56565b906107fd610a9e9260405193848092610683565b03836107a1565b60005b838110610ab85750506000910152565b8181015183820152602001610aa8565b90602091610ae181518092818552858086019101610aa5565b601f01601f1916010190565b9793610b16610b52989497936101409b97939e9d9c9e8b526101608060208d01528b0190610ac8565b60408a0197909752606089015215156080880152151560a087015260c08601526001600160a01b031660e0850152838203610100850152610ac8565b946101208201520152565b34610bfb576020366003190112610bfb57600435600052601b60205260406000208054610bf760405191610b9f83610b988160018801610683565b03846107a1565b600284015460038501546004860154600587015460068801549397929492936001600160a01b031691610bd460078601610a8a565b93600a6008870154960154966040519a8b9a60ff808660081c169516938c610aed565b0390f35b600080fd5b906020610c11928181520190610ac8565b90565b34610bfb57600080600319360112610cf2576040519080600354610c37816103e3565b80855291600191808316908115610cc85750600114610c6d575b610bf785610c61818703826107a1565b60405191829182610c00565b9250600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610cb0575050508101602001610c6182610bf7610c51565b80546020858701810191909152909301928101610c95565b869550610bf796935060209250610c6194915060ff191682840152151560051b8201019293610c51565b80fd5b34610bfb576000366003190112610bfb576060601654601854601e549060405192835260208301526040820152f35b6001600160a01b03811603610bfb57565b34610bfb576040366003190112610bfb57610d5f600435610d5581610d24565b6024359033612c15565b602060405160018152f35b34610bfb576000366003190112610bfb576020601754604051908152f35b34610bfb576020366003190112610bfb577fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d260043580600052601b60205260076040600020610dd9838254146140d4565b610e4860048201610dfa610df5610df1835460ff1690565b1590565b61415b565b610e0b6018546008850154146142e2565b610e3b610e1786614274565b60058601544210801590610e77575b610e2f9061432d565b81610e6f575b50614389565b805460ff19166001179055565b0190610e5b610e5683610a8a565b614b1e565b610e6a604051928392836143cb565b0390a1005b905038610e35565b5080610e26565b34610bfb576000366003190112610bfb576020600254604051908152f35b90815180825260208092019182818360051b85019501936000915b848310610ec75750505050505090565b9091929394958480610ee183856001950387528a51610ac8565b9801930193019194939290610eb7565b610c1190602081528251610f96610f1661014092836020860152610160850190610ac8565b610f77610f63610f4f610f3b60208a015194601f1995868a83030160408b0152610ac8565b60408a0151858983030160608a0152610ac8565b606089015184888303016080890152610ac8565b6080880151838783030160a0880152610ac8565b9060a087015160c086015260c0870151908583030160e0860152610e9c565b9360e08101516101009081850152810151906101209182850152015191019015159052565b34610bfb57600080600319360112610cf257610bf790611097604051610fe08161072f565b60609283825283602083015283604083015283808301528360808301528060a08301528360c08301528060e0830152610100908082840152610120809301526110276111c3565b936110306107c2565b855261103a61086e565b60208601526110476108f5565b604086015261105461097c565b90850152611060610a03565b608085015260115460a0850152611075615651565b60c085015260135460e08501526014549084015260155460ff16151590830152565b60405191829182610ef1565b34610bfb576020366003190112610bfb576004356000526019602052602060018060a01b0360406000205416604051908152f35b34610bfb576000366003190112610bfb5760ff601f54161580611102575b6020906040519015158152f35b5060155460ff166110f5565b34610bfb576060366003190112610bfb5760043561112b81610d24565b60243561113781610d24565b6001600160a01b03821660009081526001602090815260408083203384529091529020604435919054926000198410611181575b6111759350612b03565b60405160018152602090f35b82841061119d576111988361117595033383612cc9565b61116b565b604051637dc7a0d960e11b81523360048201526024810185905260448101849052606490fd5b604051906107fd8261072f565b604051906107fd82610750565b6001600160401b03811161074b57601f01601f191660200190565b929192611204826111dd565b9161121260405193846107a1565b829481845281830111610bfb578281602093846000960137010152565b9080601f83011215610bfb57816020610c11933591016111f8565b34610bfb5760a0366003190112610bfb576004356001600160401b038111610bfb5761127a90369060040161122f565b6064359060443561128a83610d24565b611345608435916112b76112b26112ab85600052601d602052604060002090565b5460ff1690565b6135fd565b6112cb6001600160a01b038616151561546e565b6112ed6112e8610df16112ab84600052601a602052604060002090565b6154a9565b336000908152602081905260409020611309905b5415156135a5565b6040516304fa45bf60e31b602082015260248101919091526001600160a01b03909416604485015283606481015b03601f1981018552846107a1565b601e54926113528461302f565b9360005b81811061138057610bf7611370338887876024358b613ee5565b6040519081529081906020820190565b8061139a6113906113aa93611588565b90549060031b1c90565b6113a48289613d8c565b526136cc565b611356565b34610bfb576000366003190112610bfb57602060405160128152f35b34610bfb576000366003190112610bfb5760206113e6612ec7565b604051908152f35b34610bfb576040366003190112610bfb5760206113e660043561141081610d24565b602435906129f2565b34610bfb576020366003190112610bfb5760043580600052601b6020526114476040600020918254146140d4565b606461147260018060d01b03611468611463600a860154612aac565b61327d565b1660165490614261565b04906003600282015491015491828201908183116114aa57604080519384526020840194909452928201526060810191909152608090f35b612aed565b34610bfb576020366003190112610bfb57600435600052601a602052602060ff604060002054166040519015158152f35b34610bfb576000366003190112610bfb576114fa43613214565b65ffffffffffff8061150b43613214565b1691160361156057610bf760405161152281610750565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610ac8565b6040516301bfc1c560e61b8152600490fd5b634e487b7160e01b600052603260045260246000fd5b601e548110156115ad57601e600052600080516020615f0f8339815191520190600090565b611572565b80548210156115ad5760005260206000200190600090565b34610bfb576020366003190112610bfb57600435601e54811015610bfb57602090601e600052600080516020615f0f8339815191520154604051908152f35b90815180825260208080930193019160005b828110611629575050505090565b83518552938101939281019260010161161b565b34610bfb576000366003190112610bfb5760405180601e54808252826020809301601e600052600080516020615f0f8339815191529260005b858282106116a15750505061168d925003836107a1565b610bf7604051928284938452830190611609565b8554845260019586019588955093019201611676565b34610bfb576020366003190112610bfb5760206116e4600435600052601d60205260ff6040600020541690565b6040519015158152f35b34610bfb576000366003190112610bfb576020601654604051908152f35b34610bfb576020366003190112610bfb57600435600052601d602052602060ff604060002054166040519015158152f35b34610bfb576020366003190112610bfb57602060043561175c81610d24565b60018060a01b038091166000526008825260406000205416604051908152f35b34610bfb576020366003190112610bfb576117a260043561179c81610d24565b33615dbe565b005b34610bfb576000366003190112610bfb576020601854604051908152f35b34610bfb576000366003190112610bfb57602060ff601f54166040519015158152f35b34610bfb576020366003190112610bfb5760043561180281610d24565b6001600160a01b031660009081526009602052604090205463ffffffff908181116118335760209160405191168152f35b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b34610bfb576020366003190112610bfb5760206113e660043561187481610d24565b6001600160a01b031660009081526020819052604090205490565b34610bfb576020366003190112610bfb576004356118ac81614858565b156118de5760207f57df5a6a467271f04b10f7fe9e66d21dcd8ae7eaf079099d48959f24a53b691091604051908152a1005b60405162461bcd60e51b81526020600482015260146024820152734e6f7420616c6c20636861696e7320726561647960601b6044820152606490fd5b34610bfb576020366003190112610bfb576040611938600435614274565b8251911515825215156020820152f35b34610bfb576020366003190112610bfb5760043561196581610d24565b60018060a01b031660005260076020526020604060002054604051908152f35b34610bfb576040366003190112610bfb57610bf76119a7602435600435615723565b604051918291602083526020830190611609565b34610bfb576000366003190112610bfb57611a4e6119f87f0000000000000000000000000000000000000000000000000000000000000000613061565b610bf7611a247f000000000000000000000000000000000000000000000000000000000000000061315a565b611a5c611a2f613007565b91604051958695600f60f81b875260e0602088015260e0870190610ac8565b908582036040870152610ac8565b90466060850152306080850152600060a085015283820360c0850152611609565b34610bfb576020366003190112610bfb5760206064611aab6001600160d01b03611468611463600435612aac565b04604051908152f35b34610bfb576020366003190112610bfb5760206001600160d01b03611add611463600435612aac565b16604051908152f35b34610bfb576020366003190112610bfb576020611b046004356157c8565b60ff60405191168152f35b34610bfb576000366003190112610bfb576020611b2b43613214565b65ffffffffffff60405191168152f35b34610bfb57600080600319360112610cf2576040519080600454611b5e816103e3565b80855291600191808316908115610cc85750600114611b8757610bf785610c61818703826107a1565b9250600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410611bca575050508101602001610c6182610bf7610c51565b80546020858701810191909152909301928101611baf565b34610bfb576000366003190112610bfb576020601c54604051908152f35b34610bfb576020366003190112610bfb5760206113e66004356148bf565b34610bfb576020366003190112610bfb57600435611c3b81610d24565b6001600160a01b031660009081526009602090815260409091206001600160d01b0390611add90613516565b34610bfb576040366003190112610bfb576004356001600160401b03602435818111610bfb5736602382011215610bfb578060040135918211610bfb573660248383010111610bfb57610e6a602492847fc7c129e53e59dadfa16305619e80c7519f1f6912c10915359fd75b56bcecdd7b95600052601b602052611d916040600020611cf5838254146140d4565b611d82600a6004830192611d15611d10610df1865460ff1690565b61446d565b611d2460058201544210614120565b6006810154611d4e90611d47906001600160a01b03165b6001600160a01b031690565b33146144ac565b0154611d7b611d5d82336129f2565b916001600160d01b0390611d749061146390612aac565b169161424b565b10156144e9565b805461ff001916610100179055565b604051948594019084614541565b34610bfb576040366003190112610bfb57610d5f600435611dbf81610d24565b6024359033612b03565b9181601f84011215610bfb578235916001600160401b038311610bfb576020808501948460051b010111610bfb57565b34610bfb576060366003190112610bfb576001600160401b03600435602435828111610bfb57611e2d903690600401611dc9565b92604435908111610bfb5783611e4884923690600401611dc9565b611e50614228565b611e6484600052601b602052604060002090565b90611e71858354146140d4565b6004820192611e8c611e87610df1865460ff1690565b61456f565b60185494611ea060088501548714156145cb565b611eb2611ead878661588b565b614627565b611ebd83821461466a565b611f47876007860197611f3f600a611ed48b610a8a565b6020815191012098015497611f31896040519485936020850197889094939260809260a08301967f45de75acfcd4cbcc5691559486749bf0d5eb65e4b24c59ac2f258ba6bfceaa3484526020840152604083015260608201520152565b03601f1981018352826107a1565b519020612fe1565b9760009889945b83861061200f575050507fda7dba8f94d70cde423cce3a243bebf95d2ec927507b566f67e329dcfe2d06bb877fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d2611fe889611fcf8a610e3b8f611fc8611fc18e61146861146360018060d01b0392612aac565b6064900490565b11156147c9565b611fdb610e5682610a8a565b60405191829185836143cb565b0390a1601854604080519283526020830191909152819081015b0390a16117a26001600b55565b909192939499868b61204b611d3b61204661203e612038612031868a8f6146a7565b36916111f8565b89614815565b938a8a6146e8565b6146f8565b6001600160a01b03821690612061908214614702565b8d88886000925b83106120a45750505050916120836120949261209a946129f2565b9061208f82151561477d565b613270565b9a6136cc565b9493929190611f4e565b83949550926120c0611d3b612046856120c7956120cc986146e8565b141561473e565b6136cc565b90899291888f8990612068565b6064359060ff82168203610bfb57565b6084359060ff82168203610bfb57565b34610bfb5760c0366003190112610bfb5760043561211681610d24565b604435906024356121256120d9565b8342116121ad576121a16117a2946121a8926040519060208201927fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf845260018060a01b03881660408401528660608401526080830152608082526121898261076b565b61219c60a4359360843593519020612fe1565b612d72565b9182612d1c565b615dbe565b604051632341d78760e11b815260048101859052602490fd5b6001600160401b03811161074b5760051b60200190565b81601f82011215610bfb578035916121f4836121c6565b9261220260405194856107a1565b808452602092838086019260051b820101928311610bfb578301905b82821061222c575050505090565b8135815290830190830161221e565b34610bfb5760c0366003190112610bfb576001600160401b03600435818111610bfb5761226c90369060040161122f565b90604435818111610bfb5736602382011215610bfb576122969036906024816004013591016111f8565b608435918211610bfb57610bf7926122b56113709336906004016121dd565b91606435916024359061363f565b34610bfb576020366003190112610bfb57600435601c54811015610bfb57602090601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110154604051908152f35b34610bfb576080366003190112610bfb576004356001600160401b038111610bfb5761234761133791369060040161122f565b6044356123c46064359161236b6112b26112ab85600052601d602052604060002090565b61238a6123856112ab83600052601a602052604060002090565b6154ed565b3360009081526020819052604090206123a290611301565b604051633972e9fb60e21b602082015260248101919091529384906044820190565b601e54926123d18461302f565b9360005b8181106123ef57610bf7611370338887876024358b613ee5565b8061139a6113906123ff93611588565b6123d5565b34610bfb576040366003190112610bfb576004356024358015158103610bfb577f78975aaf742630489badd22949b88ac50eaaea576339ee05440b671a33bfb6a99161244e614228565b61200261246582600052601b602052604060002090565b612471838254146140d4565b61248060058201544210614120565b612494610df5610df1600484015460ff1690565b600b8101906124c36124be610df16112ab33869060018060a01b0316600052602052604060002090565b6141a7565b6124d46018546008830154146141e3565b6124fc610e3b6124e8600a840154336129f2565b336000908152602095909552604090942090565b841561253c57600201612510828254613270565b90555b604080519384523360208501529315159383019390935260608201929092529081906080820190565b60030161254a828254613270565b9055612513565b34610bfb5760e0366003190112610bfb5760043561256e81610d24565b60243561257a81610d24565b604435906064356125896120e9565b814211612674576001600160a01b0385811660008181526007602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99281019283529283019390935292861660608201526080810187905260a081019190915260c08082019490945292835261262d92909161261a60e0836107a1565b61219c60c4359360a43593519020612fe1565b6001600160a01b038481169082160361264a57506117a292612c15565b6040516325c0072360e11b81526001600160a01b0391821660048201529084166024820152604490fd5b60405163313c898160e11b815260048101839052602490fd5b9794916126b290610c119c9a97949b9895928a526101608060208c01528a0190610ac8565b604089019a909a52606088015215156080870152151560a086015260c08501526001600160a01b031660e084015261010083015261012082015280830361014090910152611609565b34610bfb576020366003190112610bfb5760043580600052601b602052604060002061272a81549283146140d4565b610bf760028201549260038301549060048401546005850154612756600687015460018060a01b031690565b90600887015492600a8801549461277b600961277460018c01610a8a565b9a016156d4565b966040519a8b9a60ff808660081c169516938c61268d565b34610bfb576040366003190112610bfb5760206127ed6004356127b581610d24565b602435906127c282610d24565b60018060a01b03166000526001835260406000209060018060a01b0316600052602052604060002090565b54604051908152f35b34610bfb576020366003190112610bfb5760206116e4600435614858565b34610bfb576000366003190112610bfb576020601e54604051908152f35b34610bfb576040366003190112610bfb5760043561284f81610d24565b6024359063ffffffff82168203610bfb57610bf79161289f91612870612d03565b50612879612d03565b506001600160a01b03166000908152600960205260409020612899612d03565b506115b2565b50604051906128ad82610750565b5465ffffffffffff811680835260309190911c60209283019081526040805192835290516001600160d01b031692820192909252918291820190565b9794919361293261294e946129246101009a976129169a9e9d9a612940968e610120908181520190610ac8565b8d810360208f015290610ac8565b908b820360408d0152610ac8565b9089820360608b0152610ac8565b908782036080890152610ac8565b9660a086015260c085015260e08401521515910152565b34610bfb576000366003190112610bfb576040805161298e816129878161041d565b03826107a1565b610bf78251926129a8846129a1816104af565b03856107a1565b80516129b78161298781610524565b81516129c68161298781610599565b82516129d5816129878161060e565b60115490601354926014549460ff601554169651998a998a6128e9565b6001600160a01b031660009081526009602052604081209091612a1490612aac565b81549083829160058411612a5d575b612a2e935084613544565b80612a425750505b6001600160d01b031690565b91612a4f60209293613246565b92815220015460301c612a36565b9192612a68816133a1565b81039081116114aa57612a2e9385875265ffffffffffff808360208a2001541690851610600014612a9a575091612a23565b929150612aa690613262565b90612a23565b65ffffffffffff612abc43613214565b1680821015612acf5750610c1190613214565b6044925060405191637669fc0f60e11b835260048301526024820152fd5b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0380821694939291908515612bfc5782168015612be3576001600160a01b03821660009081526020819052604090205495848710612bb457846107fd969703612b658460018060a01b03166000526000602052604060002090565b556001600160a01b0384166000908152602081815260409182902080548801905590518681527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a36158d6565b60405163391434e360e21b81526001600160a01b03841660048201526024810188905260448101869052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b6001600160a01b038082169291908315612cb0578216938415612c975780612c8d7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594612c7660209560018060a01b03166000526001602052604060002090565b9060018060a01b0316600052602052604060002090565b55604051908152a3565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b906001600160a01b0380831615612cb057811615612c9757612c76612d009260018060a01b03166000526001602052604060002090565b55565b60405190612d1082610750565b60006020838281520152565b6001600160a01b03811660009081526007602052604090208054600181019091559091819003612d4a575050565b6040516301d4b62360e61b81526001600160a01b039092166004830152602482015260449150fd5b91610c119391612d8193612d8a565b90929192612e3a565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612e0e57926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa15612e025780516001600160a01b03811615612df957918190565b50809160019190565b604051903d90823e3d90fd5b50505060009160039190565b60041115612e2457565b634e487b7160e01b600052602160045260246000fd5b612e4381612e1a565b80612e4c575050565b612e5581612e1a565b60018103612e6f5760405163f645eedf60e01b8152600490fd5b612e7881612e1a565b60028103612e995760405163fce698f760e01b815260048101839052602490fd5b80612ea5600392612e1a565b14612ead5750565b6040516335e2f38360e21b81526004810191909152602490fd5b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480612fb8575b15612f22577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152612fb281610786565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612ef9565b604290612fec612ec7565b906040519161190160f01b8352600283015260228201522090565b604051602081018181106001600160401b0382111761074b5760405260008152906000368137565b90613039826121c6565b61304660405191826107a1565b8281528092613057601f19916121c6565b0190602036910137565b60ff811461309f5760ff811690601f821161308d576040519161308383610750565b8252602082015290565b604051632cd44ac360e21b8152600490fd5b506040516005548160006130b2836103e3565b8083529260019081811690811561313857506001146130d9575b50610c11925003826107a1565b6005600090815291507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b84831061311d5750610c119350508101602001386130cc565b81935090816020925483858901015201910190918492613104565b905060209250610c1194915060ff191682840152151560051b820101386130cc565b60ff811461317c5760ff811690601f821161308d576040519161308383610750565b5060405160065481600061318f836103e3565b8083529260019081811690811561313857506001146131b55750610c11925003826107a1565b6006600090815291507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b8483106131f95750610c119350508101602001386130cc565b819350908160209254838589010152019101909184926131e0565b65ffffffffffff90818111613227571690565b604490604051906306dfcc6560e41b8252603060048301526024820152fd5b6000198101919082116114aa57565b919082039182116114aa57565b90600182018092116114aa57565b919082018092116114aa57565b600a80546000816005811161332b575b509290925b8381106132d157505060009180156000146132af57505050600090565b6132b890613246565b9152600080516020615ecf833981519152015460301c90565b90928082169080831860011c82018092116114aa578360005265ffffffffffff8083600080516020615ecf833981519152015416908616106000146133195750925b90613292565b93915061332590613262565b90613313565b9091613336826133a1565b82039182116114aa5783835265ffffffffffff8083600080516020615ecf833981519152015416908616106000146133715750905b3861328d565b915061337c90613262565b61336b565b811561338b570490565b634e487b7160e01b600052601260045260246000fd5b6001811115610c1157600181600160801b8110156134ba575b61346261345861344e61344461343a61343061346e97600488600160401b6134699a10156134ad575b6401000000008110156134a0575b62010000811015613493575b610100811015613487575b601081101561347b575b1015613473575b60030260011c613429818b613381565b0160011c90565b613429818a613381565b6134298189613381565b6134298188613381565b6134298187613381565b6134298186613381565b8093613381565b821190565b900390565b60011b613419565b811c9160021b91613412565b60081c91811b91613408565b60101c9160081b916133fd565b60201c9160101b916133f1565b60401c9160201b916133e3565b50600160401b9050608082901c6133ba565b600a54600090806134de575050600090565b806000198101116114aa57600a7fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a79252015460301c90565b80546000918161352857505050600090565b6000199282848101116114aa5760209181522001015460301c90565b91905b8382106135545750505090565b9091928083169080841860011c82018092116114aa5760008581526020902082015465ffffffffffff90811690841610156135935750925b9190613547565b93925061359f90613262565b9161358c565b156135ac57565b60405162461bcd60e51b815260206004820152602360248201527f4d75737420686f6c6420746f6b656e7320746f206372656174652070726f706f6044820152621cd85b60ea1b6064820152608490fd5b1561360457565b60405162461bcd60e51b815260206004820152601360248201527210da185a5b881b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606490fd5b9290939133600052600060205261365c60406000205415156135a5565b841561368757610c119482600052601d60205261368060ff604060002054166135fd565b3394613ee5565b60405162461bcd60e51b815260206004820152601960248201527f4475726174696f6e206d75737420626520706f736974697665000000000000006044820152606490fd5b60001981146114aa5760010190565b8181106136e6575050565b600081556001016136db565b90601f82116136ff575050565b6107fd91600c600052600080516020615e8f833981519152906020601f840160051c83019310613737575b601f0160051c01906136db565b909150819061372a565b90601f821161374e575050565b6107fd91600d600052600080516020615eef833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b90601f8211613792575050565b6107fd91600e600052600080516020615eaf833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b90601f82116137d6575050565b6107fd91600f600052600080516020615f4f833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b90601f821161381a575050565b6107fd916010600052600080516020615f2f833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b9190601f811161386057505050565b6107fd926000526020600020906020601f840160051c8301931061373757601f0160051c01906136db565b9081516001600160401b03811161074b576138b0816138ab600c546103e3565b6136f2565b602080601f83116001146138ec57508192936000926138e1575b50508160011b916000199060031b1c191617600c55565b0151905038806138ca565b90601f1983169461390d600c600052600080516020615e8f83398151915290565b926000905b87821061394a575050836001959610613931575b505050811b01600c55565b015160001960f88460031b161c19169055388080613926565b80600185968294968601518155019501930190613912565b9081516001600160401b03811161074b5761398781613982600d546103e3565b613741565b602080601f83116001146139c357508192936000926139b8575b50508160011b916000199060031b1c191617600d55565b0151905038806139a1565b90601f198316946139e4600d600052600080516020615eef83398151915290565b926000905b878210613a21575050836001959610613a08575b505050811b01600d55565b015160001960f88460031b161c191690553880806139fd565b806001859682949686015181550195019301906139e9565b9081516001600160401b03811161074b57613a5e81613a59600e546103e3565b613785565b602080601f8311600114613a9a5750819293600092613a8f575b50508160011b916000199060031b1c191617600e55565b015190503880613a78565b90601f19831694613abb600e600052600080516020615eaf83398151915290565b926000905b878210613af8575050836001959610613adf575b505050811b01600e55565b015160001960f88460031b161c19169055388080613ad4565b80600185968294968601518155019501930190613ac0565b9081516001600160401b03811161074b57613b3581613b30600f546103e3565b6137c9565b602080601f8311600114613b715750819293600092613b66575b50508160011b916000199060031b1c191617600f55565b015190503880613b4f565b90601f19831694613b92600f600052600080516020615f4f83398151915290565b926000905b878210613bcf575050836001959610613bb6575b505050811b01600f55565b015160001960f88460031b161c19169055388080613bab565b80600185968294968601518155019501930190613b97565b9081516001600160401b03811161074b57613c0c81613c076010546103e3565b61380d565b602080601f8311600114613c485750819293600092613c3d575b50508160011b916000199060031b1c191617601055565b015190503880613c26565b90601f19831694613c696010600052600080516020615f2f83398151915290565b926000905b878210613ca6575050836001959610613c8d575b505050811b01601055565b015160001960f88460031b161c19169055388080613c82565b80600185968294968601518155019501930190613c6e565b91909182516001600160401b03811161074b57613ce581613cdf84546103e3565b84613851565b602080601f8311600114613d21575081929394600092613d16575b50508160011b916000199060031b1c1916179055565b015190503880613d00565b90601f19831695613d3785600052602060002090565b926000905b888210613d7457505083600195969710613d5b575b505050811b019055565b015160001960f88460031b161c19169055388080613d51565b80600185968294968601518155019501930190613d3c565b80518210156115ad5760209160051b010190565b15613da757565b60405162461bcd60e51b815260206004820152601a60248201527f54617267657420636861696e206e6f7420737570706f727465640000000000006044820152606490fd5b601c54600160401b81101561074b576001810180601c558110156115ad57601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110155565b601e54600160401b81101561074b576001810180601e558110156115ad57601e600052600080516020615f0f8339815191520155565b90815491600160401b83101561074b5782613e8d9160016107fd950181556115b2565b90919082549060031b91821b91600019901b1916179055565b9081526001600160a01b039091166020820152606060408201819052610c1192910190610ac8565b604090610c11939281528160208201520190611609565b91949060175495613efd613ef8886136cc565b601755565b613f7a613f1488600052601b602052604060002090565b91888355613f4f600194613f2a88878701613cbe565b6000600286015560006003860155613f496004860160ff198154169055565b42613270565b60058401556006830180546001600160a01b0319166001600160a01b03871617905560078301613cbe565b846008820155613f97613f8c43613214565b65ffffffffffff1690565b806140c35750819060005b600a820155600960009101925b61406e575b505050614058614068937f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd637f5d1231ca3a274bcd2f510e0d53a889213ebf0315b86ee6bb9d73da08fba7460696947fdb17271edb72bcaba16ce918d885db2e701491c9ff3f713f80caf9d614aa9ff49461402d8a613dec565b61403d6040519283928c84613ea6565b0390a160408051888152602081019290925290918291820190565b0390a16040519182918583613ece565b0390a190565b86518110156140be57806140a461409f6112ab61408e6140b8958c613d8c565b51600052601d602052604060002090565b613da0565b6120c76140b1828a613d8c565b5185613e6a565b81613faf565b613fb4565b6140cc90613246565b908291613fa2565b156140db57565b60405162461bcd60e51b815260206004820152601760248201527f50726f706f73616c20646f6573206e6f742065786973740000000000000000006044820152606490fd5b1561412757565b60405162461bcd60e51b815260206004820152600c60248201526b159bdd1a5b99c8195b99195960a21b6044820152606490fd5b1561416257565b60405162461bcd60e51b815260206004820152601960248201527f50726f706f73616c20616c7265616479206578656375746564000000000000006044820152606490fd5b156141ae57565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b156141ea57565b60405162461bcd60e51b815260206004820152601660248201527557726f6e6720636861696e20666f7220766f74696e6760501b6044820152606490fd5b6002600b5414614239576002600b55565b604051633ee5aeb560e01b8152600490fd5b90600a820291808304600a14901517156114aa57565b818102929181159184041417156114aa57565b9081600052601b60205261428f6040600020928354146140d4565b6002820154600383015492838201908183116114aa57600a01546064906142c6906001600160d01b03906114689061146390612aac565b041115928391826142d8575b50509190565b11905038806142d2565b156142e957565b606460405162461bcd60e51b815260206004820152602060248201527f45786563757465206f6e6c7920696e20676f7665726e616e636520636861696e6044820152fd5b1561433457565b60405162461bcd60e51b815260206004820152602760248201527f566f74696e67206e6f7420656e64656420616e642071756f72756d206e6f74206044820152661c995858da195960ca1b6064820152608490fd5b1561439057565b60405162461bcd60e51b8152602060048201526013602482015272141c9bdc1bdcd85b081b9bdd081c185cdcd959606a1b6044820152606490fd5b9190825260209160408382015260009282546143e6816103e3565b938460408501526001918281169081600014614448575060011461440d575b505050505090565b6000908152828120949550935b858510614434575050506060925001013880808080614405565b80548585016060015293820193810161441a565b93505050506060935060ff929192191683830152151560051b01013880808080614405565b1561447457565b60405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e1958dd5d195960821b6044820152606490fd5b156144b357565b60405162461bcd60e51b815260206004820152600e60248201526d27b7363c9034b734ba34b0ba37b960911b6044820152606490fd5b156144f057565b60405162461bcd60e51b815260206004820152602360248201527f496e73756666696369656e7420766f74696e6720706f77657220746f2063616e60448201526218d95b60ea1b6064820152608490fd5b91926060938192845260406020850152816040850152848401376000828201840152601f01601f1916010190565b1561457657565b60405162461bcd60e51b815260206004820152602760248201527f50726f706f73616c20616c726561647920657865637574656420696e20746869604482015266399031b430b4b760c91b6064820152608490fd5b156145d257565b60405162461bcd60e51b815260206004820152602760248201527f557365206578656375746550726f706f73616c20696e20676f7665726e616e63604482015266329031b430b4b760c91b6064820152608490fd5b1561462e57565b60405162461bcd60e51b8152602060048201526014602482015273436861696e206e6f7420696e207461726765747360601b6044820152606490fd5b1561467157565b60405162461bcd60e51b815260206004820152600e60248201526d426164207369676e61747572657360901b6044820152606490fd5b91908110156115ad5760051b81013590601e1981360301821215610bfb5701908135916001600160401b038311610bfb576020018236038113610bfb579190565b91908110156115ad5760051b0190565b35610c1181610d24565b1561470957565b60405162461bcd60e51b815260206004820152600d60248201526c426164207369676e617475726560981b6044820152606490fd5b1561474557565b60405162461bcd60e51b815260206004820152601060248201526f223ab83634b1b0ba329039b4b3b732b960811b6044820152606490fd5b1561478457565b60405162461bcd60e51b815260206004820152601b60248201527f4e6f20766f74696e6720706f77657220617420736e617073686f7400000000006044820152606490fd5b156147d057565b60405162461bcd60e51b815260206004820152601a60248201527f51756f72756d206e6f74207265616368656420627920736967730000000000006044820152606490fd5b8151610c1192612d8192604019830161484d5761484692506020820151906060604084015193015160001a90612d8a565b9192909190565b505060009160029190565b614871600091808352601b6020526040832054146140d4565b80601e54915b82811061488657505050600190565b6148a6614892826148bf565b600052601d60205260ff6040600020541690565b156148b9576148b4906136cc565b614877565b50905090565b601e548110156148e257601e600052600080516020615f0f833981519152015490565b60405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840c6d0c2d2dc40d2dcc8caf606b1b6044820152606490fd5b9092919261492a816111dd565b9161493860405193846107a1565b829482845282820111610bfb5760206107fd930190610aa5565b9190604083820312610bfb5782516001600160e01b031981168103610bfb57926020810151906001600160401b038211610bfb57019080601f83011215610bfb578151610c119260200161491d565b90816020910312610bfb575190565b9190826040910312610bfb5760208251920151610c1181610d24565b9080601f83011215610bfb578151610c119260200161491d565b9080601f83011215610bfb578151906149fe826121c6565b92614a0c60405194856107a1565b828452602092838086019160051b83010192808411610bfb57848301915b848310614a3a5750505050505090565b82516001600160401b038111610bfb578691614a5b848480948901016149cc565b815201920191614a2a565b91909161010081840312610bfb578051916001600160401b0392838111610bfb5784614a939184016149cc565b936020830151848111610bfb5781614aac9185016149cc565b936040840151818111610bfb5782614ac59186016149cc565b936060810151828111610bfb5783614ade9183016149cc565b936080820151838111610bfb5784614af79184016149cc565b9360a08301519360c0840151908111610bfb5760e091614b189185016149e6565b92015190565b614b32602091828082518301019101614952565b91906001600160e01b03191663cabd6ed960e01b8103614b7157508181614b62926107fd94518301019101614a66565b96959095949194939293615241565b63f0f9e6b760e01b8103614b9a57508181614b95926107fd945183010191016149a1565b615334565b632ab43f7f60e11b8103614bc357508181614bbe926107fd945183010191016149a1565b6153d4565b6304fa45bf60e31b8103614bf657508181614be7926107fd945183010191016149b0565b6001600160a01b031690615531565b633972e9fb60e21b8103614c1f57508181614c1a926107fd945183010191016149a1565b6155e1565b63093f734560e31b8103614c4857508181614c43926107fd945183010191016149a1565b614cbb565b633e78500160e21b8103614c7157508181614c6c926107fd945183010191016149a1565b614e56565b633cdb568760e11b1491506107fd90505760405162461bcd60e51b81526020600482015260116024820152702ab735b737bbb71037b832b930ba34b7b760791b6044820152606490fd5b80600052601d60205260ff60406000205416614d69576018548114614d2457614d1f81614d16610e3b7fbba9d55e9fd1a441b1617724e2fdb76777d15ec77ab2b72ac15952cbe97085db94600052601d602052604060002090565b61137081613e34565b0390a1565b60405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642063757272656e7420636861696e00000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f436861696e20616c726561647920737570706f727465640000000000000000006044820152606490fd5b15614db557565b60405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f76652063757272656e7420636861696e00000000006044820152606490fd5b601e548015614e4057600019810190808210156115ad577f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e34f600091601e83520155601e55565b634e487b7160e01b600052603160045260246000fd5b614e7660ff614e6f83600052601d602052604060002090565b54166135fd565b614e84601854821415614dae565b614ea5614e9b82600052601d602052604060002090565b805460ff19169055565b60005b601e5480821015614f225782614ec061139084611588565b14614ed45750614ecf906136cc565b614ea8565b91614f1a614d1f92613e8d614f14611390614f0f7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d598613246565b611588565b91611588565b611370614dfa565b5050614d1f7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d591611370565b15614f5557565b60405162461bcd60e51b815260206004820152601660248201527553796d626f6c2063616e6e6f7420626520656d70747960501b6044820152606490fd5b15614f9a57565b60405162461bcd60e51b815260206004820152601860248201527f4c6f636174696f6e2063616e6e6f7420626520656d70747900000000000000006044820152606490fd5b15614fe657565b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b210353ab934b9b234b1ba34b7b760611b6044820152606490fd5b1561502957565b60405162461bcd60e51b815260206004820152600b60248201526a0496e76616c6964204b50560ac1b6044820152606490fd5b805190600160401b821161074b57601254826012558083106150d4575b5060126000526020908101907fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34446000925b8484106150b8575050505050565b600183826150c883945186613cbe565b019201930192906150aa565b600060128152837fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344492830192015b828110615110575050615079565b8061511d600192546103e3565b8061512a575b5001615102565b601f9081811184146151425750508281555b38615123565b836151649261515685600052602060002090565b920160051c820191016136db565b6000818152602081208183555561513c565b9897969491936151ba6151d6946151ac8c9761519d6151c896610100808c528b0190610ac8565b89810360209a8b015290610ac8565b8c810360408e015290610ac8565b908a820360608c0152610ac8565b9088820360808a0152610ac8565b9260a087015285830360c08701528151908184528084019381808460051b8301019401946000915b84831061521357505050505060e09150930152565b90919293948480615230600193601f198682030187528a51610ac8565b9801930193019195949392906151fe565b94909591939692968551156152f8577f26b111ff0b7dac90ab526647564775a68003343f6d805a09caf67a9790a4161b97614d1f9561528289511515614f4e565b61528e82511515614f93565b615299841515614fdf565b6152a4861515615022565b6152ad8861388b565b6152b689613962565b6152bf81613a39565b6152c882613b10565b6152d183613be7565b6152da84601155565b6152e38561505c565b6152ec86601355565b60405198899889615176565b60405162461bcd60e51b81526020600482015260146024820152734e616d652063616e6e6f7420626520656d70747960601b6044820152606490fd5b801515806153c9575b156153845760168054908290556040805191825260208201929092527fd0198ea88bf9c4ad5317b68e697944e524541fcb494d854f095b1cd88a097ab69181908101614d1f565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c69642071756f72756d2070657263656e74616765000000000000006044820152606490fd5b50606481111561533d565b80600052601d6020526153ee60ff604060002054166135fd565b601854908181146154395760188190556040805192835260208301919091527f979103c7afbf0138fe781172504ceb318ff78f9a420de8cabac8141f0121b521919081908101614d1f565b60405162461bcd60e51b815260206004820152600d60248201526c14d85b594818da185a5b881251609a1b6044820152606490fd5b1561547557565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b156154b057565b60405162461bcd60e51b81526020600482015260156024820152744d6f64756c6520616c72656164792065786973747360581b6044820152606490fd5b156154f457565b60405162461bcd60e51b8152602060048201526015602482015274135bd91d5b1948191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606490fd5b7ff14475b19484bf096265507cc0c41cd3bf1994992088806830686e2d7272271991906155686001600160a01b038316151561546e565b80600052601a60205261558360ff60406000205416156154a9565b600081815260196020526040902080546001600160a01b0319166001600160a01b038416179055601a602090815260406000819020805460ff1916600117905580519283526001600160a01b03909316908201529081908101614d1f565b60207f4c7c76abe482a2c36ea52f1b999474c69f8b4afeeac5635f8aea2526864ba8539180600052601a825261561e60ff604060002054166154ed565b600081815260198352604080822080546001600160a01b0319169055601a845290819020805460ff1916905551908152a1565b6012549061565e826121c6565b91604061566d815194856107a1565b8184528360208091019160126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444906000935b8585106156b157505050505050565b600184819284516156c681612987818a610683565b8152019301940193916156a2565b9060405191828154918282526020928383019160005283600020936000905b828210615709575050506107fd925003836107a1565b8554845260019586019588955093810193909101906156f3565b601c90815492838210156157bc578101918282116114aa578383116157b4575b8183038381116114aa576157569061302f565b93825b84811061576857505050505090565b818110156115ad576157af9083600052807f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101546113a46157a98784613255565b89613d8c565b615759565b839250615743565b50505050610c11613007565b6157dc81600052601b602052604060002090565b6157e8828254146140d4565b600481015460ff8160081c166158835760ff1661587c5761580a600592614274565b92909101544210918215928280615875575b61586c57829182615853575b505061584c5781615843575b5061583e57600090565b600290565b90501538615834565b5050600190565b84925090615864575b503880615828565b90503861585c565b50505050600590565b508161581c565b5050600390565b505050600490565b9060005b6009830180548210156158cd576158a78284926115b2565b90549060031b1c146158c5576158be6009916136cc565b905061588f565b505050600190565b50505050600090565b6001600160a01b03908116929181908415615962575b1690811561591a575b6107fd93600052600860205280604060002054169160005260406000205416906159a7565b61592383615b2f565b9361592d43613214565b6001600160d01b039586806159406134cc565b16911690039586116114aa576107fd9561595991615c19565b505093506158f5565b905061596d83615b2f565b9061597743613214565b6001600160d01b0392838061598a6134cc565b169116019283116114aa5783926159a091615c19565b50506158ec565b6001600160a01b03808316939291908116908185141580615af0575b6159cf575b5050505050565b81615a54575b5050826159e4575b80806159c8565b6001600160a01b031660009081526009602052604090207fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72491615a3191615a2b9091615b2f565b90615af9565b604080516001600160d01b039384168152919092166020820152a23880806159dd565b6001600160a01b03166000908152600960205260409020615a7484615b2f565b615a7d43613214565b6001600160d01b03918280615a9186613516565b1691169003928284116114aa577fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72493615ae692615acd92615d02565b6040805192851683529316602082015291829190820190565b0390a238806159d5565b508315156159c3565b90615b0343613214565b6001600160d01b03918280615b1786613516565b169116019182116114aa57615b2b92615d02565b9091565b6001600160d01b0390818111615b43571690565b604490604051906306dfcc6560e41b825260d060048301526024820152fd5b600a5490600160401b82101561074b576001820180600a558210156115ad57600a600052805160209091015160301b65ffffffffffff191665ffffffffffff9190911617600080516020615ecf83398151915290910155565b8054600160401b81101561074b57615bd8916001820181556115b2565b615c0357815160209092015160301b65ffffffffffff191665ffffffffffff92909216919091179055565b634e487b7160e01b600052600060045260246000fd5b600a549192918015615cd857615c31615c4991613246565b600a600052600080516020615ecf8339815191520190565b9081549165ffffffffffff90818416918316808311615cc657869203615c8e57615c8792509065ffffffffffff82549181199060301b169116179055565b60301c9190565b5050615cc190615cad615c9f6111d0565b65ffffffffffff9092168252565b6001600160d01b0385166020820152615b62565b615c87565b604051632520601d60e01b8152600490fd5b50615cfc90615ce8615c9f6111d0565b6001600160d01b0384166020820152615b62565b60009190565b80549293928015615d9957615d19615d2691613246565b8260005260206000200190565b9182549265ffffffffffff91828516928116808411615cc657879303615d655750615c8792509065ffffffffffff82549181199060301b169116179055565b915050615cc191615d85615d776111d0565b65ffffffffffff9093168352565b6001600160d01b0386166020830152615bbb565b5090615cfc91615daa615d776111d0565b6001600160d01b0385166020830152615bbb565b6001600160a01b03808316929181811690848203615e5357600082815260086020526040902080546001600160a01b031981166001600160a01b038716179091556107fd9593169392615e4d9285907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f600080a46001600160a01b031660009081526020819052604090205490565b916159a7565b60405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1a5bdb88191a5cd8589b1959606a1b6044820152606490fdfedf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fdc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb550bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3501b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6728d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802a264697066735822122078481891fe41ac3ee41783209cee49690836206191078d8d72f9eabe987135c964736f6c63430008140033bb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444c65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8dec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724", + "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8063013cf08b146103de57806306fdde03146103d9578063078f6208146103d4578063095ea7b3146103cf5780630c0512e9146103ca5780630d61b519146103c557806318160ddd146103c0578063204c5d1f146103bb57806322dbefbb1461030c57806322f3e2d4146103b657806323b872dd146103b15780632519ae5c146103ac578063313ce567146103a75780633644e515146103a25780633a46b1a8146102d557806347c661401461039d5780634b145793146103075780634bf5d7e9146103985780634cf2ab32146103935780634cfd16bb1461038e5780634de184f6146103845780634fa76ec9146103895780635221c1f014610384578063548d496f1461037f578063587cde1e1461037a5780635c19a95c146103755780635cf0e8a4146103705780636cbadbfa146103705780636dcf811d1461036b5780636fcfff451461036657806370a08231146103615780637ce288ea1461035c5780637e5a9b47146103575780637ecebe00146103525780637f6dda141461034d57806384b0196e1461034857806385e59ce2146103435780638e539e8c1461033e5780639080936f1461033957806391ddadf41461033457806395d89b411461032f57806398e527d31461032a5780639a49bdde146103255780639ab24eb014610320578063a351f6151461031b578063a9059cbb14610316578063adf7420714610311578063b0b6cc1a1461030c578063b3fe8bcb14610307578063c3cda52014610302578063c8a6d06e146102fd578063c97bfe6b146102f8578063c9a3c0c7146102f3578063c9d27afe146102ee578063d505accf146102e9578063dcf628c0146102e4578063dd62ed3e146102df578063e49a62e9146102da578063eaeded5f146102d5578063eced3dfb146102d0578063f1127ed8146102cb5763f2c26a47146102c657600080fd5b612965565b612832565b612814565b6113ee565b6127f6565b612793565b6126fb565b612551565b612404565b612314565b6122c3565b61223b565b6120f9565b6114af565b6110a3565b611df9565b611d9f565b611c67565b611c1e565b611c00565b611be2565b611b3b565b611b0f565b611ae6565b611ab4565b611a7d565b6119bb565b611985565b611948565b61191a565b61188f565b611852565b6117e5565b6117c2565b6117a4565b61177c565b61173d565b61170c565b6116b7565b6116ee565b61163d565b6115ca565b6114e0565b611419565b6113cb565b6113af565b61124a565b61110e565b6110d7565b610fbb565b610e7e565b610d88565b610d6a565b610d35565b610cf5565b610c14565b610b5d565b90600182811c92168015610413575b60208310146103fd57565b634e487b7160e01b600052602260045260246000fd5b91607f16916103f2565b600c546000929161042d826103e3565b80825291600190818116908115610492575060011461044b57505050565b91929350600c600052600080516020615e8f833981519152916000925b84841061047a57505060209250010190565b80546020858501810191909152909301928101610468565b915050602093945060ff929192191683830152151560051b010190565b600d54600092916104bf826103e3565b8082529160019081811690811561049257506001146104dd57505050565b91929350600d600052600080516020615eef833981519152916000925b84841061050c57505060209250010190565b805460208585018101919091529093019281016104fa565b600e5460009291610534826103e3565b80825291600190818116908115610492575060011461055257505050565b91929350600e600052600080516020615eaf833981519152916000925b84841061058157505060209250010190565b8054602085850181019190915290930192810161056f565b600f54600092916105a9826103e3565b8082529160019081811690811561049257506001146105c757505050565b91929350600f600052600080516020615f4f833981519152916000925b8484106105f657505060209250010190565b805460208585018101919091529093019281016105e4565b6010546000929161061e826103e3565b80825291600190818116908115610492575060011461063c57505050565b919293506010600052600080516020615f2f833981519152916000925b84841061066b57505060209250010190565b80546020858501810191909152909301928101610659565b9060009291805491610694836103e3565b9182825260019384811690816000146106f657506001146106b6575b50505050565b90919394506000526020928360002092846000945b8386106106e25750505050010190388080806106b0565b8054858701830152940193859082016106cb565b9294505050602093945060ff191683830152151560051b010190388080806106b0565b634e487b7160e01b600052604160045260246000fd5b61014081019081106001600160401b0382111761074b57604052565b610719565b604081019081106001600160401b0382111761074b57604052565b60a081019081106001600160401b0382111761074b57604052565b60c081019081106001600160401b0382111761074b57604052565b90601f801991011681019081106001600160401b0382111761074b57604052565b60405190600082600c54916107d6836103e3565b8083529260019081811690811561084c57506001146107ff575b506107fd925003836107a1565b565b600c60009081529150600080516020615e8f8339815191525b84831061083157506107fd9350508101602001386107f0565b81935090816020925483858a01015201910190918592610818565b9050602092506107fd94915060ff191682840152151560051b820101386107f0565b60405190600082600d5491610882836103e3565b8083529260019081811690811561084c57506001146108a857506107fd925003836107a1565b600d60009081529150600080516020615eef8339815191525b8483106108da57506107fd9350508101602001386107f0565b81935090816020925483858a010152019101909185926108c1565b60405190600082600e5491610909836103e3565b8083529260019081811690811561084c575060011461092f57506107fd925003836107a1565b600e60009081529150600080516020615eaf8339815191525b84831061096157506107fd9350508101602001386107f0565b81935090816020925483858a01015201910190918592610948565b60405190600082600f5491610990836103e3565b8083529260019081811690811561084c57506001146109b657506107fd925003836107a1565b600f60009081529150600080516020615f4f8339815191525b8483106109e857506107fd9350508101602001386107f0565b81935090816020925483858a010152019101909185926109cf565b6040519060008260105491610a17836103e3565b8083529260019081811690811561084c5750600114610a3d57506107fd925003836107a1565b601060009081529150600080516020615f2f8339815191525b848310610a6f57506107fd9350508101602001386107f0565b81935090816020925483858a01015201910190918592610a56565b906107fd610a9e9260405193848092610683565b03836107a1565b60005b838110610ab85750506000910152565b8181015183820152602001610aa8565b90602091610ae181518092818552858086019101610aa5565b601f01601f1916010190565b9793610b16610b52989497936101409b97939e9d9c9e8b526101608060208d01528b0190610ac8565b60408a0197909752606089015215156080880152151560a087015260c08601526001600160a01b031660e0850152838203610100850152610ac8565b946101208201520152565b34610bfb576020366003190112610bfb57600435600052601b60205260406000208054610bf760405191610b9f83610b988160018801610683565b03846107a1565b600284015460038501546004860154600587015460068801549397929492936001600160a01b031691610bd460078601610a8a565b93600a6008870154960154966040519a8b9a60ff808660081c169516938c610aed565b0390f35b600080fd5b906020610c11928181520190610ac8565b90565b34610bfb57600080600319360112610cf2576040519080600354610c37816103e3565b80855291600191808316908115610cc85750600114610c6d575b610bf785610c61818703826107a1565b60405191829182610c00565b9250600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b828410610cb0575050508101602001610c6182610bf7610c51565b80546020858701810191909152909301928101610c95565b869550610bf796935060209250610c6194915060ff191682840152151560051b8201019293610c51565b80fd5b34610bfb576000366003190112610bfb576060601654601854601e549060405192835260208301526040820152f35b6001600160a01b03811603610bfb57565b34610bfb576040366003190112610bfb57610d5f600435610d5581610d24565b6024359033612c15565b602060405160018152f35b34610bfb576000366003190112610bfb576020601754604051908152f35b34610bfb576020366003190112610bfb577fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d260043580600052601b60205260076040600020610dd9838254146140d4565b610e4860048201610dfa610df5610df1835460ff1690565b1590565b61415b565b610e0b6018546008850154146142e2565b610e3b610e1786614274565b60058601544210801590610e77575b610e2f9061432d565b81610e6f575b50614389565b805460ff19166001179055565b0190610e5b610e5683610a8a565b614b1e565b610e6a604051928392836143cb565b0390a1005b905038610e35565b5080610e26565b34610bfb576000366003190112610bfb576020600254604051908152f35b90815180825260208092019182818360051b85019501936000915b848310610ec75750505050505090565b9091929394958480610ee183856001950387528a51610ac8565b9801930193019194939290610eb7565b610c1190602081528251610f96610f1661014092836020860152610160850190610ac8565b610f77610f63610f4f610f3b60208a015194601f1995868a83030160408b0152610ac8565b60408a0151858983030160608a0152610ac8565b606089015184888303016080890152610ac8565b6080880151838783030160a0880152610ac8565b9060a087015160c086015260c0870151908583030160e0860152610e9c565b9360e08101516101009081850152810151906101209182850152015191019015159052565b34610bfb57600080600319360112610cf257610bf790611097604051610fe08161072f565b60609283825283602083015283604083015283808301528360808301528060a08301528360c08301528060e0830152610100908082840152610120809301526110276111c3565b936110306107c2565b855261103a61086e565b60208601526110476108f5565b604086015261105461097c565b90850152611060610a03565b608085015260115460a0850152611075615651565b60c085015260135460e08501526014549084015260155460ff16151590830152565b60405191829182610ef1565b34610bfb576020366003190112610bfb576004356000526019602052602060018060a01b0360406000205416604051908152f35b34610bfb576000366003190112610bfb5760ff601f54161580611102575b6020906040519015158152f35b5060155460ff166110f5565b34610bfb576060366003190112610bfb5760043561112b81610d24565b60243561113781610d24565b6001600160a01b03821660009081526001602090815260408083203384529091529020604435919054926000198410611181575b6111759350612b03565b60405160018152602090f35b82841061119d576111988361117595033383612cc9565b61116b565b604051637dc7a0d960e11b81523360048201526024810185905260448101849052606490fd5b604051906107fd8261072f565b604051906107fd82610750565b6001600160401b03811161074b57601f01601f191660200190565b929192611204826111dd565b9161121260405193846107a1565b829481845281830111610bfb578281602093846000960137010152565b9080601f83011215610bfb57816020610c11933591016111f8565b34610bfb5760a0366003190112610bfb576004356001600160401b038111610bfb5761127a90369060040161122f565b6064359060443561128a83610d24565b611345608435916112b76112b26112ab85600052601d602052604060002090565b5460ff1690565b6135fd565b6112cb6001600160a01b038616151561546e565b6112ed6112e8610df16112ab84600052601a602052604060002090565b6154a9565b336000908152602081905260409020611309905b5415156135a5565b6040516304fa45bf60e31b602082015260248101919091526001600160a01b03909416604485015283606481015b03601f1981018552846107a1565b601e54926113528461302f565b9360005b81811061138057610bf7611370338887876024358b613ee5565b6040519081529081906020820190565b8061139a6113906113aa93611588565b90549060031b1c90565b6113a48289613d8c565b526136cc565b611356565b34610bfb576000366003190112610bfb57602060405160128152f35b34610bfb576000366003190112610bfb5760206113e6612ec7565b604051908152f35b34610bfb576040366003190112610bfb5760206113e660043561141081610d24565b602435906129f2565b34610bfb576020366003190112610bfb5760043580600052601b6020526114476040600020918254146140d4565b606461147260018060d01b03611468611463600a860154612aac565b61327d565b1660165490614261565b04906003600282015491015491828201908183116114aa57604080519384526020840194909452928201526060810191909152608090f35b612aed565b34610bfb576020366003190112610bfb57600435600052601a602052602060ff604060002054166040519015158152f35b34610bfb576000366003190112610bfb576114fa43613214565b65ffffffffffff8061150b43613214565b1691160361156057610bf760405161152281610750565b601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c740000006020820152604051918291602083526020830190610ac8565b6040516301bfc1c560e61b8152600490fd5b634e487b7160e01b600052603260045260246000fd5b601e548110156115ad57601e600052600080516020615f0f8339815191520190600090565b611572565b80548210156115ad5760005260206000200190600090565b34610bfb576020366003190112610bfb57600435601e54811015610bfb57602090601e600052600080516020615f0f8339815191520154604051908152f35b90815180825260208080930193019160005b828110611629575050505090565b83518552938101939281019260010161161b565b34610bfb576000366003190112610bfb5760405180601e54808252826020809301601e600052600080516020615f0f8339815191529260005b858282106116a15750505061168d925003836107a1565b610bf7604051928284938452830190611609565b8554845260019586019588955093019201611676565b34610bfb576020366003190112610bfb5760206116e4600435600052601d60205260ff6040600020541690565b6040519015158152f35b34610bfb576000366003190112610bfb576020601654604051908152f35b34610bfb576020366003190112610bfb57600435600052601d602052602060ff604060002054166040519015158152f35b34610bfb576020366003190112610bfb57602060043561175c81610d24565b60018060a01b038091166000526008825260406000205416604051908152f35b34610bfb576020366003190112610bfb576117a260043561179c81610d24565b33615dbe565b005b34610bfb576000366003190112610bfb576020601854604051908152f35b34610bfb576000366003190112610bfb57602060ff601f54166040519015158152f35b34610bfb576020366003190112610bfb5760043561180281610d24565b6001600160a01b031660009081526009602052604090205463ffffffff908181116118335760209160405191168152f35b604490604051906306dfcc6560e41b8252602060048301526024820152fd5b34610bfb576020366003190112610bfb5760206113e660043561187481610d24565b6001600160a01b031660009081526020819052604090205490565b34610bfb576020366003190112610bfb576004356118ac81614858565b156118de5760207f57df5a6a467271f04b10f7fe9e66d21dcd8ae7eaf079099d48959f24a53b691091604051908152a1005b60405162461bcd60e51b81526020600482015260146024820152734e6f7420616c6c20636861696e7320726561647960601b6044820152606490fd5b34610bfb576020366003190112610bfb576040611938600435614274565b8251911515825215156020820152f35b34610bfb576020366003190112610bfb5760043561196581610d24565b60018060a01b031660005260076020526020604060002054604051908152f35b34610bfb576040366003190112610bfb57610bf76119a7602435600435615723565b604051918291602083526020830190611609565b34610bfb576000366003190112610bfb57611a4e6119f87f0000000000000000000000000000000000000000000000000000000000000000613061565b610bf7611a247f000000000000000000000000000000000000000000000000000000000000000061315a565b611a5c611a2f613007565b91604051958695600f60f81b875260e0602088015260e0870190610ac8565b908582036040870152610ac8565b90466060850152306080850152600060a085015283820360c0850152611609565b34610bfb576020366003190112610bfb5760206064611aab6001600160d01b03611468611463600435612aac565b04604051908152f35b34610bfb576020366003190112610bfb5760206001600160d01b03611add611463600435612aac565b16604051908152f35b34610bfb576020366003190112610bfb576020611b046004356157c8565b60ff60405191168152f35b34610bfb576000366003190112610bfb576020611b2b43613214565b65ffffffffffff60405191168152f35b34610bfb57600080600319360112610cf2576040519080600454611b5e816103e3565b80855291600191808316908115610cc85750600114611b8757610bf785610c61818703826107a1565b9250600483527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410611bca575050508101602001610c6182610bf7610c51565b80546020858701810191909152909301928101611baf565b34610bfb576000366003190112610bfb576020601c54604051908152f35b34610bfb576020366003190112610bfb5760206113e66004356148bf565b34610bfb576020366003190112610bfb57600435611c3b81610d24565b6001600160a01b031660009081526009602090815260409091206001600160d01b0390611add90613516565b34610bfb576040366003190112610bfb576004356001600160401b03602435818111610bfb5736602382011215610bfb578060040135918211610bfb573660248383010111610bfb57610e6a602492847fc7c129e53e59dadfa16305619e80c7519f1f6912c10915359fd75b56bcecdd7b95600052601b602052611d916040600020611cf5838254146140d4565b611d82600a6004830192611d15611d10610df1865460ff1690565b61446d565b611d2460058201544210614120565b6006810154611d4e90611d47906001600160a01b03165b6001600160a01b031690565b33146144ac565b0154611d7b611d5d82336129f2565b916001600160d01b0390611d749061146390612aac565b169161424b565b10156144e9565b805461ff001916610100179055565b604051948594019084614541565b34610bfb576040366003190112610bfb57610d5f600435611dbf81610d24565b6024359033612b03565b9181601f84011215610bfb578235916001600160401b038311610bfb576020808501948460051b010111610bfb57565b34610bfb576060366003190112610bfb576001600160401b03600435602435828111610bfb57611e2d903690600401611dc9565b92604435908111610bfb5783611e4884923690600401611dc9565b611e50614228565b611e6484600052601b602052604060002090565b90611e71858354146140d4565b6004820192611e8c611e87610df1865460ff1690565b61456f565b60185494611ea060088501548714156145cb565b611eb2611ead878661588b565b614627565b611ebd83821461466a565b611f47876007860197611f3f600a611ed48b610a8a565b6020815191012098015497611f31896040519485936020850197889094939260809260a08301967f45de75acfcd4cbcc5691559486749bf0d5eb65e4b24c59ac2f258ba6bfceaa3484526020840152604083015260608201520152565b03601f1981018352826107a1565b519020612fe1565b9760009889945b83861061200f575050507fda7dba8f94d70cde423cce3a243bebf95d2ec927507b566f67e329dcfe2d06bb877fbadbd87941bb6424ed4aa4719bf01a3319b64480e49f89018c718603239553d2611fe889611fcf8a610e3b8f611fc8611fc18e61146861146360018060d01b0392612aac565b6064900490565b11156147c9565b611fdb610e5682610a8a565b60405191829185836143cb565b0390a1601854604080519283526020830191909152819081015b0390a16117a26001600b55565b909192939499868b61204b611d3b61204661203e612038612031868a8f6146a7565b36916111f8565b89614815565b938a8a6146e8565b6146f8565b6001600160a01b03821690612061908214614702565b8d88886000925b83106120a45750505050916120836120949261209a946129f2565b9061208f82151561477d565b613270565b9a6136cc565b9493929190611f4e565b83949550926120c0611d3b612046856120c7956120cc986146e8565b141561473e565b6136cc565b90899291888f8990612068565b6064359060ff82168203610bfb57565b6084359060ff82168203610bfb57565b34610bfb5760c0366003190112610bfb5760043561211681610d24565b604435906024356121256120d9565b8342116121ad576121a16117a2946121a8926040519060208201927fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf845260018060a01b03881660408401528660608401526080830152608082526121898261076b565b61219c60a4359360843593519020612fe1565b612d72565b9182612d1c565b615dbe565b604051632341d78760e11b815260048101859052602490fd5b6001600160401b03811161074b5760051b60200190565b81601f82011215610bfb578035916121f4836121c6565b9261220260405194856107a1565b808452602092838086019260051b820101928311610bfb578301905b82821061222c575050505090565b8135815290830190830161221e565b34610bfb5760c0366003190112610bfb576001600160401b03600435818111610bfb5761226c90369060040161122f565b90604435818111610bfb5736602382011215610bfb576122969036906024816004013591016111f8565b608435918211610bfb57610bf7926122b56113709336906004016121dd565b91606435916024359061363f565b34610bfb576020366003190112610bfb57600435601c54811015610bfb57602090601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110154604051908152f35b34610bfb576080366003190112610bfb576004356001600160401b038111610bfb5761234761133791369060040161122f565b6044356123c46064359161236b6112b26112ab85600052601d602052604060002090565b61238a6123856112ab83600052601a602052604060002090565b6154ed565b3360009081526020819052604090206123a290611301565b604051633972e9fb60e21b602082015260248101919091529384906044820190565b601e54926123d18461302f565b9360005b8181106123ef57610bf7611370338887876024358b613ee5565b8061139a6113906123ff93611588565b6123d5565b34610bfb576040366003190112610bfb576004356024358015158103610bfb577f78975aaf742630489badd22949b88ac50eaaea576339ee05440b671a33bfb6a99161244e614228565b61200261246582600052601b602052604060002090565b612471838254146140d4565b61248060058201544210614120565b612494610df5610df1600484015460ff1690565b600b8101906124c36124be610df16112ab33869060018060a01b0316600052602052604060002090565b6141a7565b6124d46018546008830154146141e3565b6124fc610e3b6124e8600a840154336129f2565b336000908152602095909552604090942090565b841561253c57600201612510828254613270565b90555b604080519384523360208501529315159383019390935260608201929092529081906080820190565b60030161254a828254613270565b9055612513565b34610bfb5760e0366003190112610bfb5760043561256e81610d24565b60243561257a81610d24565b604435906064356125896120e9565b814211612674576001600160a01b0385811660008181526007602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c99281019283529283019390935292861660608201526080810187905260a081019190915260c08082019490945292835261262d92909161261a60e0836107a1565b61219c60c4359360a43593519020612fe1565b6001600160a01b038481169082160361264a57506117a292612c15565b6040516325c0072360e11b81526001600160a01b0391821660048201529084166024820152604490fd5b60405163313c898160e11b815260048101839052602490fd5b9794916126b290610c119c9a97949b9895928a526101608060208c01528a0190610ac8565b604089019a909a52606088015215156080870152151560a086015260c08501526001600160a01b031660e084015261010083015261012082015280830361014090910152611609565b34610bfb576020366003190112610bfb5760043580600052601b602052604060002061272a81549283146140d4565b610bf760028201549260038301549060048401546005850154612756600687015460018060a01b031690565b90600887015492600a8801549461277b600961277460018c01610a8a565b9a016156d4565b966040519a8b9a60ff808660081c169516938c61268d565b34610bfb576040366003190112610bfb5760206127ed6004356127b581610d24565b602435906127c282610d24565b60018060a01b03166000526001835260406000209060018060a01b0316600052602052604060002090565b54604051908152f35b34610bfb576020366003190112610bfb5760206116e4600435614858565b34610bfb576000366003190112610bfb576020601e54604051908152f35b34610bfb576040366003190112610bfb5760043561284f81610d24565b6024359063ffffffff82168203610bfb57610bf79161289f91612870612d03565b50612879612d03565b506001600160a01b03166000908152600960205260409020612899612d03565b506115b2565b50604051906128ad82610750565b5465ffffffffffff811680835260309190911c60209283019081526040805192835290516001600160d01b031692820192909252918291820190565b9794919361293261294e946129246101009a976129169a9e9d9a612940968e610120908181520190610ac8565b8d810360208f015290610ac8565b908b820360408d0152610ac8565b9089820360608b0152610ac8565b908782036080890152610ac8565b9660a086015260c085015260e08401521515910152565b34610bfb576000366003190112610bfb576040805161298e816129878161041d565b03826107a1565b610bf78251926129a8846129a1816104af565b03856107a1565b80516129b78161298781610524565b81516129c68161298781610599565b82516129d5816129878161060e565b60115490601354926014549460ff601554169651998a998a6128e9565b6001600160a01b031660009081526009602052604081209091612a1490612aac565b81549083829160058411612a5d575b612a2e935084613544565b80612a425750505b6001600160d01b031690565b91612a4f60209293613246565b92815220015460301c612a36565b9192612a68816133a1565b81039081116114aa57612a2e9385875265ffffffffffff808360208a2001541690851610600014612a9a575091612a23565b929150612aa690613262565b90612a23565b65ffffffffffff612abc43613214565b1680821015612acf5750610c1190613214565b6044925060405191637669fc0f60e11b835260048301526024820152fd5b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0380821694939291908515612bfc5782168015612be3576001600160a01b03821660009081526020819052604090205495848710612bb457846107fd969703612b658460018060a01b03166000526000602052604060002090565b556001600160a01b0384166000908152602081815260409182902080548801905590518681527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9190a36158d6565b60405163391434e360e21b81526001600160a01b03841660048201526024810188905260448101869052606490fd5b60405163ec442f0560e01b815260006004820152602490fd5b604051634b637e8f60e11b815260006004820152602490fd5b6001600160a01b038082169291908315612cb0578216938415612c975780612c8d7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92594612c7660209560018060a01b03166000526001602052604060002090565b9060018060a01b0316600052602052604060002090565b55604051908152a3565b604051634a1406b160e11b815260006004820152602490fd5b60405163e602df0560e01b815260006004820152602490fd5b906001600160a01b0380831615612cb057811615612c9757612c76612d009260018060a01b03166000526001602052604060002090565b55565b60405190612d1082610750565b60006020838281520152565b6001600160a01b03811660009081526007602052604090208054600181019091559091819003612d4a575050565b6040516301d4b62360e61b81526001600160a01b039092166004830152602482015260449150fd5b91610c119391612d8193612d8a565b90929192612e3a565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612e0e57926020929160ff608095604051948552168484015260408301526060820152600092839182805260015afa15612e025780516001600160a01b03811615612df957918190565b50809160019190565b604051903d90823e3d90fd5b50505060009160039190565b60041115612e2457565b634e487b7160e01b600052602160045260246000fd5b612e4381612e1a565b80612e4c575050565b612e5581612e1a565b60018103612e6f5760405163f645eedf60e01b8152600490fd5b612e7881612e1a565b60028103612e995760405163fce698f760e01b815260048101839052602490fd5b80612ea5600392612e1a565b14612ead5750565b6040516335e2f38360e21b81526004810191909152602490fd5b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161480612fb8575b15612f22577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a08152612fb281610786565b51902090565b507f00000000000000000000000000000000000000000000000000000000000000004614612ef9565b604290612fec612ec7565b906040519161190160f01b8352600283015260228201522090565b604051602081018181106001600160401b0382111761074b5760405260008152906000368137565b90613039826121c6565b61304660405191826107a1565b8281528092613057601f19916121c6565b0190602036910137565b60ff811461309f5760ff811690601f821161308d576040519161308383610750565b8252602082015290565b604051632cd44ac360e21b8152600490fd5b506040516005548160006130b2836103e3565b8083529260019081811690811561313857506001146130d9575b50610c11925003826107a1565b6005600090815291507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b84831061311d5750610c119350508101602001386130cc565b81935090816020925483858901015201910190918492613104565b905060209250610c1194915060ff191682840152151560051b820101386130cc565b60ff811461317c5760ff811690601f821161308d576040519161308383610750565b5060405160065481600061318f836103e3565b8083529260019081811690811561313857506001146131b55750610c11925003826107a1565b6006600090815291507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b8483106131f95750610c119350508101602001386130cc565b819350908160209254838589010152019101909184926131e0565b65ffffffffffff90818111613227571690565b604490604051906306dfcc6560e41b8252603060048301526024820152fd5b6000198101919082116114aa57565b919082039182116114aa57565b90600182018092116114aa57565b919082018092116114aa57565b600a80546000816005811161332b575b509290925b8381106132d157505060009180156000146132af57505050600090565b6132b890613246565b9152600080516020615ecf833981519152015460301c90565b90928082169080831860011c82018092116114aa578360005265ffffffffffff8083600080516020615ecf833981519152015416908616106000146133195750925b90613292565b93915061332590613262565b90613313565b9091613336826133a1565b82039182116114aa5783835265ffffffffffff8083600080516020615ecf833981519152015416908616106000146133715750905b3861328d565b915061337c90613262565b61336b565b811561338b570490565b634e487b7160e01b600052601260045260246000fd5b6001811115610c1157600181600160801b8110156134ba575b61346261345861344e61344461343a61343061346e97600488600160401b6134699a10156134ad575b6401000000008110156134a0575b62010000811015613493575b610100811015613487575b601081101561347b575b1015613473575b60030260011c613429818b613381565b0160011c90565b613429818a613381565b6134298189613381565b6134298188613381565b6134298187613381565b6134298186613381565b8093613381565b821190565b900390565b60011b613419565b811c9160021b91613412565b60081c91811b91613408565b60101c9160081b916133fd565b60201c9160101b916133f1565b60401c9160201b916133e3565b50600160401b9050608082901c6133ba565b600a54600090806134de575050600090565b806000198101116114aa57600a7fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a79252015460301c90565b80546000918161352857505050600090565b6000199282848101116114aa5760209181522001015460301c90565b91905b8382106135545750505090565b9091928083169080841860011c82018092116114aa5760008581526020902082015465ffffffffffff90811690841610156135935750925b9190613547565b93925061359f90613262565b9161358c565b156135ac57565b60405162461bcd60e51b815260206004820152602360248201527f4d75737420686f6c6420746f6b656e7320746f206372656174652070726f706f6044820152621cd85b60ea1b6064820152608490fd5b1561360457565b60405162461bcd60e51b815260206004820152601360248201527210da185a5b881b9bdd081cdd5c1c1bdc9d1959606a1b6044820152606490fd5b9290939133600052600060205261365c60406000205415156135a5565b841561368757610c119482600052601d60205261368060ff604060002054166135fd565b3394613ee5565b60405162461bcd60e51b815260206004820152601960248201527f4475726174696f6e206d75737420626520706f736974697665000000000000006044820152606490fd5b60001981146114aa5760010190565b8181106136e6575050565b600081556001016136db565b90601f82116136ff575050565b6107fd91600c600052600080516020615e8f833981519152906020601f840160051c83019310613737575b601f0160051c01906136db565b909150819061372a565b90601f821161374e575050565b6107fd91600d600052600080516020615eef833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b90601f8211613792575050565b6107fd91600e600052600080516020615eaf833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b90601f82116137d6575050565b6107fd91600f600052600080516020615f4f833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b90601f821161381a575050565b6107fd916010600052600080516020615f2f833981519152906020601f840160051c8301931061373757601f0160051c01906136db565b9190601f811161386057505050565b6107fd926000526020600020906020601f840160051c8301931061373757601f0160051c01906136db565b9081516001600160401b03811161074b576138b0816138ab600c546103e3565b6136f2565b602080601f83116001146138ec57508192936000926138e1575b50508160011b916000199060031b1c191617600c55565b0151905038806138ca565b90601f1983169461390d600c600052600080516020615e8f83398151915290565b926000905b87821061394a575050836001959610613931575b505050811b01600c55565b015160001960f88460031b161c19169055388080613926565b80600185968294968601518155019501930190613912565b9081516001600160401b03811161074b5761398781613982600d546103e3565b613741565b602080601f83116001146139c357508192936000926139b8575b50508160011b916000199060031b1c191617600d55565b0151905038806139a1565b90601f198316946139e4600d600052600080516020615eef83398151915290565b926000905b878210613a21575050836001959610613a08575b505050811b01600d55565b015160001960f88460031b161c191690553880806139fd565b806001859682949686015181550195019301906139e9565b9081516001600160401b03811161074b57613a5e81613a59600e546103e3565b613785565b602080601f8311600114613a9a5750819293600092613a8f575b50508160011b916000199060031b1c191617600e55565b015190503880613a78565b90601f19831694613abb600e600052600080516020615eaf83398151915290565b926000905b878210613af8575050836001959610613adf575b505050811b01600e55565b015160001960f88460031b161c19169055388080613ad4565b80600185968294968601518155019501930190613ac0565b9081516001600160401b03811161074b57613b3581613b30600f546103e3565b6137c9565b602080601f8311600114613b715750819293600092613b66575b50508160011b916000199060031b1c191617600f55565b015190503880613b4f565b90601f19831694613b92600f600052600080516020615f4f83398151915290565b926000905b878210613bcf575050836001959610613bb6575b505050811b01600f55565b015160001960f88460031b161c19169055388080613bab565b80600185968294968601518155019501930190613b97565b9081516001600160401b03811161074b57613c0c81613c076010546103e3565b61380d565b602080601f8311600114613c485750819293600092613c3d575b50508160011b916000199060031b1c191617601055565b015190503880613c26565b90601f19831694613c696010600052600080516020615f2f83398151915290565b926000905b878210613ca6575050836001959610613c8d575b505050811b01601055565b015160001960f88460031b161c19169055388080613c82565b80600185968294968601518155019501930190613c6e565b91909182516001600160401b03811161074b57613ce581613cdf84546103e3565b84613851565b602080601f8311600114613d21575081929394600092613d16575b50508160011b916000199060031b1c1916179055565b015190503880613d00565b90601f19831695613d3785600052602060002090565b926000905b888210613d7457505083600195969710613d5b575b505050811b019055565b015160001960f88460031b161c19169055388080613d51565b80600185968294968601518155019501930190613d3c565b80518210156115ad5760209160051b010190565b15613da757565b60405162461bcd60e51b815260206004820152601a60248201527f54617267657420636861696e206e6f7420737570706f727465640000000000006044820152606490fd5b601c54600160401b81101561074b576001810180601c558110156115ad57601c6000527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110155565b601e54600160401b81101561074b576001810180601e558110156115ad57601e600052600080516020615f0f8339815191520155565b90815491600160401b83101561074b5782613e8d9160016107fd950181556115b2565b90919082549060031b91821b91600019901b1916179055565b9081526001600160a01b039091166020820152606060408201819052610c1192910190610ac8565b604090610c11939281528160208201520190611609565b91949060175495613efd613ef8886136cc565b601755565b613f7a613f1488600052601b602052604060002090565b91888355613f4f600194613f2a88878701613cbe565b6000600286015560006003860155613f496004860160ff198154169055565b42613270565b60058401556006830180546001600160a01b0319166001600160a01b03871617905560078301613cbe565b846008820155613f97613f8c43613214565b65ffffffffffff1690565b806140c35750819060005b600a820155600960009101925b61406e575b505050614058614068937f7585f467599d0f008985f231af99293be388626ac16ca59505c2f8f88969cd637f5d1231ca3a274bcd2f510e0d53a889213ebf0315b86ee6bb9d73da08fba7460696947fdb17271edb72bcaba16ce918d885db2e701491c9ff3f713f80caf9d614aa9ff49461402d8a613dec565b61403d6040519283928c84613ea6565b0390a160408051888152602081019290925290918291820190565b0390a16040519182918583613ece565b0390a190565b86518110156140be57806140a461409f6112ab61408e6140b8958c613d8c565b51600052601d602052604060002090565b613da0565b6120c76140b1828a613d8c565b5185613e6a565b81613faf565b613fb4565b6140cc90613246565b908291613fa2565b156140db57565b60405162461bcd60e51b815260206004820152601760248201527f50726f706f73616c20646f6573206e6f742065786973740000000000000000006044820152606490fd5b1561412757565b60405162461bcd60e51b815260206004820152600c60248201526b159bdd1a5b99c8195b99195960a21b6044820152606490fd5b1561416257565b60405162461bcd60e51b815260206004820152601960248201527f50726f706f73616c20616c7265616479206578656375746564000000000000006044820152606490fd5b156141ae57565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b156141ea57565b60405162461bcd60e51b815260206004820152601660248201527557726f6e6720636861696e20666f7220766f74696e6760501b6044820152606490fd5b6002600b5414614239576002600b55565b604051633ee5aeb560e01b8152600490fd5b90600a820291808304600a14901517156114aa57565b818102929181159184041417156114aa57565b9081600052601b60205261428f6040600020928354146140d4565b6002820154600383015492838201908183116114aa57600a01546064906142c6906001600160d01b03906114689061146390612aac565b041115928391826142d8575b50509190565b11905038806142d2565b156142e957565b606460405162461bcd60e51b815260206004820152602060248201527f45786563757465206f6e6c7920696e20676f7665726e616e636520636861696e6044820152fd5b1561433457565b60405162461bcd60e51b815260206004820152602760248201527f566f74696e67206e6f7420656e64656420616e642071756f72756d206e6f74206044820152661c995858da195960ca1b6064820152608490fd5b1561439057565b60405162461bcd60e51b8152602060048201526013602482015272141c9bdc1bdcd85b081b9bdd081c185cdcd959606a1b6044820152606490fd5b9190825260209160408382015260009282546143e6816103e3565b938460408501526001918281169081600014614448575060011461440d575b505050505090565b6000908152828120949550935b858510614434575050506060925001013880808080614405565b80548585016060015293820193810161441a565b93505050506060935060ff929192191683830152151560051b01013880808080614405565b1561447457565b60405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48195e1958dd5d195960821b6044820152606490fd5b156144b357565b60405162461bcd60e51b815260206004820152600e60248201526d27b7363c9034b734ba34b0ba37b960911b6044820152606490fd5b156144f057565b60405162461bcd60e51b815260206004820152602360248201527f496e73756666696369656e7420766f74696e6720706f77657220746f2063616e60448201526218d95b60ea1b6064820152608490fd5b91926060938192845260406020850152816040850152848401376000828201840152601f01601f1916010190565b1561457657565b60405162461bcd60e51b815260206004820152602760248201527f50726f706f73616c20616c726561647920657865637574656420696e20746869604482015266399031b430b4b760c91b6064820152608490fd5b156145d257565b60405162461bcd60e51b815260206004820152602760248201527f557365206578656375746550726f706f73616c20696e20676f7665726e616e63604482015266329031b430b4b760c91b6064820152608490fd5b1561462e57565b60405162461bcd60e51b8152602060048201526014602482015273436861696e206e6f7420696e207461726765747360601b6044820152606490fd5b1561467157565b60405162461bcd60e51b815260206004820152600e60248201526d426164207369676e61747572657360901b6044820152606490fd5b91908110156115ad5760051b81013590601e1981360301821215610bfb5701908135916001600160401b038311610bfb576020018236038113610bfb579190565b91908110156115ad5760051b0190565b35610c1181610d24565b1561470957565b60405162461bcd60e51b815260206004820152600d60248201526c426164207369676e617475726560981b6044820152606490fd5b1561474557565b60405162461bcd60e51b815260206004820152601060248201526f223ab83634b1b0ba329039b4b3b732b960811b6044820152606490fd5b1561478457565b60405162461bcd60e51b815260206004820152601b60248201527f4e6f20766f74696e6720706f77657220617420736e617073686f7400000000006044820152606490fd5b156147d057565b60405162461bcd60e51b815260206004820152601a60248201527f51756f72756d206e6f74207265616368656420627920736967730000000000006044820152606490fd5b8151610c1192612d8192604019830161484d5761484692506020820151906060604084015193015160001a90612d8a565b9192909190565b505060009160029190565b614871600091808352601b6020526040832054146140d4565b80601e54915b82811061488657505050600190565b6148a6614892826148bf565b600052601d60205260ff6040600020541690565b156148b9576148b4906136cc565b614877565b50905090565b601e548110156148e257601e600052600080516020615f0f833981519152015490565b60405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840c6d0c2d2dc40d2dcc8caf606b1b6044820152606490fd5b9092919261492a816111dd565b9161493860405193846107a1565b829482845282820111610bfb5760206107fd930190610aa5565b9190604083820312610bfb5782516001600160e01b031981168103610bfb57926020810151906001600160401b038211610bfb57019080601f83011215610bfb578151610c119260200161491d565b90816020910312610bfb575190565b9190826040910312610bfb5760208251920151610c1181610d24565b9080601f83011215610bfb578151610c119260200161491d565b9080601f83011215610bfb578151906149fe826121c6565b92614a0c60405194856107a1565b828452602092838086019160051b83010192808411610bfb57848301915b848310614a3a5750505050505090565b82516001600160401b038111610bfb578691614a5b848480948901016149cc565b815201920191614a2a565b91909161010081840312610bfb578051916001600160401b0392838111610bfb5784614a939184016149cc565b936020830151848111610bfb5781614aac9185016149cc565b936040840151818111610bfb5782614ac59186016149cc565b936060810151828111610bfb5783614ade9183016149cc565b936080820151838111610bfb5784614af79184016149cc565b9360a08301519360c0840151908111610bfb5760e091614b189185016149e6565b92015190565b614b32602091828082518301019101614952565b91906001600160e01b03191663cabd6ed960e01b8103614b7157508181614b62926107fd94518301019101614a66565b96959095949194939293615241565b63f0f9e6b760e01b8103614b9a57508181614b95926107fd945183010191016149a1565b615334565b632ab43f7f60e11b8103614bc357508181614bbe926107fd945183010191016149a1565b6153d4565b6304fa45bf60e31b8103614bf657508181614be7926107fd945183010191016149b0565b6001600160a01b031690615531565b633972e9fb60e21b8103614c1f57508181614c1a926107fd945183010191016149a1565b6155e1565b63093f734560e31b8103614c4857508181614c43926107fd945183010191016149a1565b614cbb565b633e78500160e21b8103614c7157508181614c6c926107fd945183010191016149a1565b614e56565b633cdb568760e11b1491506107fd90505760405162461bcd60e51b81526020600482015260116024820152702ab735b737bbb71037b832b930ba34b7b760791b6044820152606490fd5b80600052601d60205260ff60406000205416614d69576018548114614d2457614d1f81614d16610e3b7fbba9d55e9fd1a441b1617724e2fdb76777d15ec77ab2b72ac15952cbe97085db94600052601d602052604060002090565b61137081613e34565b0390a1565b60405162461bcd60e51b815260206004820152601860248201527f43616e6e6f74206164642063757272656e7420636861696e00000000000000006044820152606490fd5b60405162461bcd60e51b815260206004820152601760248201527f436861696e20616c726561647920737570706f727465640000000000000000006044820152606490fd5b15614db557565b60405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f76652063757272656e7420636861696e00000000006044820152606490fd5b601e548015614e4057600019810190808210156115ad577f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e34f600091601e83520155601e55565b634e487b7160e01b600052603160045260246000fd5b614e7660ff614e6f83600052601d602052604060002090565b54166135fd565b614e84601854821415614dae565b614ea5614e9b82600052601d602052604060002090565b805460ff19169055565b60005b601e5480821015614f225782614ec061139084611588565b14614ed45750614ecf906136cc565b614ea8565b91614f1a614d1f92613e8d614f14611390614f0f7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d598613246565b611588565b91611588565b611370614dfa565b5050614d1f7f11a9d1a77f76361ed131c19b1dc5758504c51dbde2e49fc973a0ef9577ad13d591611370565b15614f5557565b60405162461bcd60e51b815260206004820152601660248201527553796d626f6c2063616e6e6f7420626520656d70747960501b6044820152606490fd5b15614f9a57565b60405162461bcd60e51b815260206004820152601860248201527f4c6f636174696f6e2063616e6e6f7420626520656d70747900000000000000006044820152606490fd5b15614fe657565b60405162461bcd60e51b815260206004820152601460248201527324b73b30b634b210353ab934b9b234b1ba34b7b760611b6044820152606490fd5b1561502957565b60405162461bcd60e51b815260206004820152600b60248201526a0496e76616c6964204b50560ac1b6044820152606490fd5b805190600160401b821161074b57601254826012558083106150d4575b5060126000526020908101907fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34446000925b8484106150b8575050505050565b600183826150c883945186613cbe565b019201930192906150aa565b600060128152837fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344492830192015b828110615110575050615079565b8061511d600192546103e3565b8061512a575b5001615102565b601f9081811184146151425750508281555b38615123565b836151649261515685600052602060002090565b920160051c820191016136db565b6000818152602081208183555561513c565b9897969491936151ba6151d6946151ac8c9761519d6151c896610100808c528b0190610ac8565b89810360209a8b015290610ac8565b8c810360408e015290610ac8565b908a820360608c0152610ac8565b9088820360808a0152610ac8565b9260a087015285830360c08701528151908184528084019381808460051b8301019401946000915b84831061521357505050505060e09150930152565b90919293948480615230600193601f198682030187528a51610ac8565b9801930193019195949392906151fe565b94909591939692968551156152f8577f26b111ff0b7dac90ab526647564775a68003343f6d805a09caf67a9790a4161b97614d1f9561528289511515614f4e565b61528e82511515614f93565b615299841515614fdf565b6152a4861515615022565b6152ad8861388b565b6152b689613962565b6152bf81613a39565b6152c882613b10565b6152d183613be7565b6152da84601155565b6152e38561505c565b6152ec86601355565b60405198899889615176565b60405162461bcd60e51b81526020600482015260146024820152734e616d652063616e6e6f7420626520656d70747960601b6044820152606490fd5b801515806153c9575b156153845760168054908290556040805191825260208201929092527fd0198ea88bf9c4ad5317b68e697944e524541fcb494d854f095b1cd88a097ab69181908101614d1f565b60405162461bcd60e51b815260206004820152601960248201527f496e76616c69642071756f72756d2070657263656e74616765000000000000006044820152606490fd5b50606481111561533d565b80600052601d6020526153ee60ff604060002054166135fd565b601854908181146154395760188190556040805192835260208301919091527f979103c7afbf0138fe781172504ceb318ff78f9a420de8cabac8141f0121b521919081908101614d1f565b60405162461bcd60e51b815260206004820152600d60248201526c14d85b594818da185a5b881251609a1b6044820152606490fd5b1561547557565b60405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606490fd5b156154b057565b60405162461bcd60e51b81526020600482015260156024820152744d6f64756c6520616c72656164792065786973747360581b6044820152606490fd5b156154f457565b60405162461bcd60e51b8152602060048201526015602482015274135bd91d5b1948191bd95cc81b9bdd08195e1a5cdd605a1b6044820152606490fd5b7ff14475b19484bf096265507cc0c41cd3bf1994992088806830686e2d7272271991906155686001600160a01b038316151561546e565b80600052601a60205261558360ff60406000205416156154a9565b600081815260196020526040902080546001600160a01b0319166001600160a01b038416179055601a602090815260406000819020805460ff1916600117905580519283526001600160a01b03909316908201529081908101614d1f565b60207f4c7c76abe482a2c36ea52f1b999474c69f8b4afeeac5635f8aea2526864ba8539180600052601a825261561e60ff604060002054166154ed565b600081815260198352604080822080546001600160a01b0319169055601a845290819020805460ff1916905551908152a1565b6012549061565e826121c6565b91604061566d815194856107a1565b8184528360208091019160126000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444906000935b8585106156b157505050505050565b600184819284516156c681612987818a610683565b8152019301940193916156a2565b9060405191828154918282526020928383019160005283600020936000905b828210615709575050506107fd925003836107a1565b8554845260019586019588955093810193909101906156f3565b601c90815492838210156157bc578101918282116114aa578383116157b4575b8183038381116114aa576157569061302f565b93825b84811061576857505050505090565b818110156115ad576157af9083600052807f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a21101546113a46157a98784613255565b89613d8c565b615759565b839250615743565b50505050610c11613007565b6157dc81600052601b602052604060002090565b6157e8828254146140d4565b600481015460ff8160081c166158835760ff1661587c5761580a600592614274565b92909101544210918215928280615875575b61586c57829182615853575b505061584c5781615843575b5061583e57600090565b600290565b90501538615834565b5050600190565b84925090615864575b503880615828565b90503861585c565b50505050600590565b508161581c565b5050600390565b505050600490565b9060005b6009830180548210156158cd576158a78284926115b2565b90549060031b1c146158c5576158be6009916136cc565b905061588f565b505050600190565b50505050600090565b6001600160a01b03908116929181908415615962575b1690811561591a575b6107fd93600052600860205280604060002054169160005260406000205416906159a7565b61592383615b2f565b9361592d43613214565b6001600160d01b039586806159406134cc565b16911690039586116114aa576107fd9561595991615c19565b505093506158f5565b905061596d83615b2f565b9061597743613214565b6001600160d01b0392838061598a6134cc565b169116019283116114aa5783926159a091615c19565b50506158ec565b6001600160a01b03808316939291908116908185141580615af0575b6159cf575b5050505050565b81615a54575b5050826159e4575b80806159c8565b6001600160a01b031660009081526009602052604090207fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72491615a3191615a2b9091615b2f565b90615af9565b604080516001600160d01b039384168152919092166020820152a23880806159dd565b6001600160a01b03166000908152600960205260409020615a7484615b2f565b615a7d43613214565b6001600160d01b03918280615a9186613516565b1691169003928284116114aa577fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72493615ae692615acd92615d02565b6040805192851683529316602082015291829190820190565b0390a238806159d5565b508315156159c3565b90615b0343613214565b6001600160d01b03918280615b1786613516565b169116019182116114aa57615b2b92615d02565b9091565b6001600160d01b0390818111615b43571690565b604490604051906306dfcc6560e41b825260d060048301526024820152fd5b600a5490600160401b82101561074b576001820180600a558210156115ad57600a600052805160209091015160301b65ffffffffffff191665ffffffffffff9190911617600080516020615ecf83398151915290910155565b8054600160401b81101561074b57615bd8916001820181556115b2565b615c0357815160209092015160301b65ffffffffffff191665ffffffffffff92909216919091179055565b634e487b7160e01b600052600060045260246000fd5b600a549192918015615cd857615c31615c4991613246565b600a600052600080516020615ecf8339815191520190565b9081549165ffffffffffff90818416918316808311615cc657869203615c8e57615c8792509065ffffffffffff82549181199060301b169116179055565b60301c9190565b5050615cc190615cad615c9f6111d0565b65ffffffffffff9092168252565b6001600160d01b0385166020820152615b62565b615c87565b604051632520601d60e01b8152600490fd5b50615cfc90615ce8615c9f6111d0565b6001600160d01b0384166020820152615b62565b60009190565b80549293928015615d9957615d19615d2691613246565b8260005260206000200190565b9182549265ffffffffffff91828516928116808411615cc657879303615d655750615c8792509065ffffffffffff82549181199060301b169116179055565b915050615cc191615d85615d776111d0565b65ffffffffffff9093168352565b6001600160d01b0386166020830152615bbb565b5090615cfc91615daa615d776111d0565b6001600160d01b0385166020830152615bbb565b6001600160a01b03808316929181811690848203615e5357600082815260086020526040902080546001600160a01b031981166001600160a01b038716179091556107fd9593169392615e4d9285907f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f600080a46001600160a01b031660009081526020819052604090205490565b916159a7565b60405162461bcd60e51b815260206004820152601360248201527211195b1959d85d1a5bdb88191a5cd8589b1959606a1b6044820152606490fdfedf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c7bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fdc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8d7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb550bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3501b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6728d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802a264697066735822122078481891fe41ac3ee41783209cee49690836206191078d8d72f9eabe987135c964736f6c63430008140033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/backend/cache/solidity-files-cache.json b/backend/cache/solidity-files-cache.json index 8e10d2f..894d260 100644 --- a/backend/cache/solidity-files-cache.json +++ b/backend/cache/solidity-files-cache.json @@ -1,9 +1,9 @@ { "_format": "hh-sol-cache-2", "files": { - "/app/contracts/DLE.sol": { - "lastModificationDate": 1755001745034, - "contentHash": "a77cbe367dec496f574716fd50e1ef07", + "/home/alex/Digital_Legal_Entity(DLE)/backend/contracts/DLE.sol": { + "lastModificationDate": 1755277189432, + "contentHash": "03b4ac83148b5b1246f64c54fa0e959c", "sourceName": "contracts/DLE.sol", "solcConfig": { "version": "0.8.20", @@ -44,7 +44,7 @@ "DLE" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/ReentrancyGuard.sol": { "lastModificationDate": 1754306760451, "contentHash": "190613e556d509d9e9a0ea43dc5d891d", "sourceName": "@openzeppelin/contracts/utils/ReentrancyGuard.sol", @@ -81,7 +81,7 @@ "ReentrancyGuard" ] }, - "/app/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol": { "lastModificationDate": 1754306764456, "contentHash": "227a6eb2225701c12d9c959b758b6333", "sourceName": "@openzeppelin/contracts/token/ERC20/ERC20.sol", @@ -123,7 +123,44 @@ "ERC20" ] }, - "/app/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { + "lastModificationDate": 1754306764456, + "contentHash": "81de029d56aa803972be03c5d277cb6c", + "sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "viaIR": true, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "ECDSA" + ] + }, + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol": { "lastModificationDate": 1754306768254, "contentHash": "51c2083b160453420aaa0a046c16d5ca", "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol", @@ -164,7 +201,7 @@ "ERC20Votes" ] }, - "/app/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol": { "lastModificationDate": 1754306768254, "contentHash": "b1a8fc63b83ce00408e0c9ed1230b717", "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol", @@ -207,44 +244,7 @@ "ERC20Permit" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": { - "lastModificationDate": 1754306764456, - "contentHash": "81de029d56aa803972be03c5d277cb6c", - "sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol", - "solcConfig": { - "version": "0.8.20", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "viaIR": true, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.20" - ], - "artifacts": [ - "ECDSA" - ] - }, - "/app/node_modules/@openzeppelin/contracts/utils/Context.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Context.sol": { "lastModificationDate": 1754306760451, "contentHash": "67bfbc07588eb8683b3fd8f6f909563e", "sourceName": "@openzeppelin/contracts/utils/Context.sol", @@ -281,7 +281,7 @@ "Context" ] }, - "/app/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/draft-IERC6093.sol": { "lastModificationDate": 1754306760460, "contentHash": "267d92fe4de67b1bdb3302c08f387dbf", "sourceName": "@openzeppelin/contracts/interfaces/draft-IERC6093.sol", @@ -320,7 +320,7 @@ "IERC721Errors" ] }, - "/app/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/IERC20.sol": { "lastModificationDate": 1754306764456, "contentHash": "8f19f64d2adadf448840908bbaf431c8", "sourceName": "@openzeppelin/contracts/token/ERC20/IERC20.sol", @@ -357,7 +357,7 @@ "IERC20" ] }, - "/app/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol": { "lastModificationDate": 1754306768254, "contentHash": "794db3115001aa372c79326fcfd44b1f", "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol", @@ -396,46 +396,7 @@ "IERC20Metadata" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol": { - "lastModificationDate": 1754306764456, - "contentHash": "657c6dfea3bae1af948de6113ba01cea", - "sourceName": "@openzeppelin/contracts/utils/structs/Checkpoints.sol", - "solcConfig": { - "version": "0.8.20", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "viaIR": true, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [ - "../math/Math.sol" - ], - "versionPragmas": [ - "^0.8.20" - ], - "artifacts": [ - "Checkpoints" - ] - }, - "/app/node_modules/@openzeppelin/contracts/governance/utils/Votes.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/governance/utils/Votes.sol": { "lastModificationDate": 1754306764456, "contentHash": "95aceafdc639babdd22576e5e3774d64", "sourceName": "@openzeppelin/contracts/governance/utils/Votes.sol", @@ -481,10 +442,10 @@ "Votes" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/math/Math.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol": { "lastModificationDate": 1754306764456, - "contentHash": "2b2665ae9bdb1af440658741a77fe213", - "sourceName": "@openzeppelin/contracts/utils/math/Math.sol", + "contentHash": "657c6dfea3bae1af948de6113ba01cea", + "sourceName": "@openzeppelin/contracts/utils/structs/Checkpoints.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -511,91 +472,16 @@ } }, "imports": [ - "../Panic.sol", - "./SafeCast.sol" + "../math/Math.sol" ], "versionPragmas": [ "^0.8.20" ], "artifacts": [ - "Math" + "Checkpoints" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { - "lastModificationDate": 1754306764456, - "contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca", - "sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol", - "solcConfig": { - "version": "0.8.20", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "viaIR": true, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.20" - ], - "artifacts": [ - "SafeCast" - ] - }, - "/app/node_modules/@openzeppelin/contracts/utils/Panic.sol": { - "lastModificationDate": 1754306760451, - "contentHash": "2133dc13536b4a6a98131e431fac59e1", - "sourceName": "@openzeppelin/contracts/utils/Panic.sol", - "solcConfig": { - "version": "0.8.20", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "viaIR": true, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.20" - ], - "artifacts": [ - "Panic" - ] - }, - "/app/node_modules/@openzeppelin/contracts/utils/Nonces.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Nonces.sol": { "lastModificationDate": 1754306760451, "contentHash": "c32d108058718efb9061b88e83a83f79", "sourceName": "@openzeppelin/contracts/utils/Nonces.sol", @@ -632,7 +518,47 @@ "Nonces" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol": { + "lastModificationDate": 1754306760460, + "contentHash": "65ba9f89b1057e2192e341b286d4e261", + "sourceName": "@openzeppelin/contracts/interfaces/IERC5805.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "viaIR": true, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../governance/utils/IVotes.sol", + "./IERC6372.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC5805" + ] + }, + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol": { "lastModificationDate": 1754306764456, "contentHash": "8dbb261c55f358342798c4d1803d4f8e", "sourceName": "@openzeppelin/contracts/utils/cryptography/EIP712.sol", @@ -673,10 +599,10 @@ "EIP712" ] }, - "/app/node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol": { - "lastModificationDate": 1754306760460, - "contentHash": "65ba9f89b1057e2192e341b286d4e261", - "sourceName": "@openzeppelin/contracts/interfaces/IERC5805.sol", + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": { + "lastModificationDate": 1754306764456, + "contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca", + "sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -702,18 +628,15 @@ } } }, - "imports": [ - "../governance/utils/IVotes.sol", - "./IERC6372.sol" - ], + "imports": [], "versionPragmas": [ "^0.8.20" ], "artifacts": [ - "IERC5805" + "SafeCast" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/types/Time.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/types/Time.sol": { "lastModificationDate": 1754306764456, "contentHash": "d83e7814a059fc1287fd765f424ce004", "sourceName": "@openzeppelin/contracts/utils/types/Time.sol", @@ -753,7 +676,81 @@ "Time" ] }, - "/app/node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol": { + "lastModificationDate": 1754306764456, + "contentHash": "905ffceb29869fee4b5a649abe7e2927", + "sourceName": "@openzeppelin/contracts/governance/utils/IVotes.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "viaIR": true, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IVotes" + ] + }, + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol": { + "lastModificationDate": 1754306760460, + "contentHash": "414cd6acf090e4009cf016ff62ecbd88", + "sourceName": "@openzeppelin/contracts/interfaces/IERC6372.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "viaIR": true, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "IERC6372" + ] + }, + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol": { "lastModificationDate": 1754306760460, "contentHash": "94364524cb1a39dcbc3d3afff6d8e53e", "sourceName": "@openzeppelin/contracts/interfaces/IERC5267.sol", @@ -790,7 +787,7 @@ "IERC5267" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/ShortStrings.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/ShortStrings.sol": { "lastModificationDate": 1754306760451, "contentHash": "94e7feaf138d08fb736e43ca0be9bf26", "sourceName": "@openzeppelin/contracts/utils/ShortStrings.sol", @@ -829,7 +826,7 @@ "ShortStrings" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": { "lastModificationDate": 1754306764465, "contentHash": "86fd93657e4e27ff76c38699e9b9fcef", "sourceName": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol", @@ -868,7 +865,7 @@ "MessageHashUtils" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": { "lastModificationDate": 1754306760451, "contentHash": "e656d64c4ce918f3d13030b91c935134", "sourceName": "@openzeppelin/contracts/utils/StorageSlot.sol", @@ -905,7 +902,7 @@ "StorageSlot" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/Strings.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Strings.sol": { "lastModificationDate": 1754306760451, "contentHash": "a55fef2557b35bac18a1880d3c2e6740", "sourceName": "@openzeppelin/contracts/utils/Strings.sol", @@ -946,7 +943,47 @@ "Strings" ] }, - "/app/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/Math.sol": { + "lastModificationDate": 1754306764456, + "contentHash": "2b2665ae9bdb1af440658741a77fe213", + "sourceName": "@openzeppelin/contracts/utils/math/Math.sol", + "solcConfig": { + "version": "0.8.20", + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "viaIR": true, + "evmVersion": "paris", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } + }, + "imports": [ + "../Panic.sol", + "./SafeCast.sol" + ], + "versionPragmas": [ + "^0.8.20" + ], + "artifacts": [ + "Math" + ] + }, + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": { "lastModificationDate": 1754306764456, "contentHash": "ae3528afb8bdb0a7dcfba5b115ee8074", "sourceName": "@openzeppelin/contracts/utils/math/SignedMath.sol", @@ -985,10 +1022,10 @@ "SignedMath" ] }, - "/app/node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol": { - "lastModificationDate": 1754306764456, - "contentHash": "905ffceb29869fee4b5a649abe7e2927", - "sourceName": "@openzeppelin/contracts/governance/utils/IVotes.sol", + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Panic.sol": { + "lastModificationDate": 1754306760451, + "contentHash": "2133dc13536b4a6a98131e431fac59e1", + "sourceName": "@openzeppelin/contracts/utils/Panic.sol", "solcConfig": { "version": "0.8.20", "settings": { @@ -1019,47 +1056,10 @@ "^0.8.20" ], "artifacts": [ - "IVotes" + "Panic" ] }, - "/app/node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol": { - "lastModificationDate": 1754306760460, - "contentHash": "414cd6acf090e4009cf016ff62ecbd88", - "sourceName": "@openzeppelin/contracts/interfaces/IERC6372.sol", - "solcConfig": { - "version": "0.8.20", - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "viaIR": true, - "evmVersion": "paris", - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata" - ], - "": [ - "ast" - ] - } - } - } - }, - "imports": [], - "versionPragmas": [ - "^0.8.20" - ], - "artifacts": [ - "IERC6372" - ] - }, - "/app/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": { "lastModificationDate": 1754306768254, "contentHash": "94ec15baf0d5df863f45b8f351937ec7", "sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol", @@ -1096,7 +1096,7 @@ "IERC20Permit" ] }, - "/app/contracts/FactoryDeployer.sol": { + "/home/alex/Digital_Legal_Entity(DLE)/backend/contracts/FactoryDeployer.sol": { "lastModificationDate": 1754685617489, "contentHash": "6161bbb21af830bc05d6acd8682d9678", "sourceName": "contracts/FactoryDeployer.sol", diff --git a/backend/contracts/DLE.sol b/backend/contracts/DLE.sol index b4a37cc..5578b2a 100644 --- a/backend/contracts/DLE.sol +++ b/backend/contracts/DLE.sol @@ -26,10 +26,10 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { struct DLEInfo { string name; string symbol; + string tokenImage; // Картинка токена (base64 или URL) string location; string coordinates; uint256 jurisdiction; - uint256 oktmo; string[] okvedCodes; uint256 kpp; uint256 creationTimestamp; @@ -39,10 +39,10 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { struct DLEConfig { string name; string symbol; + string tokenImage; // Картинка токена (base64 или URL) string location; string coordinates; uint256 jurisdiction; - uint256 oktmo; string[] okvedCodes; uint256 kpp; uint256 quorumPercentage; @@ -91,10 +91,10 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { event DLEInitialized( string name, string symbol, + string tokenImage, string location, string coordinates, uint256 jurisdiction, - uint256 oktmo, string[] okvedCodes, uint256 kpp, address tokenAddress, @@ -112,7 +112,7 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { event ProposalExecutionApprovedInChain(uint256 proposalId, uint256 chainId); event ChainAdded(uint256 chainId); event ChainRemoved(uint256 chainId); - event DLEInfoUpdated(string name, string symbol, string location, string coordinates, uint256 jurisdiction, uint256 oktmo, string[] okvedCodes, uint256 kpp); + event DLEInfoUpdated(string name, string symbol, string tokenImage, string location, string coordinates, uint256 jurisdiction, string[] okvedCodes, uint256 kpp); event QuorumPercentageUpdated(uint256 oldQuorumPercentage, uint256 newQuorumPercentage); event CurrentChainIdUpdated(uint256 oldChainId, uint256 newChainId); @@ -129,10 +129,10 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { dleInfo = DLEInfo({ name: config.name, symbol: config.symbol, + tokenImage: config.tokenImage, location: config.location, coordinates: config.coordinates, jurisdiction: config.jurisdiction, - oktmo: config.oktmo, okvedCodes: config.okvedCodes, kpp: config.kpp, creationTimestamp: block.timestamp, @@ -166,10 +166,10 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { emit DLEInitialized( config.name, config.symbol, + config.tokenImage, config.location, config.coordinates, config.jurisdiction, - config.oktmo, config.okvedCodes, config.kpp, address(this), @@ -509,11 +509,11 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { // Декодируем операцию (bytes4 selector, bytes memory data) = abi.decode(_operation, (bytes4, bytes)); - if (selector == bytes4(keccak256("updateDLEInfo(string,string,string,string,uint256,uint256,string[],uint256)"))) { + if (selector == bytes4(keccak256("updateDLEInfo(string,string,string,string,string,uint256,uint256,string[],uint256)"))) { // Операция обновления информации DLE - (string memory name, string memory symbol, string memory location, string memory coordinates, - uint256 jurisdiction, uint256 oktmo, string[] memory okvedCodes, uint256 kpp) = abi.decode(data, (string, string, string, string, uint256, uint256, string[], uint256)); - _updateDLEInfo(name, symbol, location, coordinates, jurisdiction, oktmo, okvedCodes, kpp); + (string memory name, string memory symbol, string memory tokenImage, string memory location, string memory coordinates, + uint256 jurisdiction, string[] memory okvedCodes, uint256 kpp) = abi.decode(data, (string, string, string, string, string, uint256, string[], uint256)); + _updateDLEInfo(name, symbol, tokenImage, location, coordinates, jurisdiction, okvedCodes, kpp); } else if (selector == bytes4(keccak256("updateQuorumPercentage(uint256)"))) { // Операция обновления процента кворума (uint256 newQuorumPercentage) = abi.decode(data, (uint256)); @@ -550,20 +550,20 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { * @dev Обновить информацию DLE * @param _name Новое название * @param _symbol Новый символ + * @param _tokenImage Новая картинка токена * @param _location Новое местонахождение * @param _coordinates Новые координаты * @param _jurisdiction Новая юрисдикция - * @param _oktmo Новый ОКТМО * @param _okvedCodes Новые коды ОКВЭД * @param _kpp Новый КПП */ function _updateDLEInfo( string memory _name, string memory _symbol, + string memory _tokenImage, string memory _location, string memory _coordinates, uint256 _jurisdiction, - uint256 _oktmo, string[] memory _okvedCodes, uint256 _kpp ) internal { @@ -571,19 +571,18 @@ contract DLE is ERC20, ERC20Permit, ERC20Votes, ReentrancyGuard { require(bytes(_symbol).length > 0, "Symbol cannot be empty"); require(bytes(_location).length > 0, "Location cannot be empty"); require(_jurisdiction > 0, "Invalid jurisdiction"); - require(_oktmo > 0, "Invalid OKTMO"); require(_kpp > 0, "Invalid KPP"); dleInfo.name = _name; dleInfo.symbol = _symbol; + dleInfo.tokenImage = _tokenImage; dleInfo.location = _location; dleInfo.coordinates = _coordinates; dleInfo.jurisdiction = _jurisdiction; - dleInfo.oktmo = _oktmo; dleInfo.okvedCodes = _okvedCodes; dleInfo.kpp = _kpp; - emit DLEInfoUpdated(_name, _symbol, _location, _coordinates, _jurisdiction, _oktmo, _okvedCodes, _kpp); + emit DLEInfoUpdated(_name, _symbol, _tokenImage, _location, _coordinates, _jurisdiction, _okvedCodes, _kpp); } /** diff --git a/backend/scripts/deploy/create-dle-v2.js b/backend/scripts/deploy/create-dle-v2.js index 33c7cb5..f567bad 100644 --- a/backend/scripts/deploy/create-dle-v2.js +++ b/backend/scripts/deploy/create-dle-v2.js @@ -39,10 +39,10 @@ async function main() { const dleConfig = { name: params.name, symbol: params.symbol, + tokenImage: params.tokenImage || '', location: params.location, coordinates: params.coordinates, jurisdiction: params.jurisdiction, - oktmo: params.oktmo, okvedCodes: params.okvedCodes || [], kpp: params.kpp, quorumPercentage: params.quorumPercentage, diff --git a/backend/services/dleV2Service.js b/backend/services/dleV2Service.js index 07ff0a3..a34b47c 100644 --- a/backend/services/dleV2Service.js +++ b/backend/services/dleV2Service.js @@ -112,7 +112,6 @@ class DLEV2Service { location: deployParams.location, coordinates: deployParams.coordinates, jurisdiction: deployParams.jurisdiction, - oktmo: deployParams.oktmo, okvedCodes: deployParams.okvedCodes || [], kpp: deployParams.kpp, quorumPercentage: deployParams.quorumPercentage, @@ -225,6 +224,19 @@ class DLEV2Service { if (!params.supportedChainIds || !Array.isArray(params.supportedChainIds) || params.supportedChainIds.length === 0) { throw new Error('Должна быть выбрана хотя бы одна сеть для деплоя'); } + + // Проверяем размер картинки токена (если передана) + if (params.tokenImage && params.tokenImage.trim() !== '') { + const base64Size = params.tokenImage.length; + if (base64Size > 350) { + throw new Error(`Размер картинки токена превышает лимит: ${base64Size} байт. Максимальный размер: 350 байт`); + } + + // Проверяем, что это валидный base64 + if (!params.tokenImage.startsWith('data:image/')) { + throw new Error('Картинка токена должна быть в формате base64 data URL'); + } + } } /** @@ -557,7 +569,6 @@ class DLEV2Service { location: params.location, coordinates: params.coordinates, jurisdiction: params.jurisdiction, - oktmo: params.oktmo, okvedCodes: params.okvedCodes || [], kpp: params.kpp, quorumPercentage: params.quorumPercentage, @@ -732,7 +743,6 @@ class DLEV2Service { location: params.location, coordinates: params.coordinates, jurisdiction: params.jurisdiction, - oktmo: params.oktmo, okvedCodes: params.okvedCodes || [], kpp: params.kpp, quorumPercentage: params.quorumPercentage, diff --git a/backup-database.sh b/backup-database.sh index e55d61b..480db5b 100755 --- a/backup-database.sh +++ b/backup-database.sh @@ -1,5 +1,17 @@ #!/bin/bash +/** + * Copyright (c) 2024-2025 Тарабанов Александр Викторович + * All rights reserved. + * + * This software is proprietary and confidential. + * Unauthorized copying, modification, or distribution is prohibited. + * + * For licensing inquiries: info@hb3-accelerator.com + * Website: https://hb3-accelerator.com + * GitHub: https://github.com/VC-HB3-Accelerator + */ + # Скрипт для создания резервных копий базы данных DLE # Запускать: ./backup-database.sh diff --git a/frontend/src/views/settings/DleDeployFormView.vue b/frontend/src/views/settings/DleDeployFormView.vue index 0f1fe26..0fba2ad 100644 --- a/frontend/src/views/settings/DleDeployFormView.vue +++ b/frontend/src/views/settings/DleDeployFormView.vue @@ -325,6 +325,38 @@ 3-10 символов для токена управления (Governance Token) + +
+ +
+ +
+
+ +

Нажмите для выбора картинки токена

+ Поддерживаются форматы: JPG, PNG, GIF (макс. 1MB, 200x200px) +
+
+ Картинка токена +
+ +
+
+
+
+ Загрузите картинку для вашего токена (макс. 350 байт в base64, автоматически сжимается до 200x200px) +
+ @@ -465,7 +497,7 @@ - +